顺序栈的表示与实现

电玩女神 2022-08-28 07:53 200阅读 0赞

顺序栈的基本函数

初始化

入栈

出栈

取栈顶元素

#

需要注意的是,本文代码采用了c++的一些语法,得使用cpp文件,才能运行成功。

代码

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #define maxsize 100
  5. typedef int status;//使后面可以使用status类型,用来表示成功或失败状态
  6. #define ERROR -1
  7. #define OK 1
  8. typedef struct
  9. {
  10. char *base;
  11. char *top;
  12. int stacksize;
  13. }sqstack;
  14. status init(sqstack &S)
  15. {//顺序栈的初始化
  16. S.base=new char[10];
  17. if(!S.base) exit(OVERFLOW);
  18. S.top=S.base;
  19. S.stacksize=maxsize;
  20. return OK;
  21. }
  22. status push(sqstack &S,char e)//顺序栈入栈
  23. {//插入元素e为新的栈顶元素
  24. if(S.top-S.base==S.stacksize) return ERROR;
  25. *S.top++=e; return OK;
  26. }
  27. status pop(sqstack &S,char &e)//顺序栈出栈
  28. {//删除S的栈顶元素,用e返回其值
  29. if(S.top==S.base) return ERROR;
  30. e=*--S.top;
  31. return OK;
  32. }
  33. char gettop(sqstack S)//取栈顶元素
  34. {//返回S的栈顶元素,不修改栈顶指针
  35. if(S.top!=S.base)
  36. return *(S.top-1);
  37. }
  38. //status StackTraverse(sqstack S)
  39. //{
  40. 从栈顶到栈底依次输出栈中的每个元素
  41. // char *p,*q ;
  42. // p =S.top;
  43. // q = S.base;
  44. // if(p==q)printf("The Stack is Empty!");//判断栈是否为空
  45. // else
  46. // {
  47. // printf("The Stack is: ");
  48. // p--;
  49. // while(p>=S.base)
  50. // {
  51. // printf("%c ", *p);
  52. // p--;
  53. // }
  54. // }
  55. // printf("\n");
  56. // return OK;
  57. //}
  58. status StackTraverse(sqstack S)
  59. {
  60. // 从栈顶到栈底依次输出栈中的每个元素
  61. if(S.top==S.base)printf("The Stack is Empty!");//判断栈是否为空
  62. else
  63. {
  64. printf("The Stack is: ");
  65. S.top--;
  66. while(S.top>=S.base)
  67. {
  68. printf("%c ", *S.top);
  69. S.top--;
  70. }
  71. }
  72. printf("\n");
  73. return OK;
  74. }
  75. void choose()
  76. {
  77. printf("命令展示\n");
  78. printf("1:展示栈顶元素\n");
  79. printf("2:插入新元素\n");
  80. printf("3:删除栈顶元素\n");
  81. printf("4:展示栈元素\n");
  82. printf("5:退出\n");
  83. }
  84. void order(sqstack S)
  85. {
  86. int n;char e;
  87. choose();
  88. printf("请问你想选择的功能\n");
  89. scanf("%d",&n);
  90. switch(n)
  91. {
  92. case 1: e=gettop(S);printf("栈顶元素是:%c\n",e);order(S);break;
  93. case 2: {
  94. printf("请输入你要插入的元素:\n");
  95. scanf("%s",&e);
  96. push(S,e);order(S);break;
  97. }
  98. case 3: {
  99. printf("返回的被删除栈顶元素:");
  100. pop(S,e);printf("%c\n",e);
  101. order(S);break;
  102. }
  103. case 4:StackTraverse(S);order(S);break;
  104. case 5: exit(0);break;
  105. default:exit(0);
  106. }
  107. }
  108. int main()
  109. {
  110. sqstack S;
  111. init(S);
  112. push(S,'a');push(S,'b');push(S,'c');push(S,'d');push(S,'e');
  113. order(S);
  114. return 0;
  115. }

代码当中的StackTtraverse()有2种写法,均可以使用。

输出

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBA546L6ZmI6ZSL_size_12_color_FFFFFF_t_70_g_se_x_16

输入

  1. 2
  2. s
  3. 2
  4. g
  5. 4

发表评论

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

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

相关阅读

    相关 顺序c++实现

    栈是计算机里边极其常见的一类数据结构,特别是在编译原理里边,栈溢出(stack overflow)甚至成为世界知名的计算机人员交流网站,顺序栈也是十分常用的。 \i