-
Notifications
You must be signed in to change notification settings - Fork 0
/
단순연결리스트 삽입 & 탐색.c
125 lines (106 loc) · 3.02 KB
/
단순연결리스트 삽입 & 탐색.c
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
char data[4];
struct Node *next;
}Node;
void deleteAll(Node* head){
Node* removed;
while(head != NULL)
{
removed = head->next;//free할 주소를 removed 저장
head = head->next;//다음 주소로 이동;
free(removed);//removed 주소 할당해제
removed = removed->next = NULL;//할당해제 후 NULL참조로 저장
}
}
// 연결 리스트를 순서대로 출력하는 연산
void printList(Node *head)
{
Node *p = head;
printf("L = (");
while(p != NULL)
{
printf("%c",p -> data);//p의 값을 출력 처음에는 head 의 값
p = p->next;//p 를 다음 값으로 이동
if(p != NULL) printf(",");//다음데이터가 있으면 ->출력
}
printf(") \n");
}
// 첫번째 노드로 삽입하는 연산
Node* insertFirst(Node *head, char* x)
{
Node* newNode = malloc(sizeof(Node));//동적할당
strcpy(newNode->data, x);// 새 노드의 데이터 필드에 x 저장
newNode -> next = head;// newNode와 head 를 연결하기
return newNode;
}
// 노드를 pre 뒤에 삽입하는 연산
Node* insertMiddle(Node* head, Node* pre, char* x)
{
Node* newNode = malloc(sizeof(Node));//동적할당
strcpy(newNode->data, x); //데이터 저장
if(head == NULL || pre == NULL)
{ //오류
newNode->next = NULL;
head = newNode;
}
else
{
newNode -> next = pre;// 뉴노드를 pre 뒤에 값으로 연결하고
pre -> next = newNode;//프리뒤를 newnode로 설정
}
return head;//헤드주소 리턴;
}
Node* insertLast( Node *head, char *x){
Node* newNode = malloc(sizeof(Node));//새노드 동적할당;
Node* temp;
strcpy(newNode->data, x);
newNode->next = NULL;// newNode 는 마지막이니까 null값
if(head==NULL) //head가 null이면
{
newNode = head;// newNode가 head주소로 저장
return head;
}
temp = head;
while(temp -> next != NULL)/* temp는 NULL 이 나올때까지 계속해서 이동*/
//NULL을 newNode로 바꾸기
return head;
}
Node *searchNode(Node *head, char *x)
{
Node *temp = head;
while (temp != NULL)
{
if(strcmp(temp->data, x) == 0) return temp;
else temp = temp -> next;/*다음 주소로 이동*/
}
return temp;
}
int main(){
Node* head;
Node* p;
printf("(1) 공백리스트 생성하기! \n");
head = NULL;
printList( head );
printf("(2) 리스트 처음에 [수]노드 삽입하기! \n");
head = insertFirst( head, "수");
printList( head );
printf("(3) 리스트 마지막에 [금]노드 삽입하기! \n");
head = insertLast( head, "금");
printList( head );
printf("(4) 리스트 첫 번째에 [월]노드 삽입하기! \n");
head = insertFirst( head, "월");
printList( head);
printf("(5) 리스트에서 [수] 노드를 찾아 그 뒤에 [목] 삽입하기! \n");
p = searchNode(head, "수");
if( p == NULL ) printf("찾는 데이터가 없습니다.\n");
else head = insertMiddle( head, p, "목");
printList( head );
printf("(6) 리스트를 삭제하여 공백 리스트로 만들기! \n");
deleteAll(head);
printList( head );
return 0;
}