Computer >> Máy Tính >  >> Lập trình >> lập trình C

In các nút của danh sách liên kết tại các chỉ mục nhất định bằng ngôn ngữ C

Chúng ta phải in dữ liệu của các nút của danh sách liên kết tại chỉ mục đã cho. Không giống như danh sách liên kết mảng thường không có chỉ mục, vì vậy chúng tôi phải duyệt qua toàn bộ danh sách được liên kết và in dữ liệu khi chúng tôi đến một danh sách cụ thể.

Giả sử, danh sách chứa các nút 29, 34, 43, 56 và 88 và giá trị của các chỉ mục là 1, 2 và 4 so với đầu ra sẽ là các nút tại các chỉ mục này là 34, 43 và 88.

In các nút của danh sách liên kết tại các chỉ mục nhất định bằng ngôn ngữ C

Ví dụ

Linked list: 29->34->43->56->88
Input: 1 2 4
Output: 34 43 88

Trong biểu diễn trên của Danh sách được liên kết, các nút được đánh dấu màu vàng là các nút được in hoặc các nút nằm trên một chỉ mục cụ thể.

Cách tiếp cận được sử dụng ở đây liên quan đến việc lấy một con trỏ và một biến đếm được khởi tạo thành 1 sẽ tăng lên bất cứ khi nào nút được duyệt. Bộ đếm được khớp với giá trị khóa. Khi khóa khớp với giá trị bộ đếm, con trỏ trỏ đến cấu trúc nút sẽ in dữ liệu của nút và tăng dần đến nút tiếp theo, v.v. cung cấp cho chúng ta các nút tại khóa cụ thể.

Đoạn mã dưới đây cho thấy cách triển khai c của thuật toán đã cho.

Thuật toán

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

Ví dụ

#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);
}

Đầu ra

Nếu chúng ta chạy chương trình trên thì nó sẽ tạo ra kết quả sau.

elements of list are : 9 76 13 24 55 109
24 found at position 3
55 found at position 4