栈的相关操作

以栈的顺序存储结构为例:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define MaxSize 50
 4 typedef int ElemType;
 5 typedef struct{
 6     ElemType data[MaxSize];//数组
 7     int top;
 8 }SqStack;
 9 void InitStack(SqStack &S)
10 {
11     //代表栈为空
12     S.top=-1;
13 }
14 bool StackEmpty(SqStack &S)
15 {
16     if(S.top==-1) return true;
17     return false;
18 }
19 //入栈
20 bool Push(SqStack &S,ElemType x)
21 {
22     //数组的大小不能改变,避免访问越界
23     if(S.top==MaxSize-1) return false;
24     S.data[++S.top]=x;
25     return true;
26 }
27 //出栈
28 bool Pop(SqStack &S,ElemType &x)
29 {
30     if(S.top==-1) return false;
31     //后减减,x=S.data[S.top];S.top=S.top-1;
32     x=S.data[S.top--];
33     return true;
34 }
35 //读取栈顶元素
36 bool GetTop(SqStack &S,ElemType &x)
37 {
38     //说明栈为空
39     if(S.top==-1) return false;
40     x=S.data[S.top];
41     return true;
42 }
43 //实现栈 可以用数组,也可以用链表
44 int main()
45 {
46     //栈 先进后出 FILO  LIFO
47     SqStack S;
48     //判断相关操作是否成功 
49     bool flag;
50     //用来存放拿出的元素
51     ElemType m;
52     //栈的初始化
53     InitStack(S);
54     flag=StackEmpty(S);
55     if(flag) printf("栈是空的\n");
56     //入栈元素3
57     Push(S,3);
58     //入栈元素4
59     Push(S,4);
60     Push(S,5);
61     //获取栈顶元素 
62     flag=GetTop(S,m);
63     if(flag) printf("获取栈顶元素为 %d\n",m);
64     //弹出栈顶元素
65     flag=Pop(S,m);
66     if(flag) printf("弹出元素为 %d\n",m);
67     //获取栈顶元素 
68     flag=GetTop(S,m);
69     if(flag) printf("获取栈顶元素为 %d\n",m);
70     system("pause");
71 }

 

上一篇:栈的应用-简单计算器(中缀表达式转后缀表达式)


下一篇:栈与队列:逆波兰计算器(逆波兰表达式;后缀表达式)把运算符放到运算量后边 && 中缀表达式转化为后缀表达式