3.顺序栈 /*静态分配栈空间,大小固定,不能扩充* #define TRUe 1 #define False 0 #define oK #define ERRoR 0 typedef int Elem Type typedef struct Elem Type elem[ marlene+1]/*栈元素空间* Int top /*顶指针* i SqStack 客*水*称*水客*水客水*客*水****客水凇客水客水*客水**容**水客 SqStack为结构类型 例: SqStack s;说明s为结构类型变量,可表示一个栈 其中:stop-顶指针; selem[stop-顶元素 未用元素 selem[oj *水*水涂水水客客*客水*客客客*水水**涂水*客*幸水*水*客水*水*水水客*水水客客*涂水*客水 *功能:测试栈是否为空 输入:栈对象S 输出:空时返回TRUE,非空时返回 FALSE int Stack Empty (sqstack S) f if(.top==0) return TRUE else return false **水客水凇客容水*称***客水本*水*称客本本客客*客水称本涂*水*客水凇客本容水*称本*客 功能:进栈操作 输入:栈对象S的指针,数据元素e 输出:成功时返回OK int Push(Sqstack*S, Elem Type e)
3. 顺序栈 /* 静态分配栈空间,大小固定,不能扩充*/ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define maxleng 10 typedef int ElemType; typedef struct { ElemType elem[maxleng+1]; /*栈元素空间*/ int top; /*顶指针*/ }SqStack; /****************************************************** SqStack 为结构类型 例:SqStack s;说明 s 为结构类型变量,可表示一个栈 其中: s.top----顶指针;s.elem[s.top]----顶元素 未用元素 s.elem[0] ******************************************************/ /********************************************************** ** 功能:测试栈是否为空 ** ** 输入:栈对象 S ** ** 输出: 空时返回 TRUE, 非空时返回 FALSE ** **********************************************************/ int StackEmpty(SqStack S) { if (S.top==0) return TRUE; else return FALSE; } /********************************************************** ** 功能:进栈操作 ** ** 输入:栈对象 S 的指针,数据元素 e ** ** 输出: 成功时返回 OK ** **********************************************************/ int Push(SqStack *S,ElemType e) {
Intj; f(S->top== maxing)/*栈溢出* printf("OVERFLOW") return ERROR: S->top++, 栈顶加1*/ S-elem[S->topl=e,/*新元素进栈*/ return O 功能:退栈操作 输入:栈对象S的指针 输出:成功时返回OK、通过数据元素指针e返回栈顶元素的值* 空栈时返回 ERROR 幸本幸*李**举本率***亲率本幸***家春家春***亲幸本本幸**家举幸本**亲*幸本幸****/ int Pop(Sqstack*S, Elem Type 'e) if( StackEmpty(*S) return error,倖*空栈失败返回* e=S-elem[S->top]/*取栈顶元素* S->top=S->top-1;/栈顶减1*/ return OF 成功返回* maino int i; Elem Type elem /定义栈对象s* *初始化栈对象s* clrscro for(i=1;<=5,+)/输入5个数据元素并进栈* printf("No%d? " 1) scanf("%d", &elem) Push(&s, elem) } for(i=1;i<=7,i++)/*退栈操作* f(Pop(&s&elem)=OK)/*正确退栈时,可通过elem输出数据元素* printf("No%d=%d ",i, elem); else*若栈已空,结束,此时elem的值无意义,* i printf("stack has been empty! ") break;
int j; if (S->top==maxleng) /*栈溢出*/ { printf("OVERFLOW"); return ERROR; } S->top++; /*栈顶加 1*/ S->elem[S->top]=e; /*新元素进栈*/ return OK; } /******************************************************************* ** 功能:退栈操作 ** ** 输入:栈对象 S 的指针 ** ** 输出: 成功时返回 OK、通过数据元素指针 e 返回栈顶元素的值 ** ** 空栈时返回ERROR ** *******************************************************************/ int Pop(SqStack *S,ElemType *e) { if(StackEmpty(*S)) return ERROR; /*空栈,失败返回 */ *e=S->elem[S->top];/*取栈顶元素*/ S->top=S->top-1; /*栈顶减 1*/ return OK; /*成功返回 */ } main() { int i; ElemType elem; SqStack s; /*定义栈对象 s*/ s.top=0; /*初始化栈对象 s*/ clrscr(); for(i=1;i<=5;i++) /*输入 5 个数据元素并进栈*/ { printf("No%d? ",i); scanf("%d",&elem); Push(&s,elem); }; for(i=1;i<=7;i++) /*退栈操作*/ { if (Pop(&s,&elem)==OK) /*正确退栈时,可通过 elem 输出数据元素*/ printf("No%d=%d ",i,elem); else /*若栈已空,结束,此时 elem 的值无意义,*/ { printf("stack has been empty!"); break;} };