关于该代码的理解,请参照下图
#include <stdio.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 20
typedef int ElemType;
typedef int Status;
//采用枚举类型, 是为了对对操作两个栈顶指针更为明显,不至于产生歧义,或者拥有视觉混淆
typedef enum
{
e_leftTop = 1,
e_rightTop = 2
}TopType;
//定义共享栈的存储结构
typedef struct
{
ElemType data[MAXSIZE];
int leftTop;
int rightTop;
}Stack;
//初始化
Status InitStack(Stack *s)
{
s -> leftTop = -1;
s -> rightTop = MAXSIZE;
return OK;
}
//压栈
Status Push(Stack *s, TopType type, ElemType elem)
{
if(s -> leftTop + 1 == s -> rightTop) return ERROR;
switch(type)
{
case e_leftTop:
s -> data[s -> leftTop + 1] = elem;
s -> leftTop++;
break;
case e_rightTop:
s -> data[s -> rightTop - 1] = elem;
s -> rightTop--;
break;
default :
return ERROR;
}
return OK;
}
//弹栈
Status Pop(Stack *s, TopType type, ElemType *elem)
{
switch(type)
{
case e_leftTop:
if(s -> leftTop == -1) return ERROR;
*elem = s -> data[s -> leftTop];
s -> leftTop --;
break;
case e_rightTop:
if(s -> rightTop == MAXSIZE) return ERROR;
*elem = s -> data[s -> rightTop];
s -> rightTop ++;
break;
default:
return ERROR;
}
return OK;
}
//获取长度
int Length(Stack s)
{
return s.leftTop + 1 + MAXSIZE - s.rightTop;
}
//清空
Status Clear(Stack *s)
{
s -> leftTop = -1;
s -> rightTop = MAXSIZE;
return OK;
}
int main(void)
{
Status statu;
Stack s;
statu = InitStack(&s);
if(statu == OK)
{
printf("%s : %d, %d\n", "InitStack", s.leftTop, s.rightTop);
statu = Push(&s, e_leftTop, 21);
statu = Push(&s, e_rightTop, 22);
if(statu == OK)
{
printf("%s : %d, %d, %d, %d\n", "Push", s.leftTop, s.data[0], s.rightTop, s.data[MAXSIZE-1]);
ElemType poplElem;
ElemType poprElem;
statu = Pop(&s, e_leftTop, &poplElem);
statu = Pop(&s, e_rightTop, &poprElem);
if(statu == OK)
{
printf("%s : %d, %d, %d, %d\n", "Pop", s.leftTop, poplElem, s.rightTop, poprElem);
printf("%s : %d\n", "Length", Length(s));
//statu = Push(&s, e_leftTop, 21);
//statu = Push(&s, e_rightTop, 22);
//printf("%s : %d\n", "Length", Length(s));
statu = Clear(&s);
if(statu == OK)
{
printf("%s : %d, %d\n", "Clear", s.leftTop, s.rightTop);
}
}
}
}
return 0;
}