Notice
Recent Posts
Recent Comments
Link
헬창 개발자
단일 연결 리스트 값 탐색하기 : C언어 본문
<설계도>
<코드>
#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)); // 검색함수 호출
}
<결과 화면>
'자료구조' 카테고리의 다른 글
큐를 이용한 피보나치 수열 : C언어 (0) | 2021.07.27 |
---|---|
깊이 우선 탐색(dfs), 넓이 우선 탐색(bfs) 구현 : C언어 (0) | 2021.07.23 |
스택을 이용한 회문 검사 프로그램 : C언어 (0) | 2021.07.22 |
이중 연결 리스트 구현 : C언어 (0) | 2021.07.21 |
연결 리스트를 이용한 희소 행렬 표현 : C언어 (0) | 2021.07.20 |
Comments