1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
 
typedef char element[100];
typedef struct ListNode {     // 노드 타입
    element data;
    struct ListNode *link;
} ListNode;
 
typedef struct CListType {
    ListNode *head;
} CListType;
 
// 리스트의 항목 출력
void print_list(CListType* L)
{
    ListNode* p;
 
    if (L->head == NULLreturn;
    p = L->head->link;
    do {
        printf("%s->", p->data);
        p = p->link;
    } while (p != L->head);
    printf("%s->", p->data); // 마지막 노드 출력
}
 
void insert_first(CListType* L, element data)
{
    ListNode *node = (ListNode *)malloc(sizeof(ListNode));
    strcpy(node->data, data);
    if (L->head == NULL) {
        L->head = node;
        node->link = L->head;
    }
    else {
        node->link = L->head->link;    // (1)
        L->head->link = node;        // (2)
    }
}
// 원형 연결 리스트 테스트 프로그램
int main(void)
{
    CListType list = { NULL };
 
    insert_first(&list, "KIM");
    insert_first(&list, "PARK");
    insert_first(&list, "CHOI");
 
    ListNode* p = list.head;
    for (int i = 0; i< 10; i++) {
        printf("현재 차례=%s \n", p->data);
        p = p->link;
    }
    return 0;
}
cs