아주 간단한 링크드 리스트인데요. 알고리즘만 한번 봐주세요.
글쓴이: winicon / 작성시간: 목, 2004/11/25 - 4:01오후
아주 간단한 링크드 리스트인데요. 알고리즘만 한번 봐주세요.
그럼 답변 부탁 드립니다 ^^
///////////////////////////// main.c ////////////////////////////////////////////////////////////////// #include <stdlib.h> #include <stdio.h> #include <string.h> #include "linkedlist.h" int main(int argc, char* argv[]) { struct node *p; struct node *head = NULL; p = (struct node *)malloc(sizeof(struct node)); memset((struct node *)p, 0x00,sizeof(struct node)); head = p; travling(head); add(head, 1); add(head, 2); add(head, 3); travling(head); del(head, 3); travling(head); all_del(head); return 1; } ///////////////////////////// linkedlist.h /////////////////////////////////////////////////////////////// #ifndef _LINKEDLIST_H #define _LINKEDLIST_H #include <stdio.h> #include <stdlib.h> struct node { int key; struct node *next; }; void travling(struct node *p); void add(struct node *p, int key); void del(struct node *p, int key); void all_del(struct node *p); ////////////////////////////// linkedlist.c ////////////////////////////////////////////////////////// #include "linkedlist.h" void travling(struct node *p) { while(p != NULL) { printf("%d ", p->key); p = p->next; } printf("\n"); } void add(struct node *p, int key) { if(p == NULL) { struct node *q; q = (struct node *)malloc(sizeof(struct node)); q->key = key; q->next = NULL; p = q; } else { struct node *q; while(p->next != NULL) { p = p->next; } q = (struct node *)malloc(sizeof(struct node)); q->key = key; q->next = NULL; p->next = q; } } void del(struct node *p, int key) { if(p != NULL) { struct node *q; while(p->next != NULL && p->next->key != key) { p = p->next; } if(p->next == NULL) return; q = p->next; p->next = q->next; free(q); } } void all_del(struct node *p) { if(p != NULL) { struct node *t; while(p->next != NULL) { printf("delete = %d\n", p->key); t = p; p = p->next; free(t); t = NULL; } if(p != NULL) { free(p); p=NULL; } } }
Forums:
자세히 본건 아니지만 대충 말해보자면[code:1]void add
자세히 본건 아니지만 대충 말해보자면
는
이렇게 바꾸고 코드도 그에 맞게 수정해야 할 겁니다.
안 그러면 리스트에 노드를 추가하거나 삭제해도 아무 변화가 없을 겁니다.
제 생각으로는 linked_list 를 별도의 struct 로 만든뒤
관련된 함수를 linked_list 의 포인터를 받도록 수정하는 것이 더 나아 보입니다.
리스트 루트 노드의 사용도 좀 걸리는 군요.루트 노드를 사용하지 않는
리스트 루트 노드의 사용도 좀 걸리는 군요.
루트 노드를 사용하지 않는 경우와 사용하는 경우가 섞여 있어서 루트 노드의 키는 삭제를 못하게 되네요.
add에서 NULL노드를 넘길 때 리턴하면서 메모리 잃어버리는 것도 문제가 됩니다. 함수의 매개변수는 호출할 때 사용한 변수와는 별도의 것이라는 생각을 가지고 살펴보세요.
댓글 달기