(5)判栈空否int empty(seqstack s)if (s.top= =s.base)return 1;elsereturn 0,1
(5) 判栈空否 int empty(seqstack s) { if (s.top= =s.base) return 1; else return 0; }
3.栈的共享存储单元有时,一个程序设计中,需要使用多个同一类型的栈这时候,可能会产生一个栈空间过小,容量发生溢出,而另一个栈空间过大,造成大量存储单元浪费的现象。为了充分利用各个栈的存储空间,这时可以采用多个栈共享存储单元,即给多个栈分配一个足够大的存储空间,让多个栈实现存储空间优势互补。栈1底栈2底4A栈1顶栈2顶图3-3两个栈共享存储单元示意图
3.栈的共享存储单元 有时,一个程序设计中,需要使用多个同一类型的栈, 这时候,可能会产生一个栈空间过小,容量发生溢出, 而另一个栈空间过大,造成大量存储单元浪费的现象。 为了充分利用各个栈的存储空间,这时可以采用多个 栈共享存储单元,即给多个栈分配一个足够大的存储 空间,让多个栈实现存储空间优势互补。 栈 1 顶 栈 2 顶 栈 1 底 栈 2 底 图 3-3 两个栈共享存储单元示意图
两个栈共享存储单元可用如下C语句描述:#define maxsize.maxlen:l/maxlen为共享单元的最大长度typedef structduseqstack( elemtypestack[maxsize];int/两个栈的栈顶指针 top[2] ;;
两个栈共享存储单元可用如下C语句描述: #define maxsize maxlen; //maxlen为共享单元的最大长度 typedef struct duseqstack { elemtype stack[maxsize]; int top[2] ; //两个栈的栈顶指针 . };
(1)两个栈共享存储单元的进栈算法void dupush(duseqstack &s, elemtype x, int k/将元素x进入到以S为栈空间的第k个栈中1if (s.top[0]+1==s.top[1])printf("overflow");else if (k= =0)( s.top[0]++;s.stack[s.top[0]]-x;}else (s.top[1]--; s.stack[s.top[1]]-x,}1
(1)两个栈共享存储单元的进栈算法 void dupush(duseqstack &s, elemtype x, int k) //将元素x进入到以S为栈空间的第k个栈中 { if (s.top[0]+1==s.top[1]) printf(“overflow”); else if (k= =0) { s.top[0]++;s.stack[s.top[0]]=x;} else {s.top[1]-; s.stack[s.top[1]]=x;} }
(2)两个栈共享存储单元的退栈算法void pop(duseqstack &s, int k)/将以s为栈空间的栈中第k个栈进行退栈if ((k= =0)&&(s.top[0]= =0)) printf("underflow);else if (k= =1)&&(s.top[1]= =maxsize) printf("underflow);else if(k= =0) s.top[0]--else s.top[1]++;
(2)两个栈共享存储单元的退栈算法 void pop(duseqstack &s, int k) //将以s为栈空间的栈中第k个栈进行退栈 { if ((k= =0)&&(s.top[0]= =0)) printf(”underflow”); else if ((k= =1)&&(s.top[1]= =maxsize) printf(”underflow”); else if(k= =0) s.top[0]-; else s.top[1]++; }