数据结构(C语言)两个栈共存储在一个长度为n的一维数组中……

为了充分利用空间,将两个栈共同存储在长度为n的一维数组中,共享数据空间,设计两个栈共享一维数组的存储表示方式,画出示意图,并实现pop和push操作

想法是stack1,stack2的base分别在数组的两端。
stack1每次push的时候top + 1,stack2每次push时top-1,
初始时top1=base1,top2=base2,判断是否用空余空间可以用stack1.top > stack2.top
pop操作相反,判断栈空可以用stack.base == stack.top
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-04
typedef struct{
int left_pos; //左边栈顶,靠0方向

int right_pos; //右边栈顶,靠MAXSIZE-1方向

int split_pos; //左右栈分割位置

int stack[MAXSIZE];
}DoubleStack;

初始的时候,为了能够高效方便的让2个栈进数据,建议把split_pos设置为MAXSIZE/2,也即中间,并初始化 left_pos,right_pos也为MAXSIZE/2;

栈空判断left_pos==split_pos,则左栈空;right_pos==split_pos右栈空
栈非空left_pos < split_pos;right_pos > split_pos
进栈操作:
左:如果left_pos为0;right_pos不为MAXSIZE-1;则把栈所有数据向右移(MAXSIZE-right_pos)/2;
为什么不移1,?是为了效率考虑,比如只移1的话,左边又有一个元素进栈,则还要以一次,效率低下。
右:同左边相同的考虑方案,本回答被网友采纳
第2个回答  2012-09-23
一个栈对数组的头操作
一个栈对数组的尾操作
懂了吗?