반응형
참고자료
2020/04/29 - [자료구조] - C언어 자료구조 (심화 연결리스트 Linked_list 데이터 삽입)
2020/04/28 - [자료구조] - C언어 자료구조(심화 연결리스트 Linked_list 파일읽어서 정렬하기)
개요
이번에는 만들어 놓은 연결 리스트를 통해서 여러 가지 방법으로 검색하고
맨 마지막 데이터를 삭제하는 방법을 알아 보도록 하겠습니다.
이름으로 검색하는 search 함수
void search(node* head, char* name) {
system("cls");
while (head)
if (strcmp(head->name, name) == 0) {
printf("%s %d %.1f %s %s\n", head->name, head->sno, head->gpa, head->phone, head->province);
Sleep(3000);
break;
}
else {
head = head->link;
}
}
핸드폰 번호로 검색하는 phone_node 함수
void phone_node(node* head, char* phone) {
system("cls");
int i = 0;
node* front;
front = head;
while (front != NULL) {
if (strstr(front->phone, phone) != NULL) {
printf("%s %d %.1f %s %s\n", front->name, front->sno, front->gpa, front->phone, front->province);
i++;
}
front = front->link;
}
if (i == 0)
printf("데이터가 없습니다\n");
printf("총 %d 명", i);
Sleep(3000);
return;
}
지역으로 검색하는 region_node 함수
void region_node(node* head, char* region) {
system("cls");
int i = 0;
node* front, * temp;
front = head;
while (front != NULL) {
if (strcmp(front->province, region) == 0) {
printf("%s %d %.1f %s %s\n", front->name, front->sno, front->gpa, front->phone, front->province);
i++;
}
front = front->link;
}
if (i == 0)
printf("데이터가 없습니다\n");
printf("총 %d 명", i);
Sleep(3000);
return;
}
이름 두개를 입력받아 그사이에 데이터를 검색하는 print_node 함수
void print_node(node* head, char* fir_name, char* last_name) {
int i = 0;
node* front, * back, * thead;
char temp;
temp = NULL;
thead = head;
front = head;
back = head;
system("cls");
//exchange two string if rear name must be go front
if (strcmp(fir_name, last_name) > 0) {
strcpy(temp, fir_name);
strcpy(fir_name, last_name);
strcpy(last_name, fir_name);
}
while (front->link != NULL) {
if (strcmp(fir_name, front->name) == 0)
break;
front = front->link;
}
while (back->link != NULL) {
if (strcmp(last_name, back->name) == 0)
break;
back = back->link;
}
if ((front == NULL) || (back == NULL)) {
printf("표시할 데이터가 없습니다\n");
Sleep(1000);
return;
}
while (thead) {
if ((strcmp(thead->name, front->name) >= 0) && (strcmp(thead->name, back->name) <= 0)) {
printf("%s %d %.1f %s %s\n", thead->name, thead->sno, thead->gpa, thead->phone, thead->province);
i++;
}
thead = thead->link;
} //Do it while thead is between front->name and back->name
printf("총 %d명", i);
Sleep(3000);
return;
}
마지막 노드를 삭제하는 delete_node 함수
void delete_node(node* head) {
system("cls");
node* prev;
node* curr;
if (head == NULL) return; // 공백 리스트인 경우
if (head->link == NULL) { // 리스트 노드가 한개인 경우
printf("%s %d %.1f %s %s\n", head->name, head->sno, head->gpa, head->phone, head->province);
Sleep(3000);
free(head);
head = NULL;
return;
}
else {
prev = head;
curr = head->link;
while (curr->link != NULL) {
prev = curr;
curr = curr->link;
}
printf("%s %d %.1f %s %s\n", curr->name, curr->sno, curr->gpa, curr->phone, curr->province);
Sleep(3000);
free(curr);
prev->link = NULL;
}
}
이렇게 기능을 여러 기능을 하는 연결 리스트를 만들어 보았습니다.
다음에는 백준사이트를 통한 알고리즘 학습에 대해서 알아보도록 하겠습니다.
반응형
'알고리즘 & 자료구조 > 자료구조' 카테고리의 다른 글
자료구조 BST (Binary search tree) 이원 탐색 트리 (0) | 2020.05.16 |
---|---|
C언어 자료구조(심화 연결리스트 Linked_list 완성본) (0) | 2020.05.03 |
C언어 자료구조 (심화 연결리스트 Linked_list 데이터 삽입) (0) | 2020.04.29 |
C언어 자료구조(심화 연결리스트 Linked_list 파일읽어서 정렬하기) (0) | 2020.04.28 |
자료구조 C언어 (Recursion 함수 와 동적할당) (0) | 2020.04.15 |