- 知识点
|
- 顺序栈的定义
采用顺序存储方式的栈,用静态数组实现,给每个元素分配连续的存储空间,用栈顶指针指向栈顶元素
/*定义栈中的元素最大个数*/ #define MaxSize 10 /*顺序栈结构体*/ typedef struct { /*静态数组存放栈中元素*/ ElemType data[MaxSize]; /*栈顶指针*/ int top; }SqStack; |
- 顺序栈的基本操作
栈的初始化:
/*栈的初始化*/ void InitStack(SqStack &S) { /*初始化栈顶指针*/ S.top = -1; } |
或 S.top = 0(栈顶指向下一个空位置)
判断栈是否为空
/*判断栈是否为空*/ bool StackEmpty(SqStack S) { /*栈顶指针为-1时栈为空*/ if(S.top == -1) return true; else return false; } |
或 S.top == 0
入栈:
/*入栈操作*/ bool Push(SqStack &S,ElemType x) { /*栈满插入失败*/ if(S.top==MaxSize-1) return false; /*将新元素压入栈顶*/ //S.data[++S.top]=x S.top = S.top + 1; S.data[S.top] = x; return true; } |
或 S.data[S.top++] = x
出栈:
/*出栈操作*/ bool Pop(SqStack &S,ElemType &x) { /*栈空报错*/ if(S.top == -1) return false; /*将栈顶元素出栈*/ //x = S.data[S.top--]; x = S.data[S.top]; S.top = S.top - 1; return true; } |
或 x = S.data[--S.top]
读取栈顶元素:
/*读取栈顶元素*/ bool GetTop(SqStack S,ElemType &x) { /*栈空报错*/ if(S.top == -1) return false; /*读取栈顶元素*/ x = S.data[S.top]; return true; } |
或 x=S.data[S.top-1]
- 共享顺序栈
两个栈共享同一片空间 ;一个栈栈底在存储空间的最后一个位置,另一个栈的栈底在存储空间的第一个位置
共享栈判断栈满的条件:top0 + 1 == top1
/*共享栈*/ typedef struct { ElemType data[MaxSize]; /*栈0的栈顶元素*/ int top0; /*栈1的栈顶元素*/ int top1; }ShStack; |
/*共享栈的初始化*/ void InitShStack(ShStack &S) { S.top0 = -1; S.top1 = MaxSize; } |