数据结构——栈
栈是一种先进后出的线性表。
链栈的思想和顺序栈差不多,可以参照我写的单链表,其中链栈的进栈参照单链表的插入,出栈可以参照单链表的删除。
具体操作如下:
1 #include <iostream> 2 using namespace std; 3 #define maxsize 100 //定义栈的最大值 4 //定义栈的顺序存储结构 5 typedef struct{ 6 int data[maxsize]; 7 int top; 8 }SqStack; 9 //初始化栈 10 void initStack(SqStack &S){ 11 S.top=-1; 12 } 13 //判断是否为栈空 14 int isEmpty(SqStack &S){ 15 if(S.top==-1) 16 return 1; 17 else 18 return 0; 19 } 20 //进栈 21 int Push(SqStack &S,int x){ 22 if(S.top==maxsize-1) 23 return 0; 24 S.top++; 25 cin>>x; 26 S.data[S.top]=x; 27 return 1; 28 } 29 //出栈 30 int Pop(SqStack &S,int &x){ 31 if(S.top==-1) 32 return 0; 33 x=S.data[S.top]; 34 cout<<x<<" "; 35 S.top--; 36 return 1; 37 } 38 //读栈顶元素 39 void ReadStacktop(SqStack S,int x){ 40 if(S.top==-1) 41 cout<<"栈空"<<endl; 42 x=S.data[S.top]; 43 cout<<x<<" "; 44 } 45 int main(){ 46 SqStack S; 47 initStack(S); 48 int x=0,n; 49 cout<<"输入栈的个数:"<<endl; 50 cin>>n; 51 cout<<"输入进栈的元素:"<<endl; 52 for(int i=0;i<n;i++) 53 Push(S,x); 54 cout<<"输入出栈的元素:"<<endl; 55 for(i=0;i<n;i++) 56 Pop(S,x); 57 cout<<endl; 58 isEmpty(S); 59 ReadStacktop(S,x); 60 return 0; 61 }
运行结果如下:

结果由于最后我都把数据弹出栈了,所以栈顶元素为空,输出的数为随机值。
同时,你们有没有发现彩蛋呀?
栈一般用于括号匹配和后缀式的计算。

浙公网安备 33010602011771号