Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

พิมพ์ย้อนกลับของรายการที่เชื่อมโยงโดยไม่ต้องย้อนกลับในภาษา C


งานคือการพิมพ์ย้อนกลับของรายการที่เชื่อมโยงที่กำหนดโดยใช้ฟังก์ชันเรียกซ้ำ โปรแกรมต้องพิมพ์ย้อนกลับแต่ไม่กลับรายการซึ่งหมายความว่าลำดับของโหนดยังคงเหมือนเดิม

ที่นี่โปรแกรมจะย้ายตัวชี้ส่วนหัวที่มีที่อยู่ของโหนดแรกไปยังโหนดถัดไปจนกว่าจะมีการตรวจสอบ NULL ซึ่งจัดเก็บไว้ในโหนดสุดท้ายของรายการและพิมพ์ข้อมูลของโหนดหลัก

พิมพ์ย้อนกลับของรายการที่เชื่อมโยงโดยไม่ต้องย้อนกลับในภาษา C

ตัวอย่าง

Input: 29 34 43 56
Output: 56 43 34 29

ประการแรก โหนดจะถูกแทรกลงในรายการ และตัวชี้จะเริ่มชี้ไปที่โหนดที่แทรก หลังจากสร้างรายการขั้นสุดท้ายแล้ว สมมติว่าตัวชี้ชั่วคราวจะเริ่มต้นด้วยตัวชี้โหนดแรกและจะเพิ่มขึ้นเรื่อย ๆ จนกว่าที่อยู่ถัดไปของโหนดจะเป็น NULL เนื่องจากโหนดสุดท้ายชี้ไปที่ไม่มีอะไร และจากโหนดสุดท้าย รายการจะถูกข้ามไปจนถึงตัวชี้ส่วนหัว มันจะแสดงกลับรายการโดยไม่ต้องย้อนกลับรายการจริง ๆ

โค้ดด้านล่างแสดงการใช้งาน c ของอัลกอริทึมที่กำหนด

อัลกอริทึม

START
   Step 1 -> create node variable of type structure
      Declare int data
      Declare pointer of type node using *next
   Step 2 ->Declare function void reverse(node* head)
      IF head == NULL
         return
      Call reverse(head->next)
      Print head->data
   Step 3 -> Declare Function void push(node** header, char newdata)
      Allocate memory using malloc
      Set newnode->data = newdata
      Set newnode->next = (*header)
      Set (*header) = newnode
   Step 4 ->In Main()
      Create list using node* head = NULL
      Insert elements through push(&head, 56)
      Call reverse(head)
STOP

ตัวอย่าง

#include<stdio.h>
#include<stdlib.h>
//creating structure for a node
struct node {
   int data;
   node* next;
};
//function to print reverse of the data in the list
void reverse(node* head) {
   if (head == NULL)
      return;
   reverse(head->next);
   printf("%d ", head->data);
}
//function to puch the node in the list
void push(node** header, char newdata) {
   struct node* newnode = (struct node*)malloc(sizeof(struct node));
   newnode->data = newdata;
   newnode->next = (*header);
   (*header) = newnode;
}
int main() {
   node* head = NULL;
   push(&head, 56); //calling function to push 56 in the list
   push(&head, 43);
   push(&head, 34);
   push(&head, 29);
   reverse(head);
   return 0;
}

ผลลัพธ์

หากเรารันโปรแกรมด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้

reverse of a linked list 56 43 34 29