栈:本质上依旧是线性表。
栈的定义:限定只能在表的一端进行插入和删除运算的线性表(只能在栈顶操作)。
栈的特点:后进先出(LIFO)原则。
1.数据类型:栈
2.存储方式:顺序存储
3.常用名称:顺序栈
#includeusing namespace std; #define MAX_SIZE 100 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; // Status是函数的类型,其值是函数结果状态代码 typedef int SElemType; // 根据自己的数据类型进行定义 // 定义栈的结构体 typedef struct { SElemType* base; // 栈底指针 SElemType* top; // 栈顶指针 int stacksize; // 栈可用最大容量 }Sqstack; // 栈初始化 Status InitStack(Sqstack& S) { S.base = new SElemType[MAX_SIZE]; // 分配内存,将栈底指针指向该内存 if (!S.base) exit(OVERFLOW); // 存储分配失败 S.top = S.base; // 栈顶指针 = 栈底指针 S.stacksize = MAX_SIZE; return OK; } // 栈是否为空 Status StackEmpty(Sqstack S) { if (S.base == S.top) return TRUE; else return FALSE; } // 栈的长度 int StackLength(Sqstack S) { return S.top - S.base; } // 清空栈 Status ClearStack(Sqstack &S) { if (S.base) S.top = S.base; return OK; } // 销毁顺序栈 Status DestroyStack(Sqstack& S) { if (S.base) { delete S.base; S.stacksize = 0; S.base = S.top = NULL; } return OK; } // 入栈,压入栈顶 Status Push(Sqstack& S, SElemType e) { if (S.top - S.base == S.stacksize) return ERROR; // 栈满 *S.top++ = e; // 写入栈顶; 即 *S.top = e; S.top++; return OK; } // 出栈,从栈顶取出 Status Pop(Sqstack& S, SElemType& e) { if (S.top == S.base) return ERROR; // 栈空 e = *--S.top; //栈顶指针-1, 再取指针所指的栈顶元素 return OK; } int main(int arg, char* argv[]) { Sqstack S; InitStack(S); Push(S, 1); Push(S, 5); Push(S, 9); Push(S, 3); cout << StackEmpty(S) << endl; int len = StackLength(S); cout << len << endl; int e; while (len) { Pop(S, e); cout << e << endl; --len; } return 0; }



