헬창 개발자

단일 연결 리스트 값 탐색하기 : C언어 본문

자료구조

단일 연결 리스트 값 탐색하기 : C언어

찬배 2021. 7. 19. 16:08

<설계도>

<코드>

#include <stdio.h>
typedef struct NodeList { //노드 리스트 구조체
	struct NodeList* link; // 링크: 이전 노드를 가리킴
	int data; // 데이터: 데이터를 저장
}Node;
int search(Node* head, int a) { //노드 검색 함수
	int cnt = 0; // 카운터값
	Node* search; // 구조체 포인터 생성
	search = head; // search는 첫노드를 가리킴
	while (search != NULL) // 머리 노드가 가리키는 링크값이 NULL이 아니면 실행
	{
		if (search->data == a) { // 머리 노드가 가리키는 데이터값이 일치하면 실행
			cnt++; // 카운터 증가
		}
		search = search->link; // 머리 노드가 다음 노드를 가리킴
	}
	return cnt; // 카운터값 반환
}
void Insert(Node** head, Node** p, int data) { // 노드 삽입 함수 머리 노드, 선행노드, 데이터값을 받음
	Node* NewNode = (Node*)malloc(sizeof(Node)); // 새로운 노드 동적할당
	NewNode->data = data; // NewNode의 데이터값을 삽입
	NewNode->link = NULL; // NewNode의 링크 초기화
	if (*head == NULL) { // 머리 노드가 NULL이면 처음 생성되는 노드이다
		*head = NewNode; // 머리 노드가 NewNode를 가리킴
		*p = NewNode; // 선행 노드를 가리키는 p가 NewNode 가리킴
	}
	else {
		// 새로운 노드의 데이터값 삽입
		(*p)->link = NewNode; // 선행 노드의 링크가 NewNode 가리킴
		 *p = NewNode; // p에 새로운 노드값의 주소를 대입
	}
}
int main() {

	Node* head = NULL; // 머리 노드 생성
	Node* p = NULL; // 선행 노드를 가리키는 p생성
	int num = NULL; // 노드의 개수 변수
	int sdata; // 찾을 데이터값 변수

	printf("노드의 개수입력: ");
	scanf_s("%d", &num);

	for (int i = 0; i < num; i++) // 입력 받은 개수만큼 실행
	{
		int data = NULL; // 입력받을 데이터값
		printf("노드 #%d 데이터 : ", i + 1);
		scanf_s("%d", &data);
		Insert(&head, &p, data); // 삽입 함수 호출
	}

	printf("탐색할 값을 입력하시오: ");
	scanf_s("%d", &sdata);
	printf("%d는 리스트에서 %d번 나타납니다. ", sdata, search(head, sdata)); // 검색함수 호출

}

 

<결과 화면>

 

Comments