顺序栈的共享存储空间 有时,一个程序设计中,需要使用多个同一类型 的栈,这时候,可能会产生一个栈空间过小,容量发 生溢出,而另一个栈空间过大,造成大量存储单元浪 费的现象。为了充分利用各个栈的存储空间,这时 可以采用多个栈共享存储单元,即给多个栈分配一个 足够大的存储空间,让多个栈实现存储空间优势互补
顺序栈的共享存储空间 有时,一个程序设计中,需要使用多个同一类型 的栈,这时候,可能会产生一个栈空间过小,容量发 生溢出,而另一个栈空间过大,造成大量存储单元浪 费的现象。 为了充分利用各个栈的存储空间,这时 可以采用多个栈共享存储单元,即给多个栈分配一个 足够大的存储空间,让多个栈实现存储空间优势互补
栈1底 栈2底 栈1顶 栈2顶 两个栈共享存储单元示意图
两个栈共享存储单元示意图 栈1底 栈1顶 栈2顶 栈2底
#define M 100 typedef struct datatype stack[M]; int top[2;/两个栈的栈顶指针top0,top[1 DqStack; 初始化操作: DqStack *s; s->top[0]=-1; s->top[1]=M;
#define M 100 typedef struct { datatype stack[M]; int top[2] ; //两个栈的栈顶指针top[0],top[1] }DqStack; 初始化操作: DqStack *s; s->top[0]=-1; s->top[1]=M;
两个栈共享存储单元的进栈算法 int push(DqStack *s,datatype x,int i) /将元素x压入栈到以S的号栈中 if (s->top[0]+1==s->top[1])return 0; 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 0; return 1;
两个栈共享存储单元的进栈算法 int push(DqStack *s, datatype x, int i) //将元素x压入栈到以S的i号栈中 { if (s->top[0]+1= =s->top[1]) return 0; 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 0; return 1; }
两个栈共享存储单元的出栈算法 int pop(DqStack *s,datatype *x,int i) /将以s为栈空间的栈中第个栈进行出栈 if ((i==0)&&(s->top[0]==-1))return 0; else{*x=s->stack[s->top[o]]; s->top0]小-;} if ((i==1)&&(s->top[1]==M)return 0; else *x=s->stack[s->top[1]]; s->top[0]++;} return 1;
两个栈共享存储单元的出栈算法 int pop(DqStack *s, datatype *x, int i) //将以s为栈空间的栈中第i个栈进行出栈 { if ((i= =0)&&(s->top[0]= =-1)) return 0; else { *x= s->stack[s->top[0]]; s->top[0]--; } if ((i= =1)&&(s->top[1]= =M) return 0; else { *x= s->stack[s->top[1]]; s->top[0]++; } return 1; }