问答题
设有两个栈S1、S2都采用顺序栈方式,并且共享一个存储区[0..maxsize一1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计S1、S2有关入栈和出栈的操作算法。【哈尔滨工业大学2001七(12分)】
【正确答案】正确答案:两栈共享向量空间,将两栈栈底设在向量两端,初始时,左栈栈顶指针为一1,右栈栈顶指针为maxsize。两栈顶指针相邻时为栈满。两栈顶相向,迎面增长,栈顶指针指向栈顶元素。 typede f struct {ElemType stack[maxsize];//栈空间 int top[2];//top为两个栈顶指针 }stk; 入栈操作的核心语句段如下: if(S.top[1]一S.top[o]==1){cout<<“栈已满”;return(0);} switch(i) //i是形参,只能取0和1 (case 0:s.stack[++s.top[0\]\]=x; return(1);break; //左栈 case 1:s.stack[-一s.top[1\]\]=x;return(1); //右栈 } 退栈操作的核心语句段如下: switch(i) //i是形参,只能取0和1 {case 0:if(S.top[o]==一1){cout<<“栈空”; return(一1);} //左栈 else return(S.stack[s.top[0]—-]); case 1:if(S.top[1]==maxsize{cout<<”栈空”; return(一1);)//右栈 else return(S.stack[s.top[1]++]); }//switch
【答案解析】