数据结构——栈

栈是一种先进后出的线性表。

链栈的思想和顺序栈差不多,可以参照我写的单链表,其中链栈的进栈参照单链表的插入,出栈可以参照单链表的删除。

具体操作如下:

 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 }

运行结果如下:

结果由于最后我都把数据弹出栈了,所以栈顶元素为空,输出的数为随机值。

同时,你们有没有发现彩蛋呀?

栈一般用于括号匹配和后缀式的计算。

posted @ 2019-07-24 20:28  weigm*  阅读(128)  评论(0)    收藏  举报