数据结构-顺序栈

你的名字 2022-07-28 04:30 387阅读 0赞
  1. /*
  2. 编写一个程序,实现顺序栈(假设栈中元素类型为char)的各种基本运算。并完成下面功能:
  3. (1)初始化栈s;
  4. (2)判断栈s是否非空;
  5. (3)依次进栈元素a,b,c,d,e;
  6. (4)判断栈s是否非空;
  7. (5)输出栈长度;
  8. (6)输出从栈顶到栈底元素;
  9. (7)输出出栈序列;
  10. (8)判断栈s是否非空;
  11. (9)释放栈。
  12. */
  13. #include <iostream>
  14. #include <malloc.h>
  15. #include <cstdio>
  16. #include <cstring>
  17. #define MaxSize 100
  18. using namespace std;
  19. typedef char ElemType;
  20. typedef struct
  21. {
  22. ElemType data[MaxSize];
  23. int top; //栈顶指针
  24. }SqStack; //定义顺序栈类型
  25. void InitStack(SqStack *&s) //初始化栈s
  26. {
  27. s=(SqStack *)malloc(sizeof(SqStack));
  28. s->top=-1; //栈顶指针置-1
  29. }
  30. bool StackEmpty(SqStack *s) //判断栈s是否为空
  31. {
  32. return (s->top!=-1);
  33. }
  34. bool Push(SqStack *&s,ElemType e) //进栈
  35. {
  36. if(s->top==MaxSize-1) //栈上溢出
  37. return false;
  38. s->top++; //栈顶指针增1
  39. s->data[s->top]=e; //元素e放在栈顶指针处
  40. return true;
  41. }
  42. int getLength(SqStack *s) //输出栈长度
  43. {
  44. return (s->top+1);
  45. }
  46. bool GetStack(SqStack *&s,int i,ElemType &e) //输出从栈顶到栈底元素
  47. {
  48. if(s->top==-1)
  49. return false;
  50. e=s->data[i];
  51. return true;
  52. }
  53. bool Pop(SqStack *&s,ElemType &e) //出栈
  54. {
  55. if(s->top==-1) //栈下溢出
  56. return false;
  57. e=s->data[s->top]; //取栈顶元素
  58. s->top--; //栈顶指针减1
  59. return true;
  60. }
  61. void DestoryStack(SqStack *&s) //释放栈
  62. {
  63. free(s);
  64. }
  65. int main()
  66. {
  67. ElemType a[MaxSize],b;
  68. SqStack *s;
  69. InitStack(s);
  70. cout<<"栈是否非空?";
  71. if(StackEmpty(s))
  72. cout<<"是"<<endl;
  73. else
  74. cout<<"否"<<endl;
  75. cout<<"输入要进栈元素:";
  76. gets(a);
  77. for(int i=0;i<strlen(a);i++)
  78. {
  79. Push(s,a[i]);
  80. }
  81. cout<<"元素已进栈"<<endl;
  82. cout<<"栈是否非空?";
  83. if(StackEmpty(s))
  84. cout<<"是"<<endl;
  85. else
  86. cout<<"否"<<endl;
  87. cout<<"栈的长度:"<<getLength(s)<<endl;
  88. cout<<"输出从栈顶到栈底元素:";
  89. for(int i=s->top;i>=0;i--)
  90. {
  91. GetStack(s,i,b);
  92. cout<<b<<" ";
  93. }
  94. cout<<endl;
  95. cout<<"栈是否非空?";
  96. if(StackEmpty(s))
  97. cout<<"是"<<endl;
  98. else
  99. cout<<"否"<<endl;
  100. cout<<"输出出栈序列:";
  101. for(int i=s->top;i>=0;i--)
  102. {
  103. Pop(s,b);
  104. cout<<b<<" ";
  105. }
  106. cout<<endl;
  107. cout<<"栈是否非空?";
  108. if(StackEmpty(s))
  109. cout<<"是"<<endl;
  110. else
  111. cout<<"否"<<endl;
  112. DestoryStack(s);
  113. cout<<"栈已释放!"<<endl;
  114. return 0;
  115. }

运行结果:

Center

发表评论

表情:
评论列表 (有 0 条评论,387人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数据结构顺序

    栈是基本的数据结构之一,利用一维数组或链表作为储存结构,实现\\\入栈\\\,出栈,读取栈顶元素 和 判断栈是否为空 等操作。 与线性表最大的不同之处是,栈只允许在一端进行

    相关 数据结构-顺序

    / 编写一个程序,实现顺序栈(假设栈中元素类型为char)的各种基本运算。并完成下面功能: (1)初始化栈s; (2)判断栈s是否非空;

    相关 数据结构 顺序

    做一个豁达而努力的自己。 栈的定义:只能在表的一端(栈顶)进行插入和删除的线性表。 逻辑结构:与线性表相同,仍为一一对应的关系。 存储结构:用顺序栈和链栈存储均可,但以顺