• 2022-07-29
    将编号为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

      当两个栈共享一存储区时,栈利用一维数组 stack(1,n)表示,两栈顶指针为 top&#91;1&#93;与 top&#91;2&#93;,则当栈 1 空时,top&#91;1&#93;为(__),栈 2 空时 ,top&#91;2&#93;为(__),栈满时为(__);

    • 1

      当两个栈共享同一存储区时,栈利用一维数组stack&#91;1..n&#93;表示,两栈顶指针为top&#91;1&#93;与top&#91;2&#93;,则当栈1空时,top&#91;1&#93;为____;栈2为空时,top&#91;2&#93;为____,栈满时为____。

    • 2

      当两个栈共享一存储区时,栈利用一维数组 stack(1,n)表示,两栈顶指针为 top[1]与 top[2],则当栈 1 空时,top[1]为(__),栈 2 空时 ,top[2]为(__),栈满时为(__);

    • 3

      ‌数组S&#91;M&#93;存储一个栈,top为栈顶指针。如果条件top= =M表示栈满,那么条件_____表示栈空。‎ A: top= =1 B: top= =-1 C: top= =0 D: top!=0

    • 4

      设两个栈S1和S2共享同一空间数组a&#91;0,1…MAX&#93;,为了最大限度利用数组空间,两个栈采用相向增长的方式,top&#91;1&#93;是低端栈s1的栈顶指针,top&#91;2&#93;是高端栈s2的栈顶指针,则栈满的判断条件是( ) A: top[1]==0 B: top[1]==MAX C: top[2]==MAX D: top[1]+1==top[2]