주어진 인덱스에서 연결 리스트의 노드 데이터를 출력해야 합니다. 배열 연결 목록과 달리 일반적으로 인덱스가 없기 때문에 전체 연결 목록을 탐색하고 특정 항목에 도달하면 데이터를 인쇄해야 합니다.
목록에 노드 29, 34, 43, 56 및 88이 포함되어 있고 인덱스 값이 1, 2 및 4인 경우 출력은 이러한 인덱스의 노드인 34, 43 및 88이 됩니다.
예시
Linked list: 29->34->43->56->88 Input: 1 2 4 Output: 34 43 88
위의 Linked List 표현에서 노란색으로 강조 표시된 노드는 인쇄할 노드 또는 특정 인덱스에 있는 노드입니다.
여기에서 사용된 접근 방식은 노드가 탐색될 때마다 증가할 1로 초기화된 하나의 포인터와 하나의 카운터 변수를 사용하는 것을 포함합니다. 카운터는 키 값과 일치합니다. 키가 카운터 값과 일치하면 노드 구조를 가리키는 포인터가 노드의 데이터를 인쇄하고 다음 노드로 증가하는 식으로 특정 키의 노드를 제공합니다.
아래 코드는 주어진 알고리즘의 c 구현을 보여줍니다.
알고리즘
START Step 1 -> create node variable of type structure Declare int data Declare pointer of type node using *next Step 2 -> create struct node* intoList(int data) Create newnode using malloc Set newnode->data = data newnode->next = NULL return newnode step 3 -> Declare function void displayList(struct node *catchead) create struct node *temp IF catchead = NULL Print list is empty return End Set temp = catchead Loop While (temp != NULL) print temp->data set temp = temp->next End Step 4 -> Declare Function int search(int key,struct node *head) Set int index Create struct node *newnode Set index = 0 and newnode = head Loop While (newnode != NULL & newnode->data != key) Set index++ Set newnode = newnode->next End return (newnode != NULL) ? index : -1 step 5 -> In Main() create node using struct node* head = intoList(9) call displayList(head) set index = search(24,head) IF (index >= 0) Print index Else Print not found in the list EndIF STOP목록에서 찾았습니다.
예시
#include <stdio.h> #include <stdlib.h> //structure of a node struct node { int data; struct node *next; }; struct node* intoList(int data) { struct node* newnode = (struct node*)malloc(sizeof(struct node)); newnode->data = data; newnode->next = NULL; return newnode; } //funtion to display list void displayList(struct node *catchead) { struct node *temp; if (catchead == NULL) { printf("List is empty.\n"); return; } printf("elements of list are : "); temp = catchead; while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); } //function to search element int search(int key,struct node *head) { int index; struct node *newnode; index = 0; newnode = head; while (newnode != NULL && newnode->data != key) { index++; newnode = newnode->next; } return (newnode != NULL) ? index : -1; } int main() { int index; struct node* head = intoList(9); //inserting elements into a list head->next = intoList(76); head->next->next = intoList(13); head->next->next->next = intoList(24); head->next->next->next->next = intoList(55); head->next->next->next->next->next = intoList(109); displayList(head); index = search(24,head); if (index >= 0) printf("%d found at position %d\n", 24, index); else printf("%d not found in the list.\n", 24); index=search(55,head); if (index >= 0) printf("%d found at position %d\n", 55, index); else printf("%d not found in the list.\n", 55); }
출력
위의 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.
elements of list are : 9 76 13 24 55 109 24 found at position 3 55 found at position 4