栈的定义
栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(base)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表
直接上代码
#include#include #define MAXSIZE 100 typedef int SElemType; //顺序栈的存储结构 typedef struct { SElemType *base; SElemType *top; int stacksize; //可用最大容量 }SqStack; //初始化 void InitStack(SqStack &S) { S.base = new SElemType[MAXSIZE]; if (!S.base) exit; S.top = S.base; S.stacksize = MAXSIZE; } //入栈 int Push(SqStack &S, SElemType e) { if (S.top - S.base == S.stacksize) return 0; //栈满 *S.top = e; S.top++; return 1; } //出栈 int Pop(SqStack &S, SElemType &e) { if (S.top == S.base) return 0; //栈空 S.top--; e = *S.top; return 1; } //遍历输出栈 void printStack(SqStack S) { printf("栈底:"); SElemType *p = S.base; while (p!=S.top) { printf("%d ", *p); p++; } printf("n"); } int main() { SqStack S; int e; InitStack(S); printf("请输入一个要入栈的元素(-1表示结束):"); scanf("%d",&e); while (e!=-1) { Push(S,e); printf("请输入一个要入栈的元素(-1表示结束):"); scanf("%d", &e); } printStack(S); printf("出栈测试:"); Pop(S, e); printStack(S); }
测试结果
栈底为表头,栈顶为表尾。另设top和base指针分别指向顺序栈的栈底(低地址段端)和栈顶(为了方便,使top指向栈顶元素之上的下标位置)。stacksize为栈的最大容量。
base= =top是栈空标志。top-base==stacksize是栈满标志。满了之后top就溢出了,称为上溢。所以一般来说top-bas应该小于stacksize。
处理方法有两种
1:报错,返回操作系统。
2:分配更大的空间作为栈的储存空间,将原栈的内容移入新栈
处理方法2很费时,所以一般不用。
空栈出栈也是溢出,称为下溢。上溢是一种错误,使问题的处理无法进行;而下溢一般认为是约束条件,即问题处理结束。
顺序栈简单方便,但容易溢出(数组大小固定)



