반응형

 


참고자료

2020/04/29 - [자료구조] - C언어 자료구조 (심화 연결리스트 Linked_list 데이터 삽입)

 

C언어 자료구조 (심화 연결리스트 Linked_list 데이터 삽입)

참고자료 2020/04/28 - [자료구조] - C언어 자료구조(심화 연결리스트 Linked_list 파일읽어서 정렬하기) C언어 자료구조(심화 연결리스트 Linked_list 파일읽어서 정렬하기) 개요 이번에는 자료구조에서

jung-story.tistory.com

2020/04/28 - [자료구조] - C언어 자료구조(심화 연결리스트 Linked_list 파일읽어서 정렬하기)

 

C언어 자료구조(심화 연결리스트 Linked_list 파일읽어서 정렬하기)

개요 이번에는 자료구조에서 가장 중요하다고 할 수 있는 Linked-list를 저번 포스팅에는 심도 있게 다루어 보지 못한 것 같아서 C언어의 파일 입출력 기능과 함께 사용하는 방법을 알아보도록 하

jung-story.tistory.com

 


개요

 

이번에는 만들어 놓은 연결 리스트를 통해서 여러 가지 방법으로 검색하고

맨 마지막 데이터를 삭제하는 방법을 알아 보도록 하겠습니다.

 


이름으로 검색하는 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;
	}
}

 


이렇게 기능을 여러 기능을 하는 연결 리스트를 만들어 보았습니다.

다음에는 백준사이트를 통한 알고리즘 학습에 대해서 알아보도록 하겠습니다.

 


 

반응형

+ Recent posts