栈的相关操作
以栈的顺序存储结构为例:
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 }