* 동적 메모리 할당


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);

Posted by 청웨일