#include <stdio.h>
#include <stdlib.h>
typedef struct _list
{
struct __node *cur; // 현재 커서 위치
struct __node *head; // 머리 위치
struct __node *tail; // 꼬리 위치
} linkedlist;
typedef struct __node
{
int data; // 노드 데이터
struct __node *next; // 해당 노드의 NEXT 노드
} node;
void createNode(linkedlist *L, int tdata) // 노드 생성
{
node *newNode = (node *)malloc(sizeof(node)); // 새로운 노드 메모리 확보
newNode->data = tdata; // 새로운 노드 데이터 삽입
newNode->next = NULL; // 새로운 노드의 NEXT 노드는 NULL
if (L->head == NULL && L->tail == NULL) // 기존 노드의 head와 tail이 NULL이면
{
L->head = L->tail = newNode; // 새로운노드가 head 및 tail이 됨
}
else // 기존 노드의 head 또는 tail에 데이터가 있으면
{
L->tail->next = newNode; // 기존 노드의 tail의 다음 노드는 새로운 노드
L->tail = newNode; // 기존 노드의 tail은 새로운 노드
}
}
void deleteLastNode(linkedlist *L) // 마지막 노드 삭제 함수
{
node *p = L->head; // 노드의 첫번째가 p노드
while (p->next->next != NULL) p = p->next; // p노드의 다다음 이 Null이 될때까지 p를 다음으로 이동
p->next = p->next->next; // p노드의 다음번째 즉 마지막 노드를 Null로 변경 (p->next->next는 null)
L->tail = p; // tail은 p노드로 변경
}
void printNodes(linkedlist *L) // 노드 출력 함수
{
node *p = L->head;
printf("[");
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("]\n");
}
int main(void)
{
linkedlist *L = (linkedlist *)malloc(sizeof(linkedlist));
L->cur = NULL;
L->head = NULL;
L->tail = NULL;
createNode(L, 1);
createNode(L, 2);
createNode(L, 3);
deleteLastNode(L);
createNode(L, 5);
deleteLastNode(L);
createNode(L, 6);
printNodes(L);
}
C언어로 작성된 단방향 연결리스트 코드 및 주석설명 :D
반응형
'e. 자료구조 및 알고리즘' 카테고리의 다른 글
C언어 퀵정렬(Quick Sort) (0) | 2019.07.12 |
---|---|
C언어 합병정렬(Merge Sort 2) (0) | 2019.07.12 |
C언어 합병정렬(Merge Sort 1) (0) | 2019.07.08 |
C언어 단방향 큐 (Queue) (0) | 2019.06.28 |