栈的顺序存储结构及其基本运算实现

代码部分:

main.cpp:#include <stdio.h>#include "sqstack.h"int main(){ElemType e;SqStack *s;printf("(1)初始化栈s\n");InitStack(s);printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空"));printf("(3)依次进栈元素a,b,c,d,e\n");Push(s,'a');Push(s,'b');Push(s,'c');Push(s,'d');Push(s,'e');printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空"));printf("(5)栈长度:%d\n",StackLength(s));printf("(6)从栈顶到栈底元素:");DispStack(s);printf("(7)出栈序列:");while (!StackEmpty(s)){Pop(s,e);printf("%c ",e);}printf("\n");printf("(8)栈为%s\n",(StackEmpty(s)?"空":"非空"));printf("(9)释放栈\n");DestroyStack(s);return 0;}

sqstack.h:#define MaxSize 100typedef char ElemType;typedef struct{ElemType data[MaxSize];int top;//栈指针} SqStack;//顺序栈类型定义void InitStack(SqStack *&s); //初始化栈void DestroyStack(SqStack *&s); //销毁栈bool StackEmpty(SqStack *s);//栈是否为空int StackLength(SqStack *s); //返回栈中元素个数——栈长度bool Push(SqStack *&s,ElemType e); //入栈bool Pop(SqStack *&s,ElemType &e); //出栈bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素void DispStack(SqStack *s); //输出栈

sqstack.cpp:#include <stdio.h>#include <malloc.h>#include "sqstack.h"void InitStack(SqStack *&s){s=(SqStack *)malloc(sizeof(SqStack));s->top=-1;}void DestroyStack(SqStack *&s){free(s);}int StackLength(SqStack *s) //返回栈中元素个数——栈长度{return(s->top+1);}bool StackEmpty(SqStack *s){return(s->top==-1);}bool Push(SqStack *&s,ElemType e){if (s->top==MaxSize-1) //栈满的情况,,即栈上溢出return false;s->top++;s->data[s->top]=e;return true;}bool Pop(SqStack *&s,ElemType &e){if (s->top==-1)//栈为空的情况,即栈下溢出return false;e=s->data[s->top];s->top–;return true;}bool GetTop(SqStack *s,ElemType &e){if (s->top==-1)//栈为空的情况,即栈下溢出return false;e=s->data[s->top];return true;}void DispStack(SqStack *s) //输出栈{int i;for (i=s->top;i>=0;i–)printf("%c ",s->data[i]);printf("\n");}

结果:

收获:

第一次自己亲自打了一下全部的代码,虽然是抄的老师的,但是感觉自己收获颇多,做到了抄之有道.

版权声明:本文为博主原创文章,未经博主允许不得转载。

走自己的路,让别人说去吧

栈的顺序存储结构及其基本运算实现

相关文章:

你感兴趣的文章:

标签云: