栈的基本操作(之三) Push(&s, e) 初始条件:栈S已经存在 操作结果:插入元素e为新的栈顶元素。 Pop(&s, &e) 初始条件:栈S已经存在且非空。 操作结果:删除S的栈顶元素并用e返回其值。 StackTraverse(S,visit O) 初始条件:栈S已经存在且非空。 操作结果:从栈底到栈顶依次对S的每个元素 调用函数 visit O。一旦 visit失败,则操作 失败
栈的基本操作(之三) Push(&S,e) • 初始条件: 栈S已经存在。 • 操作结果: 插入元素e为新的栈顶元素。 Pop(&S,&e) • 初始条件: 栈S已经存在且非空。 • 操作结果: 删除S的栈顶元素并用e返回其值。 StackTraverse(S,visit()) • 初始条件: 栈S已经存在且非空。 • 操作结果: 从栈底到栈顶依次对S的每个元素 调用函数visit ()。一旦visit ()失败,则操作 失败
312栈的顺序表示与实现 (顺序栈) typedef struct( SElem Type *base *在栈构造之前和销毁之后,base的值为NULL*/ SElem Type*top;,*栈顶指针*/ int stacksize;/*当前已分配的存储空间,以元素为单位* iSqstack #define STaCK INIT SIzE 100 #define STaCKIncrement 10 #define oK 1 #define oVerfloW-1 #define error o
3.1.2 栈的顺序表示与实现--- (顺序栈) typedef struct{ SElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL*/ SElemType *top; /* 栈顶指针 */ int stacksize; /* 当前已分配的存储空间,以元素为单位*/ }SqStack; #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define OVERFLOW -1 #define ERROR 0
顺序栈示意图 顺序栈 *top a stacksize 初始空栈 *base op stacksize top=*base stacksize= STACK INIT SIZE
顺序栈示意图 *base *top stacksize ...... a1 ... ai an *base *top stacksize 初始空栈 *top = *base; stacksize = STACK_INIT_SIZE 顺序栈
顺序栈的操作实现举例 Initstack/*构造一个空的栈S* 口 Status initstack〈 Sqstack*s) i s-base=( selemType *)malloc 口( STACK INIT SIZE水 sizeof( SElemType) o if(s-> base) return(OVERFLOW) 口s->top base stacksize= STACK INIT SIze D return OK }/菜 Initstack米/
顺序栈的操作实现举例 InitStack /* 构造一个空的栈S*/ Status InitStack(SqStack *s) { s->base=( SElemType *)malloc (STACK_INIT_SIZE * sizeof(SElemType)); if(!s -> base) return(OVERFLOW); s -> top = s -> base; s -> stacksize = STACK_INIT_SIZE; return OK; } /* InitStack */