第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的话,左边又有一个元素进栈,则还要以一次,效率低下。
右:同左边相同的考虑方案,本回答被网友采纳