数据结构与算法-共享栈的基本操作,逆置队列,使用栈模拟队列的操作,使用队列模拟渡口管理,串,串的模式匹配,kmp

第2章第1节练习题3 共享栈的基本操作

问题描述
设有两个栈s1,s2都采用顺序栈方式,并且共享一个存储区[0,…,MaxSize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的方式。试设计s1,s2有关入栈和出栈的操作算法。

算法思想
因为两个栈公用一个空间,假设一个栈为0#,规定其为空时top[0]==-1;另一个栈为1#规定其为空时,top[1]==MaxSize;
入栈时,先确定栈号是否合法,然后查看是对0#栈还是1#栈进行操作,入栈操作和顺序栈的入栈操作并无太大不同。选定之后进行入栈操作。这里应该注意此共享栈是否已满,如果已满则不能进行入栈操作。如若入栈成功则返回0;入栈失败则返回-1;
出栈时,先确定栈号是否合法,然后查看是对0#栈还是1#栈进行操作,出栈操作和顺序栈的出栈操作并无太大不同。选定之后进行出栈操作。如果出栈成功返回0;出栈失败返回-1;
综上,算法描述如下:

算法描述

//共享栈的入栈操作
int Push(SqStack*s, ElemType x, int n)
{
   
    
    
    if(n<

猜你喜欢

转载自blog.csdn.net/weixin_43428283/article/details/127333424