(5)判栈空否 int IsEmpty(seqstack * s) return(s->top==-1? TRUE: FALSE) (6)判栈满 int IsFull( Seqstack *s) return(s->top==MAXSIZE-1? TRUE FALSE)
(5) 判栈空否 int IsEmpty(Seqstack *s) { return (s->top= =-1? TRUE : FALSE) } (6)判栈满 int IsFull(Seqstack *s) { return (s->top= =MAXSIZE-1? TRUE : FALSE) }
栈的共享存储单元 有时,一个程序设计中,需要使用多个同 类型的栈,这时候,可能会产生一个栈空 间过小,容量发生溢出,而另一个栈空间过 大,造成大量存储单元浪费的现象。为了充 分利用各个栈的存储空间,这时可以采用多 个栈共享存储单元,即给多个栈分配一个足 够大的存储空间,让多个栈实现存储空间优 势互补
有时,一个程序设计中,需要使用多个同 一类型的栈,这时候,可能会产生一个栈空 间过小,容量发生溢出,而另一个栈空间过 大,造成大量存储单元浪费的现象。 为了充 分利用各个栈的存储空间,这时可以采用多 个栈共享存储单元,即给多个栈分配一个足 够大的存储空间,让多个栈实现存储空间优 势互补。 栈的共享存储单元
栈1底 栈2底 栈1顶 栈2顶 两个栈共享存储单元示意图
栈 1 顶 栈 2 顶 栈 1 底 栈 2 底 两个栈共享存储单元示意图
两个栈共享存储单元可用如下C语句描述: #define M 1o0 Typedef struct i StackElementType stack MI int topl21;两个栈的栈顶指针op, top1 yDqStack; 初始化操作: DqStack*s; s->top|0=-1; S->top 1=M;
两个栈共享存储单元可用如下C语句描述: #define M 100 Typedef struct { StackElementType stack[M]; int top[2] ; //两个栈的栈顶指针top[0],top[1] }DqStack; 初始化操作: DqStack *s; s->top[0]=-1; s->top[1]=M;
(1)两个栈共享存储单元的进栈算法 Hi int push(Dq Stack *S, stackelemtype x, int i) 将元素x压入到以S的记栈中 i if(s->top[0]+1==s->top[1]) return(FALSE) else if(i==0) S->top[01++ S->stack[s->topO=X; I else if(i==1) S->top[1]- S->stack[s->top[1=x;) else return(FALSE) return(TRUE)
(1)两个栈共享存储单元的进栈算法 int push(DqStack *s, stackelemtype x, int i) //将元素x压入到以S的i号栈中 { if (s->top[0]+1==s->top[1]) return(FALSE); else if (i==0) { s->top[0]++; s->stack[s->top[0]]=x;} else if(i= =1) { s->top[1]--; s->stack[s->top[1]]=x;} else return(FALSE); return(TRUE); }