/-栈的顺序存储表示 10/20/2023 #define STACK INIT SIZE 100: #define STACKINCREMENT 10: typedef struct SElemType *base; SElemType *top; int stacksize; SqStack; top的初值指向栈底:top=base,此条件也可作为判栈空的条件; 在实际使用中,top始终指向栈顶元素的下一个位置上 入栈(插入新的栈顶元素):top增1; 出栈(删除栈顶元素): top减1
//- 栈的顺序存储表示 - #define STACK_INIT_SIZE 100; #define STACKINCREMENT 10; typedef struct { SElemType *base; SElemType *top; int stacksize; } SqStack; top的初值指向栈底:top=base,此条件也可作为判栈空的条件; 在实际使用中,top 始终指向栈顶元素的下一个位置上; 入栈(插入新的栈顶元素):top增1; 出栈(删除栈顶元素): top减1。 10/20/2023
10/20/202 栈满 栈空 top +StackLength(S) top 5 top F top top E top top D top 2 top top top top B base -base top base top=0 栈S空 进栈 出栈 栈顶指针top,指向实际栈顶 设数组大小为M 前的空位置,初值为0 top=0,栈空,此时出栈,则下溢(underflow) top=M,栈满,此时入栈,则上溢(overflow) 为减少溢出的概率,可以在同一段内存中同时使用两个栈。 M-1 栈1底 栈1顶 栈2顶 栈2底
top=0 1 2 3 4 5 0 栈S空 栈顶指针top,指向实际栈顶 前的空位置,初值为0 top 1 2 3 4 5 0 进栈 A top 出栈 栈 满 B C D E F 设数组大小为M top=0, 栈空,此时出栈,则下溢(underflow) top=M, 栈满,此时入栈,则上溢(overflow) top top top top top 1 2 3 4 5 A 0 B C D E top F top top top top top 栈空 0 M-1 栈1底 栈1顶 栈2顶 栈2底 为减少溢出的概率,可以在同一段内存中同时使用两个栈. StackLength(S) base base base 10/20/2023
10/20/2023 Status InitStack(SqStack &S) {∥构造一个最大空间为STACK_INIT_sIzE的空顺序栈 S S.base-(SElemType*)malloc(↓); TACK INIT SIZE*sizeof(SElemType) if(!S.base)exit(OVERFLOW);II存储分配失 败 S.top S.base; S.stacksize STACK INIT SIZE; return OK:
Status InitStack (SqStack &S) { // 构造一个最大空间为 STACK_INIT_SIZE的空顺序栈 S S.base=(SElemType*)malloc( ↓ ); TACK_INIT_SIZE*sizeof(SElemType) if (!S.base) exit (OVERFLOW); //存储分配失 败 S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } 10/20/2023
10/20/2023 Status Push (SqStack &S,SElemType e){ if(S.top-S.base>=S.stacksize){/栈满 S.base-(SElemType*)realloc(S.base, (STACK_INIT_SIZE+STACKINCREMENT)*sizeof(SElemType)); if(!S.base)exit(OVERFLOW); S.top=S.base +S.stacksize; S.stacksize+=STACKINCREMENT: *S.top++=e; return OK:
Status Push (SqStack &S, SElemType e) { if (S.top - S.base >= S.stacksize) {//栈满 S.base=(SElemType*)realloc(S.base, (STACK_INIT_SIZE+STACKINCREMENT) *sizeof(SElemType)); if (!S.base) exit( OVERFLOW); S.top= S.base +S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++ = e; return OK; } 10/20/2023
10/20/2023 Status Pop(SqStack &S,SElemType &e){ ∥若栈不空,则删除$的栈顶元素, ∥用e返回其值,并返回OK; I否则返回ERROR if(S.top==S.base)return ERROR; e =*-S.top; return OK;
Status Pop (SqStack &S, SElemType &e) { // 若栈不空,则删除S的栈顶元素, // 用 e 返回其值,并返回OK; // 否则返回ERROR if (S.top == S.base) return ERROR; e = * - S.top; return OK; } 10/20/2023