使用链接列表堆叠在C++中的实现
时间:2020-02-23 14:41:54 来源:igfitidea点击:
在本文中,我们将看到如何使用链接列表在C++中实现堆栈。
堆叠作为抽象数据类型
堆栈是一个有序数据结构,用于存储Lifo中的数据类型(首先换止)订单。
这意味着进入持续的元素首先退出(已处理)。
这就像一堆同心戒指一遍左侧。
当然,当我们开始逐个(河内塔)时,将首先挑选最后一个。
堆栈是一种类似的数据类型,其中插入和删除都在同一侧完成,即顶部。
堆栈只持有类似的数据类型。
堆栈的操作
type_t =任何数据类型
基本操作:
Push(Type_t data)::它将数据类型Type_t的数据插入到堆栈中
Type_t Pop():从堆栈中删除最顶部元素并返回它
其他操作:
Type_t top(): 返回最顶层元素
bool isEmpty():如果堆栈为空,则返回true,否则返回false
bool isFull():返回false如果堆栈已满,否则返回false
int size():返回堆栈的大小
使用单链列表堆叠实现
链接列表本身是一个数据结构,其中每个元素都有数据和指针(下一个)指向下一个元素。
|数据|下一个指针|
如上所述的每个节点都是堆栈元素
class stackNode {
//class for stack element which is SLL
public:
int data; //data
stackNode *next; //next pointer
stackNode(int a) { //constructor
data = a;
next = NULL;
}
};
准备工作
- 单链列表类/结构
- 顶尖指针
让我们来检查一个示例以了解推送和流行实现
例子:
让插入的元素是
1,2,3
因此,要使用链接列表实现堆栈,
当我们推动我们实际执行的元素时,请在头单链列表中插入元素。
当我们弹出一个元素我们实际执行,从单链列表的头部删除元素。
C++实现:
#include <bits/stdc++.h>
using namespace std;
class stackNode {
//class for each node which is a single stack element
public:
int data;
stackNode *next;
stackNode(int a) { //constructor
data = a;
next = NULL;
}
};
stackNode *top=NULL; //top of stack initialized to NULL
int size=0;//size of stack initialized to 0
void push(int x) { //push operation
stackNode* node=(stackNode*)(malloc(sizeof(stackNode)));
node->data=x;
node->next=top;
top=node;
cout<<x<<" is pushed\n";
size++;
}
bool isEmpty(){ //isEmpty function
if(top==NULL && size==0)
return true;
else
return false;
}
int pop() { //pop operation
if(isEmpty()){
cout<<"stack is empty\n";
return INT_MIN;
}
else{
size--;
int temp=top->data;
stackNode* tempNode=top;
top=top->next;
free(tempNode);
return temp;
}
}
int top_stack(){ //top() operation
if(isEmpty()){
cout<<"stack is empty\n";
return INT_MIN;
}
else{
return top->data;
}
}
//main function
int main(){
//menu for operations
//press 1 for push (with data)
//press 2 for pop()
//press 3 for top()
//press 4 for size()
//press 0 to exit()
cout<<"press 1 for push\n";
cout<<"press 2 for pop()\n";
cout<<"press 3 for top()\n";
cout<<"press 4 for size()\n";
cout<<"press 0 for exit\n";
int choice;
cout<<"press your choice\n";
cin>>choice;
while(choice){
if(choice==1){
int data;
cout<<"Enter element\n";
cin>>data;
push(data);
}
else if(choice==2){
int item=pop();
if(item==INT_MIN){}
else
cout<<"Popped element: "<<item<<endl;
}
else if(choice==3){
int item=top_stack();
if(item==INT_MIN){}
else
cout<<"Top element: "<<item<<endl;
}
else if(choice==4){
cout<<"Size is: "<<size<<endl;
}
else
cout<<"Invalid number, try again!\n";
cout<<"press your choice\n";
cin>>choice;
}
cout<<"Exiting...\n";
return 0;
}

