C ++程序使用链表实现堆栈

堆栈是包含元素集合的抽象数据结构。堆栈实现了LIFO机制,即,首先弹出最后推送的元素。堆栈中的一些主要操作是-

  • 推入(push)-这会将数据值添加到堆栈的顶部。

  • 弹出(pop)-删除堆栈顶部的数据值。

  • 读取(peek)-这将返回堆栈的顶部数据值。

给出了使用链表实现堆栈的程序,如下所示。

示例

#include <iostream>

using namespace std;

struct Node {

   int data;

   struct Node *next;

};

struct Node* top = NULL;

void push(int val) {

   struct Node* newnode = (struct Node*) malloc(sizeof(struct Node));

   newnode->data = val;

   newnode->next = top;

   top = newnode;

}

void pop() {

   if(top==NULL)

   cout<<"堆栈下溢"<<endl;

   else {

      cout<<"弹出的元素是 "<< top->data <<endl;

      top = top->next;

   }

}

void display() {

   struct Node* ptr;

   if(top==NULL)

   cout<<"堆栈为空";

   else {

      ptr = top;

      cout<<"堆栈元素为: ";

      while (ptr != NULL) {

         cout<< ptr->data <<" ";

         ptr = ptr->next;

      }

   }

   cout<<endl;

}

int main() {

   int ch, val;

   cout<<"1) Push in stack"<<endl;

   cout<<"2) Pop from stack"<<endl;

   cout<<"3) Display stack"<<endl;

   cout<<"4) Exit"<<endl;

   do {

      cout<<"输入选择: "<<endl;

      cin>>ch;

      switch(ch) {

         case 1: {

            cout<<"输入要推送的值:"<<endl;

            cin>>val;

            push(val);

            break;

         }

         case 2: {

            pop();

            break;

         }

         case 3: {

            display();

            break;

         }

         case 4: {

            cout<<"Exit"<<endl;

            break;

         }

         default: {

            cout<<"无效的选择"<<endl;

         }

      }

   }while(ch!=4);

   return 0;

}

输出结果

1) Push in stack

2) Pop from stack

3) Display stack

4) Exit

输入选择: 1

输入要推送的值: 2

输入选择: 1

输入要推送的值: 6

输入选择: 1

输入要推送的值: 8

输入选择: 1

输入要推送的值: 7

输入选择: 2

弹出的元素是 7

输入选择: 3

堆栈元素为:8 6 2

输入选择: 5

无效的选择

输入选择: 4

Exit

在上面的程序中,节点结构用于创建作为堆栈实现的链表。代码如下。

struct Node {

int data;

struct Node *next;

};

push()函数接受参数val,即要推入堆栈的值。然后创建一个新节点,并将val插入数据部分。该节点被添加到链接列表的最前面,并且指向该列表的顶部。为此的代码段如下。

void push(int val) {

   struct Node* newnode = (struct Node*) malloc(sizeof(struct Node));

   newnode->data = val;

   newnode->next = top;

   top = newnode;

}

pop()如果有任何值,该函数将弹出堆栈的最高值。如果纸堆是空的,则会打印下溢。给出如下。

void pop() {

   if(top==NULL)

   cout<<"堆栈下溢"<<endl;

   else {

      cout<<"弹出的元素是 "<< top->data <<endl;

      top = top->next;

   }

}

display()函数显示堆栈中的所有元素。这是通过使用ptr来完成的,该ptr最初指向顶部,但一直到堆栈末尾。打印所有对应于ti ptr的数据值。这在下面给出。

void display() {

   struct Node* ptr;

   if(top==NULL)

   cout<<"堆栈为空";

   else {

      ptr = top;

      cout<<"堆栈元素为: ";

      while (ptr != NULL) {

         cout<< ptr->data <<" ";

         ptr = ptr->next;

      }

   }

   cout<<endl;

}

该功能main()为用户提供了一个选择,以便他们推,弹出或显示堆栈。根据用户响应,使用开关调用适当的功能。如果用户输入无效的响应,则将其打印出来。下面给出了此代码段。

int main() {

   int ch, val;

   cout<<"1) Push in stack"<<endl;

   cout<<"2) Pop from stack"<<endl;

   cout<<"3) Display stack"<<endl;

   cout<<"4) Exit"<<endl;

   do {

      cout<<"输入选择: "<<endl;

      cin>>ch;

      switch(ch) {

         case 1: {

            cout<<"输入要推送的值:"<<endl;

            cin>>val;

            push(val);

            break;

         }

         case 2: {

            pop();

            break;

         }

         case 3: {

            display();

            break;

         }

         case 4: {

            cout<<"Exit"<<endl;

            break;

         }

         default: {

            cout<<"无效的选择"<<endl;

         }

      }

   }while(ch!=4);

   return 0;

}

以上是 C ++程序使用链表实现堆栈 的全部内容, 来源链接: utcz.com/z/317044.html

回到顶部