栈的顺序表示和实现

栈的顺序存储结构

SqStack//顺序栈{SElemType *base;//在栈构造指针之前和销毁之后,base值为NULLSElemType *top;//栈顶指针int stacksize;//当前已分配的存储空间,以元素为单位};

栈的9个基本操作

void InitStack(SqStack &S){//构造一个空栈SS.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if (!S.base) exit(OVERFLOW);S.top = S.base;//栈顶指向栈底S.stacksize = STACK_INIT_SIZE;}void DestroyStack(SqStack &S){free(S.base);S.top = S.base = NULL;S.stacksize = 0;}void ClearStack(SqStack &S){//把S置为空栈S.top = S.base;//栈顶指针指向栈底}Status StackEmpty(SqStack S){FALSE;}int StackLength(SqStack S){return S.top – S.base;}Status GetTop(SqStack S, SElemType &e){if (S.top > S.base){e = *(S.top – 1);return OK;}elsereturn ERROR;}void Push(SqStack &S, SElemType e){if (S.top – S.base == S.stacksize){S.base = (SElemType *)realloc(S.base, (S.stacksize + STACK_INCREMENT) * sizeof(SElemType));if (!S.base) exit(OVERFLOW);S.top = S.base + S.stacksize;//修改栈顶指针,,指向新的栈顶S.stacksize += STACK_INCREMENT;//更新当前已分配的存储空间}*(S.top)++ = e;//将e入栈,成为新的栈顶元素,栈顶指针上移1个存储单元}Status Pop(SqStack &S, SElemType &e){if (S.top == S.base)return ERROR;e = *–S.top;//将栈顶元素赋给e,栈顶指针下移1个存储单元}void StackTraverse(SqStack S, void(*visit)(SElemType&)){while (S.top > S.base){visit(*S.base++);}printf(“\n”);}

才能做到人在旅途,感悟人生,享受人生。

栈的顺序表示和实现

相关文章:

你感兴趣的文章:

标签云: