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

In Đảo ngược danh sách được liên kết bằng Ngăn xếp

Được đưa ra với một chương trình danh sách liên kết phải in danh sách bắt đầu từ cuối cho đến đầu bằng cách sử dụng cấu trúc dữ liệu ngăn xếp

Input : 10 -> 5 -> 3 -> 1 -> 7 -> 9
Output: 9 -> 7 -> 1 -> 3 -> 5 -> 10

Ở đây, người dùng có thể sử dụng phương pháp tiếp cận các phần tử bật lên từ ngăn xếp trỏ đến vị trí [0] ngăn xếp và hơn là đi đến khi phần tử [n] ngăn xếp

Thuật toán

START
Step 1 -> create structure Linked_list
   Declare int data
   Declare struct linked_list *next
End
Step 2 -> declare int stack[30], top = -1
Step 3 -> declare struct linked_list* head = NULL
Step 4 -> create function int printfromstack(int stack[])
   Loop While top>=0
   Print stack[--top]
End
Step 5 -> create function int push(struct linked_list** head, int n)
   declare struct linked_list* newnode = (struct linked_list*)malloc(sizeof(struct linked_list))
   set newnode->data = n
   set newnode->next = (*head)
   set (*head) = newnode
step 6 -> create function int intostack(struct linked_list* head)
   Loop While head!=NULL
      Print head->data
   Set stack[++top] = head->data
   Set head = head->next
   End
End
Step 7 -> goto main()
   Call push(&head, 10)
   Call push(&head, 20)
   Call push(&head, 30)
   Call push(&head, 40)
   Call intostack(head)
   Call printfromstack(stack)
STOP

Ví dụ

#include <stdio.h>
#include <stdlib.h>
struct linked_list {
   int data;
   struct linked_list *next;
};
int stack[30], top = -1;
struct linked_list* head = NULL;
int printfromstack(int stack[]) {
   printf("\nStack:\n");
   while(top>=0) {
      printf("%d ", stack[top--]);
   }
}
int push(struct linked_list** head, int n) {
   struct linked_list* newnode = (struct linked_list*)malloc(sizeof(struct linked_list));
   newnode->data = n;
   newnode->next = (*head);
   (*head) = newnode;
}
int intostack(struct linked_list* head) {
   printf("Linked list:\n");
   while(head!=NULL) {
      printf("%d ", head->data);
      stack[++top] = head->data;
      head = head->next;
   }
}
int main(int argc, char const *argv[]) {
   push(&head, 10);
   push(&head, 20);
   push(&head, 30);
   push(&head, 40);
   intostack(head);
   printfromstack(stack);
   return 0;
}

Đầ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

Linked list:
40 30 20 10
Stack:
10 20 30 40