자료구조_c언어_linkedList

2021. 5. 20. 16:21개발하는중/자료구조

728x90
반응형

 

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include<stdio.h>
#include<Windows.h>
#include<malloc.h>
 
typedef struct Node {
    int data;
    struct Node *link;
}NODE;
 
NODE *start = NULL;
 
void Add(int data);
NODE* FindLastNode();
void List();
void Delete();
NODE* Find(int data);
 
int main() {
    int select;
    while (1) {
        printf("#####리스트#####\n");
        printf("1.데이터 추가\n");
        printf("2.데이터 목록\n");
        printf("3.데이터 삭제\n");
        printf("4.데이터 검색\n");
        printf("5.종료\n");
 
        printf("선택:");
        scanf("%d"&select);
        if (select == 1) {
            int data;
            printf("추가할 데이터:");
            scanf("%d"&data);
            Add(data);
        }
        else if (select == 2) {
            List();
        }
        else if (select == 3) {
            Delete();
        }
        else if (select == 4) {
            int data;
            printf("검색할 데이터");
            scanf("%d"&data);
            NODE *target = Find(data);
            if (target == NULL) {
                printf("찾는 데이터가 없습니다.\n");
            }
            else {
                printf("-----검색 결과-----\n");
                printf("데이터:%d,주소:%p\n", target->data, target->link);
            }
        }
        else if (select == 5) {
            exit(0);
        }
        else {
            printf("잘못 입력하였습니다.\n");
        }
        system("pause");
        system("cls");
    }
}
 
void Add(int data) {
    NODE *tmp = (NODE*)malloc(sizeof(NODE));
    tmp->data = data;
    tmp->link = NULL;
    if (start == NULL) {
        start = tmp;
    }
    else {
        NODE *last = FindLastNode();
        if (last == NULL) {
            printf("데이터 설정 오류\n");
            return;
        }
        last->link = tmp;
    }
    printf("데이터 추가가 완료되었습니다.tmp=%p\n", tmp);
}
 
NODE* FindLastNode() {
    if (start == NULL) {
        return NULL;
    }
    else {
        NODE *tmp = start;
        while (1) {
            if (tmp->link == NULL)
                break;
            tmp = tmp->link;
        }
        return tmp;
    }
}
 
void List() {
    if (start == NULL) {
        printf("데이터가 존재하지 않습니다.\n");
        return;
    }
    NODE *tmp = start;
    while (1) {
        printf("data:%d,address:%p\n", tmp->data, tmp->link);
        start = start->link;
        tmp = tmp->link;
        if(tmp == NULL){
            break;
        }
    }
}
 
void Delete() {
    if (start == NULL) {
        printf("데이터가 없어서 지울 수 없습니다.\n");
        return;
    }
    NODE *delNode = start;//
    start = start->link;
    free(delNode);
    printf("삭제가 완료되었습니다.\n");
 
}
 
NODE* Find(int data) {
    if (start == NULL) {
        printf("데이터가 단 한개도 없습니다.\n");
        return NULL;//
    }
    else {
        NODE* findNode = start;
        while (1) {
            if (data == findNode->data) {
                return findNode;
            }
            else {
                findNode = findNode->link;//
                if (findNode == NULL)
                    break;
            }
        }
        printf("찾으시는 데이터는 저장되어 있지 않습니다.\n");
        return NULL;//
 
    }
 
}
cs
728x90