C/자료구조

원형 리스트

NationCore 2019. 3. 13. 16:25

#include <stdio.h>

#include <stdlib.h>



typedef struct {

int data;

struct ListNode *link;

} ListNode;



void insert_first(ListNode **head, ListNode *node)

{

if (*head == NULL)

{

*head = node; // 헤드는노드

node->link = node; // 노드의 다음 주소는 노드

}

else {

node->link = (*head)->link; // 노드의 다음주소는 헤드의 주소

(*head)->link = node; // 헤드의 다음주소는 노드

}

}


void insert_last(ListNode **head, ListNode *node)

{

if (*head == NULL)

{

*head = node; //헤드의 주소는 노드

node->link = node; //노드의 다음주소는 노드

}

else {

node->link = (*head)->link; // 노드의 다음 주소는 헤드

(*head)->link = node; // 헤드의 다음주소는 노드

*head = node; // 헤드의 주소는 노드

}

}


void error(char *mes)

{

fprintf(stderr, "%s\n", mes);

exit(1);

}


ListNode *creat_node(int data, ListNode *link)

{

ListNode *new_node;

new_node = (ListNode *)malloc(sizeof(ListNode));

if (new_node == NULL) error("메모리 할당 에러");

new_node->data = data;

new_node->link = link;

return(new_node);

}


void display(ListNode *head)

{

ListNode *p;

if (head == NULL) return;

p = head;

do

{

printf("%d ->", p->data);

p = p->link;

} while (p != head);

}


void main(void)

{

ListNode *list1 = NULL;


insert_first(&list1, creat_node(10, NULL));

insert_first(&list1, creat_node(20, NULL));

insert_last(&list1, creat_node(30, NULL));


display(list1);

}



결과 :