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

Đảo ngược danh sách liên kết bằng cách sử dụng ngăn xếp trong C ++

Danh sách được liên kết phân bổ bộ nhớ động, được sử dụng để thực hiện một ngăn xếp. Chương trình này giới thiệu sự đảo ngược của danh sách liên kết trong lập trình c ++. Ở đây, người có nguyện vọng có thể áp dụng cách tiếp cận sau đây để có được kết quả như mong đợi. Thuật toán như sau;

Thuật toán

START
   Step 1: create an empty stack of type node pointer
   Step 2: Traverse the list and push all of its nodes onto a stack
   Step 4: Traverse the list from the head node again
   Step 5: pop a value from the stack top
   step 6: connect them in reverse order
   Step 7: PRINT
STOP

Dựa trên thuật toán trên, mã c ++ sau được soạn thảo trong đó stdlib bài luận về tệp thư viện một vai trò quan trọng tận dụng các phương thức khóa liên quan đến ngăn xếp như sau;

Ví dụ

#include <iostream>
#include <stdlib.h>
using namespace std;
struct linked_list {
   int data;
   struct linked_list *next;
};
int stack[30], top = -1;
struct linked_list* head = NULL;
int printfromstack(int stack[]) {
   cout<<"\nStack after Reversal::";
   while(top>=0) {
      cout<<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) {
   cout<<"Linked list::";
   while(head!=NULL) {
      printf("%d ", head->data);
      stack[++top] = head->data;
      head = head->next;
   }
}
int main(int argc, char const *argv[]) {
   push(&head, 7);
   push(&head, 20);
   push(&head, 3);
   push(&head, 40);
   intostack(head);
   printfromstack(stack);
   return 0;
}

Như đã thấy trong đoạn mã trên, tất cả mã hoạt động của chuỗi được gói vào trong accessChar () , sau này, lệnh gọi nào được chuyển đến thực thi chương trình main ().

Đầu ra

Linked list:: 40 3 20 7
Stack after Reversal::7 20 3 40