栈是只允许在一端进行插入或删除的线性表
后进先出Last in First out,先进后出
只允许在栈顶插入
栈是一个操作受限的数据结构
分为顺序栈和链栈
顺序栈SequenceStack的实现
#include<iostream>
#include<string>
using namespace std;
#define MaxSize 10
typedef struct{
int data[MaxSize];
int top;
}SqStack;
void InitStack(){
SqStack S;
S.top=-1;
return;
}
bool Push(SqStack &S,int x){
if (S.top==MaxSize-1){
cout<<"栈已满"<<endl;
return false;}
S.top=S.top+1;
S.data[S.top]=x;
//S.data[++S.top]=x;
cout << "添加"<<x<<"完成"<<endl;
return true;
}
bool Pop(SqStack &S,int &x){
if (S.top==-1){
cout<<"栈为空栈"<<endl;
return false;}
x=S.data[S.top];
cout << "出栈的数据为"<< x <<endl;
S.top--;
return true;
}
bool GetTop(SqStack &S,int &x){
if (S.top==-1){
cout<<"栈为空栈"<<endl;
return false;}
x=S.data[S.top];
cout << "栈顶数据为"<< x <<endl;
return true;
}
bool StackEmpty(SqStack &S){
if (S.top==-1){
cout<<"栈为空栈"<<endl;
return false;}
else
return true;
}
int main()
{
SqStack S;
S.top=-1;
int choice;
while (1)
{
cout << "请选择操作 1.数据入栈 2.数据出栈 3.获取栈顶元素"<<endl;
cin >> choice;
switch (choice)
{
case 1:
int data;
cout << "请输入需要入栈的数据"<<endl;
cin >> data;
Push(S,data);
break;
case 2:
int x;
Pop(S,x);
break;
case 3:
GetTop(S,x);
break;
default:
break;
}
}
}
链栈是基于链表实现的,在头结点之后插入,可视为队尾,删除(出栈)也从头结点后面的结点开始删除