단일연결리스트 c 코드.
개념 보고 짜봤는데 오랜만에 자료구조 공부하는거라 이 코딩이 맞는지 모르겠다.
#include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node *next; }; Node* createnode(int data) { Node *n = (Node *)malloc(sizeof(Node)); n->data = data; n->next = NULL; printf("data = %d의 새 노드 생성\n",data); return n; } void deletenode(Node *n) { free(n); } void appendnode(Node *head, Node *n) { if(head->next == NULL) { head->next = n; printf("data = %d노드와 data = %d노드 연결\n\n",head->data,n->data); } else { Node *tail = head; while(tail->next != NULL) tail = tail->next; tail->next = n; printf("data = %d노드와 data = %d노드 연결\n\n",tail->data,n->data); } } void printnode(Node *head) { Node *nextnode = head; while(nextnode->next!=NULL) { printf("%d->",nextnode->data); nextnode = nextnode->next; } printf("%d\n",nextnode->data); } void deletenode(Node *head, Node *remove) { Node *move = head; while(move!=remove) move = move->next; head->next = move->next; } void insertnode(int data, Node *head, Node *newnode) { Node *temp = head; while(temp->data!=data) temp = temp->next; newnode->next = temp->next; temp->next = newnode; } int main() { int i = 0; Node *root, *newnode; root = createnode(i); //가장 처음노드 만듬 for(i=1;i<10;i++) //노드 9개만들고 처음꺼랑 연결 { newnode = createnode(i); appendnode(root,newnode); } printnode(root); //해드부터 끝까지 출력 newnode = createnode(10); insertnode(5,root,newnode); //데이터 5노드다음에 위에서 만든 새 노드를 집어넣음 printnode(root); //해드부터 끝까지 출력(삽입 잘됬나 확인용) deletenode(root); deletenode(newnode); return 0; }
이중연결리스트. 위에 노드부분만
struct Node {
int data;
struct Node *previous;
struct Node *next;
};
처럼 바꿔주고 짜면 될듯. 별 큰 차이는 없어보인다.
원형 연결 리스트.
끝부분을 맨 처음 노드에 연결해 주면 돌게 되므로 원형 연결 리스트가 된다.
이 개념을 왜 어려워했었지....
'algorithm > theory' 카테고리의 다른 글
이진 트리 전위,중위,후위 탐색 (0) | 2016.07.26 |
---|---|
스택, 큐 구현 (0) | 2016.07.25 |
이중 해싱 (0) | 2016.07.14 |
선형 탐사법. (0) | 2016.07.13 |
레드-블랙 트리 탐색. (0) | 2016.06.29 |