栈表初学习
-
栈:限定仅在表尾进行插入或者删除(后进先出)的线性表
-
顺序栈:地址连续的存储单元依次存放自栈底到栈顶
//顺序栈的定义 typedef struct{ SDataType *base; //栈底指针 SDataType *top; //栈顶指针 int StackSize; //当前已经分配的存储空间,以元素为单位 }SqStack;
-
链栈:(后续补充)
-
-
顺序表的基本操作实现:
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define MAXSIZE 100 #define OVERFLOW -1 #define STACKINCREMENT 10 #define OK 1 typedef int SElemType; typedef int Status; typedef struct { SElemType* base; //栈底 SElemType* top; //栈顶 int stacksize; }SqStack; //初始化顺序栈 Status InitStack(SqStack& S) { S.base = new SElemType[MAXSIZE];//S.base=(SElemType*)malloc(MAXSIZE*sizeof(SElemType)) if (!S.base) exit(OVERFLOW); //分配失败返回error S.top = S.base; //此时为空栈 S.stacksize = MAXSIZE; //将其设置为栈的最大容量 return OK; } //入栈 Status Push(SqStack& S, SElemType e){ SElemType* p; if (S.top - S.base == S.stacksize) { p = (SElemType*)realloc(S.base, (MAXSIZE + STACKINCREMENT) * sizeof(SElemType));//追加空间 if (!p) { return OVERFLOW;//追加空间失败返回error } S.base = p; S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *(S.top)= e; S.top++; return OK; } //出栈 Status Pop(SqStack& S, SElemType& e) { if (S.top == S.base) return OVERFLOW; //如果为空表返回error e = *--S.top; //栈顶指针减一后赋值给e(栈顶没有数据,栈顶下一个才有) return OK; } //取栈顶元素 SElemType GetTop(SqStack S) { if (S.top != S.base) return *(S.top - 1); //当不是空栈时返回栈顶元素指针 } int main() { SqStack S; int i; SElemType elem; InitStack(S); //初始化建立空栈 for (i = 1; i < 6; i++) { Push(S,i); //将1~5按次序输入至栈 } while (S.top != S.base) { Pop(S,elem); printf("%d", elem); //取出栈顶元素并输出 } return 0; } //没有写判断是否为满栈或满栈等细节