将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。
(1)栈初始化intInit(){S.top[0]=-1;S.top[1]=m;return1;//初始化成功}(2)入栈操作:intpush(stk S,inti,intx)∥i为栈号,i=0表示左栈,i=1为右栈,x是入栈元素。入栈成功返回1,失败返回0{if(i<;0||i>;1){ cout<;<;“栈号输入不对”<;<;endl;exit(0);}if(S.top[1]-S.top[0]==1) {cout<;<;“栈已满”<;<;endl;return(0);}switch(i){case0: S.V[++S.top[0]]=x;return(1);break;case1: S.V[--S.top[1]]=x;return(1);}}∥push(3)退栈操作ElemType pop(stk S,inti)∥退栈。i代表栈号,i=0时为左栈,i=1时为右栈。退栈成功时返回退栈元素∥否则返回-1{if(i<;0 || i>;1){cout<;<;“栈号输入错误”<;<;endl;exit(0);}switch(i){case0:if(S.top[0]==-1) {cout<;<;“栈空”<;<;endl;return(-1);}elsereturn(S.V[S.top[0]--]);case1:if(S.top[1]==m { cout<;<;“栈空”<;<;endl;return(-1);}elsereturn(S.V[S.top[1]++]);}∥switch }∥算法结束(4)判断栈空intEmpty();{return(S.top[0]==-1 && S.top[1]==m);}
举一反三
- 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。
- 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时,该栈为空。两个栈均从两端向中间增长(如下图所示)。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数,双栈数据结构定义如下:typedef struct{int top[2], bot[2]; //栈顶和栈底指针SElemType *V; //栈数组int m; //栈最大可容纳元素个数}DblStack;[img=554x116]17e449a40a3e845.png[/img]
- 【论述题】算法设计题 (1)将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。双栈数据结构的定义如下: Typedef struct {int top[2],bot[2]; //栈顶和栈底指针 SElemType *V; //栈数组 int m; //栈最大可容纳元素个数 }DblStack
- 将编号为0和1的两个栈存放于一个数组空间V[m]中, 栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长。当向第0号栈插入一个新元素时,使top[0]增1得到新的栈顶位置,当向第1号栈插入一个新元素时,使top[1]减1得到新的栈顶位置。当top[0]+1== top[1]时或top[0] == top[1]-1时,栈空间满,此时不能再向任一栈加入新的元素。 试定义这种双栈(Double Stack)结构的类定义,并实现判栈空、判栈满、插入、删除算法。
- 当两个栈共享存储区时, 找利用谁数组scion[n]表示,两栈顶指针为top[0]与top[1],则当栈0空时,top[0]为____,栈1空时 ,top[1]为____,栈满时为____。
内容
- 0
当两个栈共享一存储区时,栈利用一维数组 stack(1,n)表示,两栈顶指针为 top[1]与 top[2],则当栈 1 空时,top[1]为(__),栈 2 空时 ,top[2]为(__),栈满时为(__);
- 1
当两个栈共享同一存储区时,栈利用一维数组stack[1..n]表示,两栈顶指针为top[1]与top[2],则当栈1空时,top[1]为____;栈2为空时,top[2]为____,栈满时为____。
- 2
当两个栈共享一存储区时,栈利用一维数组 stack(1,n)表示,两栈顶指针为 top[1]与 top[2],则当栈 1 空时,top[1]为(__),栈 2 空时 ,top[2]为(__),栈满时为(__);
- 3
数组S[M]存储一个栈,top为栈顶指针。如果条件top= =M表示栈满,那么条件_____表示栈空。 A: top= =1 B: top= =-1 C: top= =0 D: top!=0
- 4
设两个栈S1和S2共享同一空间数组a[0,1…MAX],为了最大限度利用数组空间,两个栈采用相向增长的方式,top[1]是低端栈s1的栈顶指针,top[2]是高端栈s2的栈顶指针,则栈满的判断条件是( ) A: top[1]==0 B: top[1]==MAX C: top[2]==MAX D: top[1]+1==top[2]