数据结构—栈的顺序的实现

ゝ一纸荒年。 2022-06-07 12:46 263阅读 0赞
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define Stack_size 100 //栈的初始容量
  4. #define stackIncrease 10 //每次的增量
  5. typedef int Elemtype;
  6. typedef struct{
  7. Elemtype *base;
  8. Elemtype *top;
  9. int stacksize;
  10. }Sqstack;
  11. bool InitStack(Sqstack &S){ //初始化栈
  12. S.base = (Elemtype *)malloc(Stack_size*sizeof(Elemtype));
  13. if(!S.base)
  14. return false;
  15. S.top = S.base;
  16. S.stacksize = Stack_size;
  17. return true;
  18. }
  19. void ClearStack(Sqstack &S){ //清空栈的元素 实际上只移动了一下指针
  20. S.top = S.base;
  21. }
  22. bool StackEmpty(Sqstack S){ //判断栈是否为空
  23. if(S.base == S.top)
  24. return true;
  25. else
  26. return false;
  27. }
  28. int StackLength(Sqstack S){ //返回栈的长度
  29. return S.top - S.base;
  30. }
  31. bool GetTop(Sqstack &S, Elemtype &e){ //得到栈顶元素, 并用e返回
  32. if(S.base == S.top) //栈为空
  33. return false;
  34. e = *(S.top - 1);
  35. return true;
  36. }
  37. bool Push(Sqstack &S, Elemtype e){ //将元素e入栈
  38. if(S.top - S.base >= S.stacksize){
  39. S.base = (Elemtype *)realloc(S.base, (S.stacksize + stackIncrease)*sizeof(Elemtype));
  40. if(!S.base)
  41. return false;
  42. S.top = S.base + S.stacksize;
  43. S.base += stackIncrease;
  44. }
  45. *S.top = e;
  46. S.top++;
  47. //*(S.top++) = e; //这两条语句可以合并
  48. return true;
  49. }
  50. bool Pop(Sqstack &S, Elemtype &e){ //删除栈顶元素, 并用e返回
  51. if(S.base == S.top)
  52. return false;
  53. e = *(--S.top);
  54. return true;
  55. }
  56. int main(){
  57. Sqstack S;
  58. int e;
  59. if(InitStack(S) == true){
  60. printf("栈已经初始化好啦,请输入你想往进放的元素:\n");
  61. printf("温馨提示:输入-1代表停止输入\n");
  62. }
  63. while(scanf("%d", &e) && e != -1){
  64. Push(S, e);
  65. }
  66. printf("栈的长度是:%d\n", StackLength(S));
  67. printf("请输入你想要进行的操作序号:\n");
  68. printf("1:添加元素,2:删除栈顶元素,3:取栈顶元素,4:判断栈是否为空,\n5:返回栈的长度,6:清空栈,7:退出\n");
  69. int n;
  70. while(scanf("%d", &n) && n != 7){
  71. switch(n){
  72. case 1:
  73. printf("请输入你想添加的元素:");
  74. scanf("%d", &e);
  75. if(Push(S, e) == true)
  76. printf("添加成功\n");
  77. else
  78. printf("添加失败\n");
  79. break;
  80. case 2:
  81. if(Pop(S, e) == true){
  82. printf("删除成功,删除的元素是:%d\n", e);
  83. }
  84. else
  85. printf("删除失败\n");
  86. break;
  87. case 3:
  88. if(GetTop(S, e) == true)
  89. printf("栈顶元素是:%d\n", e);
  90. else
  91. printf("操作失败\n");
  92. break;
  93. case 4:
  94. if(StackEmpty(S) == true)
  95. printf("栈为空\n");
  96. else
  97. printf("栈不为空\n");
  98. break;
  99. case 5:
  100. printf("栈的长度是:%d\n", StackLength(S));
  101. break;
  102. case 6:
  103. ClearStack(S);
  104. printf("清空成功\n");
  105. break;
  106. default:
  107. printf("输入有误,请重新输入\n");
  108. break;
  109. }
  110. }
  111. printf("谢谢你的使用!\n");
  112. return 0;
  113. }

![Image 1][]

[Image 1]:

发表评论

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

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

相关阅读

    相关 数据结构-顺序

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

    相关 数据结构 顺序

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