SqStack

来源:互联网 发布:mac口红哪个粉色好看 编辑:程序博客网 时间:2024/04/30 21:47
#include <iostream>using namespace std;#define OK 1#define ERROR -1#define TRUE 1#define FALSE 0#define OVERFLOW -2#define STACK_INIT_SIZE 100//存储空间初始分配量#define STACKINCREMENT 10//存储空间分配增量typedef char SElemType;typedef struct {/************************************************************************//*定义栈的结构体                                     *//*Went 2011-10-26 20:15  *//************************************************************************/SElemType *base;//在栈构造之前和销毁之后,base为NULLSElemType *top;//栈顶指针int stacksize;//当前已分配的存储空间,以元素为单位}SqStack;int InitStack(SqStack &S) {//initial a stackS.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));if (!S.base)return OVERFLOW;S.top = S.base;S.stacksize = STACK_INIT_SIZE;return OK;}int StackEmpty(SqStack &S) {//whether the stack is emptyif (S.base == NULL)return ERROR;if (S.base == S.top)return TRUE;return FALSE;}int DestroyStack(SqStack &S) {//destroy the stackif (S.base == NULL)return ERROR;if (StackEmpty(S)) {free(S.base);free(S.top);printf("destroy the empty stack successfully!\n");}free(S.base);S.base = S.top = NULL;S.stacksize = 0;return OK;}int ClearStack(SqStack &S) {//clear the stackif (S.base == S.top)return ERROR;S.base = S.top;S.stacksize = 0;return OK;}int StackLength(SqStack S) {//get the length of the stackif (S.base == NULL)return ERROR;return S.top - S.base;}int GetTop(SqStack S, SElemType &e) {//get the top element if it existsif (S.base == S.top)return ERROR;e = *(S.top - 1);return OK;}int Push(SqStack &S, SElemType e) {//push an element into the stack as a new top elementif (S.top - S.base >= S.stacksize) {//increase the room of stackS.base = (SElemType*)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType));if (!S.base)return OVERFLOW;S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e;return OK;}int Pop(SqStack &S, SElemType &e) {//delete the top elementif (S.top == S.base)return ERROR;e = *--S.top;return OK;}int visit(SElemType e) {cout << e << " ";return OK;}int StackTraverse(SqStack S, int (*visit)(SElemType)) {//visit all the elements of the stackSqStack q;q = S;if (S.top == S.base)return ERROR;while(q.top != q.base) {visit(*--q.top);}cout << endl;return OK;}int main() {SqStack s1;SElemType e;InitStack(s1);Push(s1, 'a');Push(s1, 'b');GetTop(s1, e);StackTraverse(s1, visit);cout << e << endl;cout << StackLength(s1) << endl;DestroyStack(s1);cout << "end of the process!\n";system("pause");return 0;}