* 동적 메모리 할당
new_node = (ListNode *)malloc(sizeof(ListNode));
new_node는 ListNode형식을 가리킬수 있는 포인터로서
ListNode의 size만큼의 공간을 malloc할당 받는다.
p.128_프로그램 4.12 전체 테스트 프로그램
#include <stdio.h>
#include <stdlib.h>
typedef int element;
//구조체
typedef struct ListNode {
element data;
struct ListNode *link;
} ListNode;
//삽입함수
void insert_node(ListNode **phead, ListNode *p, ListNode *new_node)
{
if(*phead==NULL) {
new_node->link = NULL;
*phead = new_node;
}
else if(p==NULL) {
new_node->link = *phead;
*phead = new_node;
}
else {
new_node->link = p->link;
p->link = new_node;
}
}
//삭제함수
void remove_node(ListNode **phead, ListNode *p, ListNode *removed)
{
if(p==NULL) *phead = (*phead)->link;
else p->link = removed->link;
free(removed);
}
//전체 출력
void display(ListNode *head)
{
ListNode *p=head;
while(p!=NULL) {
printf("%d => ", p->data);
p=p->link;
}
printf("\n");
}
//노드탐색
ListNode *search(ListNode *head, int x)
//찾을 리스트, 숫자
{
ListNode *p;
p=head;
while(p!=NULL) {
if(p->data == x) return p;
p=p->link;
}
return p;
}
//노드생성
ListNode *create_node(element data, ListNode *link)
{
ListNode *new_node;
new_node = (ListNode *)malloc(sizeof(ListNode));
if(new_node == NULL) printf("메모리 할당 에러");
new_node->data = data;
new_node->link = link;
return (new_node);
}
main()
{
ListNode *list1 = NULL, *list2 = NULL;
ListNode *p;
insert_node(&list1, NULL, create_node(10, NULL)); //삽입, 노드 생성
insert_node(&list1, NULL, create_node(20, NULL));
insert_node(&list1, NULL, create_node(30, NULL));
display(list1); //출력
remove_node(&list1, NULL, list1); //노드 삭제
display(list1); //출력
p = search(list1, 20); //탐색
printf("탐색 성공: %d\n\n", p->data);