◆出栈操作: Datatype Pop(seqstack*s, datatype e) /*若栈非空,删除栈顶元素,用e返回其值* if(empty(s) printf("underflow); return NULL;/*下溢*/} else s->top-- e= s->data[s->top]; return(e)
出栈操作: Datatype Pop(seqstack *s,datatype e) /*若栈非空,删除栈顶元素,用e返回其值*/ { if (empty(s)) { printf("underflow");return NULL; /*下溢*/ } else { s->top--; e= s->data[s->top]; return(e); } }
◆取栈顶操作 Datatype GetTop(seqstack*s /取顺序栈s的栈顶*/ if (empty(s)) printf(" stack is empty");/*空栈*/ return null; else return(s->datal--s->top)
取栈顶操作: Datatype GetTop(seqstack *s) /*取顺序栈s的栈顶*/ { if (empty(s)) { printf("stack is empty");/*空栈*/ return null; } else return(s->data[--s->top]); }
多栈头享空间 ◆实例:假定有两个栈共享一个数组S[0,…, MAXSIZE-1] 使第一个栈使用数组空间的前面部分,并使栈底在前;而使 第二个栈使用数组空间的后面部分,并使栈底在后,这样实 现了多栈共享空间;其空间分配示意图如图所示。 MAXSIZE-1 4栈s14 A栈s24 栈底botm1栈页 栈顶tp2 栈底 bottom 图4-4两栈共享空间示意图
多栈共享空间 实例:假定有两个栈共享一个数组S[0,…,MAXSIZE-1] 使第一个栈使用数组空间的前面部分,并使栈底在前;而使 第二个栈使用数组空间的后面部分,并使栈底在后,这样实 现了多栈共享空间;其空间分配示意图如图所示
◆共享空间存储结构的定义: typedef datatype int;/*栈元素的数据类型*/ # define maxsize64/*栈的最大容量*/ typedef struct datatype data lmaxsizel int topl, top2; stack; ◆初始化操作: InitDstack (stack*s) s->top1=0; S->top2=maxsize-1
共享空间存储结构的定义: typedef datatype int; /*栈元素的数据类型*/ #define maxsize 64 /* 栈的最大容量*/ typedef struct { datatype data[maxsize]; int top1,top2; }dstack; 初始化操作: InitDstack(dstack *s) { s->top1=0; s->top2=maxsize-1; }
◆进栈操作: PushDstack (stack*s, char ch, datatypex) *把数据元素x压入栈s的左栈或右栈*/ if (s->top2 -s->top1==1) return 0; /*栈已满 if (ch==' s1 & s->data s->top1=x, s->topl=s->topl+1 return I: }/*进栈S1* if(ch==’s2) s->data[s->top2]=x; S->top2=S->top2-1; return 1 }/*进栈s2*/
进栈操作: PushDstack(dstack*s,char ch,datatype x) {/*把数据元素x压入栈s的左栈或右栈*/ if (s->top2 - s->top1==1) return 0;/*栈已满*/ if(ch==’s1’) { s->data[s->top1]=x; s->top1= s->top1+1; return 1; }/*进栈s1*/ if(ch==’s2’) { s->data[s->top2]=x; s->top2= s->top2-1; return 1; }/*进栈s2*/ }