根据输入的栈的编号的不同,操作双栈中的其中一个:
/* 两个栈的编号分别为0和1,按照输入的栈号不同,操作 不同的栈。假设数组左侧的栈编号为0;右端的栈编号为1. */ #include<stdio.h> //定义双栈结构 typedef struct{ int top[2],bot[2];//栈顶指针和栈底指针 int *V;//存储双栈的数组空间 int m;//数组空间的大小 }DblStack; //初始化:初始化一个大小为m的双栈 int InitStack(DblStack &S,int m){ S.V=new int[m]; if(!S.V){ return 0;//存储空间分配失败 } S.top[0]=S.bot[0]=-1; S.top[1]=S.bot[1]=m; return 1; } /* 判断i号栈是否为空 */ int IsEmpty(DblStack &S,int i){ return S.top[i]==S.bot[i]; } /* 判断栈是否满 */ int IsFull(DblStack &S){ if(S.top[1]-S.top[0]==1){ return 1;//栈满 }else{ return 0;//栈空 } } //i号栈进栈操作 int Push(DblStack &S,int i,int e){ //将元素e进入i号栈 if(IsFull(S)){ return 0;//栈已满,无法入栈 } if(i==0){ S.V[++S.top[0]]=e; }else{ S.V[--S.top[1]]=e; } } //i号栈出栈操作 int Pop(DblStack &S,int &e) { //用返回i号栈的栈顶元素 if(IsEmpty(S,i)){ return 0;//栈 空,无法出栈 } if(i==0){ e=S.V[S.top[0]--]; }else{ e=S.V[S.top[1]++]; } return 1; } int main(){ DblStack S; int m; printf("请输入栈空间的大小:"); scanf("%d",&m); if(InitStack(S,m)){ printf("双栈S初始化成功!\n"); }else{ printf("初始化失败!\n"); } int x; printf("输入要操作的栈的栈号:"); scanf("%d",&x); if(IsEmpty(S,x)){ printf("当前栈为空!\n"); }else{ printf("当前栈非空!\n"); } if(IsFull(S)){ printf("当前栈满!\n"); }else{ printf("当前栈未满!\n"); } int n; printf("请输入入栈的元素个数:"); scanf("%d",&n); for(int i=0;i<n;i++){ int e; printf("请输入第%d个元素:",i+1); scanf("%d",&e); Push(S,x,e); } int s; Pop(S,s); printf("栈顶元素出栈:%d",s); }
原文链接:https://www.f2er.com/datastructure/382491.html