# 顺序栈
# 1. 概念
顺序存储结构:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。
顺序栈:顺序存储结构的栈称为顺序栈。
# 2. 定义
| |
| #define MAXSIZE 1024 |
| typedef struct |
| { |
| ElemType data[MAXSIZE]; |
| int top; |
| }SqStack; |
//2.顺序栈的动态定义
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
# 3. 静态栈的基本操作
| 当栈空:sq.top==0 |
| 入栈:sq.data[sq.top]=x; sq.top++; |
| 出栈:sq.top--; x=sq.data[sq.top]; |
| 栈满:sq.top==Maxsize |
| 上溢:当栈满时再做进栈运算时产生空间溢出称为上溢。出 |
| 错状态应当避免 |
| 下溢:当栈空时再做退栈运算也将产生溢出称为下溢。是正 |
| 常现象,可用作程序控制转移件 |
| 当栈空:sq.top==-1 |
| 入栈:sq.top++;sq.data[sq.top]=x; |
| 出栈:x=sq.data[sq.top];sq.top--; |
| 栈满:sq.top==Maxsize-1 |
| 上溢:当栈满时再做进栈运算时产生空间溢出称为上溢。出 |
| 错状态应当避免。 |
| 下溢:当栈空时再做退栈运算也将产生溢出称为下溢。是正 |
| 常现象,可用作程序控制转移件。 |
# 4. 动态栈的基本操作
| 栈空: sq.top == sq.base |
| 栈满: sq.top-sq.base>=sq.stacksize |
| 读栈顶元素: e = *(sq.top- 1) |
| 入栈:*sq.top++ = e; |
| 出栈: e = *--sq.top; |
1) 初始化
| Status InitStack (SqStack &S) { |
| |
| S.base = (SElemType) *malloc(STACK_INIT_SIZE*sizeof(SElemType)); |
| if (!S.base) exit (OVERFLOW); |
| S.top = S.base; |
| S.stacksize = STACK_INIT_SIZE; |
| return OK; |
| } |
2) 读栈顶元素
| Status GetTop(SqStack S, SELemType &e) { |
| |
| if(S.top == s.base) return ERROR; |
| e = *(S.top- 1); |
| return OK; |
| } |
3) 进栈
| Status Push (SqStack &S, SElemType e){ |
| |
| if(S.top - S.base >= S.stacksize) { |
| S.base = (SElemType *) realloc (S.base, |
| (S.stacksize + STACKINCREMENT)*sizeof(SElemType)); |
| if (!S.base) exit (OVERFLOW); |
| S.top = S.base + S.stacksize; |
| S.stacksize += STACKINCREMENT; |
| } |
| *s.top++ =e; |
| return 0K; |
| } |
4) 退栈
| Status Pop (SqStack &S, SElenmType &e) { |
| |
| |
| if(S.top == S.base) return EROR; |
| e = * --S.top; |
| return 0K; |
| } |