一个双向栈 S 是在同一向量空间内实现的两个栈,它们的栈底分别设在向量空间的两端。其描述如下: #define DStackSize 100 typedef char DataType; typedef struct { DataType data[DStackSize]; int top1,top2;// top1 为栈 1 的栈顶指针, top2 为栈 2 的栈顶指针 }SeqDStack; 试为此双向栈设计初始化 void Initstack(SeqDStack *S) 、判栈空 int StackEmpty(SeqDStack *S, int i) 、判栈满 int StackFull(SeqDStack *S) 、入栈 int Push(SeqDStack *S,DataType x, int i) 、出栈 int Pop(SeqDStack *S, DataType *x, int i) 和取栈顶元素 int StackTop(SeqDStack *S, DataType *x, int i) 算法, 其中 i 为 0 或 1 , 0 表示栈 1 , 1 表示栈 2 。