将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。
- #define MAXSIZE 200
- using namespace std;
- typedef int ElemType;
- typedef struct{
- int bot[2]; //栈0和栈1的栈顶
- ElemType *base; //栈数组
- int stacksize; //栈最大可容纳元素个数
- }DblStack; //存放于一个数组空间的两个栈
- bool InitStack(DblStack &S)
- {
- S.base=new ElemType[MAXSIZE];
- if(!S.base) return false;
- S.bot[0]=-1; //两个栈的栈顶指针都指向栈顶元素
- S.bot[1]=MAXSIZE; //
- S.stacksize=MAXSIZE;
- return true;
- }
- bool StackEmpty(DblStack S)
- {//两个栈均空
- if(S.bot[0]==-1&&S.bot[1]==S.stacksize)
- return true;
- return false;
- }
- bool StackNo_1_Empty(DblStack S)
- {//栈1空
- if(S.bot[0]==-1)
- return true;
- return false;
- }
- bool StackNo_2_Empty(DblStack S)
- {//栈2空
- if(S.bot[1]==S.stacksize)
- return true;
- return false;
- }
- bool StackFull(DblStack &S)
- {//栈满
- return S.bot[0]+1==S.bot[1];
- }
- bool Push(DblStack &S,ElemType e)
- {
- if(S.bot[1]-S.bot[0]<=2) return false;//剩余空间不足两个
- S.base[++S.bot[0]]=e;
- S.base[--S.bot[1]]=e;
- return true;
- }
- bool Push_No_1(DblStack &S,ElemType e)
- {
- if(S.bot[0]+1==S.bot[1]) return false;
- S.base[++S.bot[0]]=e;
- return true;
- }
- bool Push_No_2(DblStack &S,ElemType e)
- {
- if(S.bot[0]+1==S.bot[1]) return false;
- S.base[--S.bot[1]]=e;
- return true;
- }
- bool Pop_No_1(DblStack &S,ElemType &e)
- {
- if(S.bot[0]==-1) return false;//栈空
- e=S.base[S.bot[0]--]; //先取再减
- return true;
- }
- bool Pop_No_2(DblStack &S,ElemType &e)
- {
- if(S.bot[1]==S.stacksize) return false;//栈空
- e=S.base[S.bot[1]++]; //先取再加
- return true;
- }
- #include<iostream>
- #define MAXSIZE 200
- using namespace std;
- typedef int ElemType;
- typedef struct{
- int bot[2]; //栈0和栈1的栈顶
- ElemType *base; //栈数组
- int stacksize; //栈最大可容纳元素个数
- }DblStack; //存放于一个数组空间的两个栈
- bool InitStack(DblStack &S)
- {
- S.base=new ElemType[MAXSIZE];
- if(!S.base) return false;
- S.bot[0]=-1; //两个栈的栈顶指针都指向栈顶元素
- S.bot[1]=MAXSIZE; //
- S.stacksize=MAXSIZE;
- return true;
- }
- bool StackEmpty(DblStack S)
- {//两个栈均空
- if(S.bot[0]==-1&&S.bot[1]==S.stacksize)
- return true;
- return false;
- }
- bool StackNo_1_Empty(DblStack S)
- {//栈1空
- if(S.bot[0]==-1)
- return true;
- return false;
- }
- bool StackNo_2_Empty(DblStack S)
- {//栈2空
- if(S.bot[1]==S.stacksize)
- return true;
- return false;
- }
- bool StackFull(DblStack &S)
- {//栈满
- return S.bot[0]+1==S.bot[1];
- }
- bool Push(DblStack &S,ElemType e)
- {
- if(S.bot[1]-S.bot[0]<=2) return false;//剩余空间不足两个
- S.base[++S.bot[0]]=e;
- S.base[--S.bot[1]]=e;
- return true;
- }
- bool Push_No_1(DblStack &S,ElemType e)
- {
- if(S.bot[0]+1==S.bot[1]) return false;
- S.base[++S.bot[0]]=e;
- return true;
- }
- bool Push_No_2(DblStack &S,ElemType e)
- {
- if(S.bot[0]+1==S.bot[1]) return false;
- S.base[--S.bot[1]]=e;
- return true;
- }
- bool Pop_No_1(DblStack &S,ElemType &e)
- {
- if(S.bot[0]==-1) return false;//栈空
- e=S.base[S.bot[0]--]; //先取再减
- return true;
- }
- bool Pop_No_2(DblStack &S,ElemType &e)
- {
- if(S.bot[1]==S.stacksize) return false;//栈空
- e=S.base[S.bot[1]++]; //先取再加
- return true;
- }
- int main()
- {
-
- }