• 共用一个一维空间的双向栈


    将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。

    数据结构定义:

    1. #define MAXSIZE 200
    2. using namespace std;
    3. typedef int ElemType;
    4. typedef struct{
    5. int bot[2]; //0和栈1的栈顶
    6. ElemType *base; //栈数组
    7. int stacksize; //栈最大可容纳元素个数
    8. }DblStack; //存放于一个数组空间的两个栈

    双栈初始化

    1. bool InitStack(DblStack &S)
    2. {
    3. S.base=new ElemType[MAXSIZE];
    4. if(!S.base) return false;
    5. S.bot[0]=-1; //两个栈的栈顶指针都指向栈顶元素
    6. S.bot[1]=MAXSIZE; //
    7. S.stacksize=MAXSIZE;
    8. return true;
    9. }

    判断栈空:

    1. bool StackEmpty(DblStack S)
    2. {//两个栈均空
    3. if(S.bot[0]==-1&&S.bot[1]==S.stacksize)
    4. return true;
    5. return false;
    6. }
    7. bool StackNo_1_Empty(DblStack S)
    8. {//1
    9. if(S.bot[0]==-1)
    10. return true;
    11. return false;
    12. }
    13. bool StackNo_2_Empty(DblStack S)
    14. {//2
    15. if(S.bot[1]==S.stacksize)
    16. return true;
    17. return false;
    18. }

    栈满:

    1. bool StackFull(DblStack &S)
    2. {//栈满
    3. return S.bot[0]+1==S.bot[1];
    4. }

    进栈:

    1. bool Push(DblStack &S,ElemType e)
    2. {
    3. if(S.bot[1]-S.bot[0]<=2) return false;//剩余空间不足两个
    4. S.base[++S.bot[0]]=e;
    5. S.base[--S.bot[1]]=e;
    6. return true;
    7. }
    8. bool Push_No_1(DblStack &S,ElemType e)
    9. {
    10. if(S.bot[0]+1==S.bot[1]) return false;
    11. S.base[++S.bot[0]]=e;
    12. return true;
    13. }
    14. bool Push_No_2(DblStack &S,ElemType e)
    15. {
    16. if(S.bot[0]+1==S.bot[1]) return false;
    17. S.base[--S.bot[1]]=e;
    18. return true;
    19. }

    出栈:

    1. bool Pop_No_1(DblStack &S,ElemType &e)
    2. {
    3. if(S.bot[0]==-1) return false;//栈空
    4. e=S.base[S.bot[0]--]; //先取再减
    5. return true;
    6. }
    7. bool Pop_No_2(DblStack &S,ElemType &e)
    8. {
    9. if(S.bot[1]==S.stacksize) return false;//栈空
    10. e=S.base[S.bot[1]++]; //先取再加
    11. return true;
    12. }

    完整:

    1. #include<iostream>
    2. #define MAXSIZE 200
    3. using namespace std;
    4. typedef int ElemType;
    5. typedef struct{
    6. int bot[2]; //0和栈1的栈顶
    7. ElemType *base; //栈数组
    8. int stacksize; //栈最大可容纳元素个数
    9. }DblStack; //存放于一个数组空间的两个栈
    10. bool InitStack(DblStack &S)
    11. {
    12. S.base=new ElemType[MAXSIZE];
    13. if(!S.base) return false;
    14. S.bot[0]=-1; //两个栈的栈顶指针都指向栈顶元素
    15. S.bot[1]=MAXSIZE; //
    16. S.stacksize=MAXSIZE;
    17. return true;
    18. }
    19. bool StackEmpty(DblStack S)
    20. {//两个栈均空
    21. if(S.bot[0]==-1&&S.bot[1]==S.stacksize)
    22. return true;
    23. return false;
    24. }
    25. bool StackNo_1_Empty(DblStack S)
    26. {//1
    27. if(S.bot[0]==-1)
    28. return true;
    29. return false;
    30. }
    31. bool StackNo_2_Empty(DblStack S)
    32. {//2
    33. if(S.bot[1]==S.stacksize)
    34. return true;
    35. return false;
    36. }
    37. bool StackFull(DblStack &S)
    38. {//栈满
    39. return S.bot[0]+1==S.bot[1];
    40. }
    41. bool Push(DblStack &S,ElemType e)
    42. {
    43. if(S.bot[1]-S.bot[0]<=2) return false;//剩余空间不足两个
    44. S.base[++S.bot[0]]=e;
    45. S.base[--S.bot[1]]=e;
    46. return true;
    47. }
    48. bool Push_No_1(DblStack &S,ElemType e)
    49. {
    50. if(S.bot[0]+1==S.bot[1]) return false;
    51. S.base[++S.bot[0]]=e;
    52. return true;
    53. }
    54. bool Push_No_2(DblStack &S,ElemType e)
    55. {
    56. if(S.bot[0]+1==S.bot[1]) return false;
    57. S.base[--S.bot[1]]=e;
    58. return true;
    59. }
    60. bool Pop_No_1(DblStack &S,ElemType &e)
    61. {
    62. if(S.bot[0]==-1) return false;//栈空
    63. e=S.base[S.bot[0]--]; //先取再减
    64. return true;
    65. }
    66. bool Pop_No_2(DblStack &S,ElemType &e)
    67. {
    68. if(S.bot[1]==S.stacksize) return false;//栈空
    69. e=S.base[S.bot[1]++]; //先取再加
    70. return true;
    71. }
    72. int main()
    73. {
    74. }

  • 相关阅读:
    【FPGA教程案例38】通信案例8——基于FPGA的串并-并串数据传输
    亚马逊第三大卖家国家巴基斯坦电商营商环境如何?且看跨境电商数字身份验证服务商ADVANCE.AI要参解析
    《剑指 Offer 》—03+11+05+21(offer消失术做题)
    刷题笔记26——图论二分图判定
    [go学习笔记.第十章.面向对象编程] 10.面向对象的特性-接口
    群晖上搭建teamspeak3语音服务器
    原生js+css制作--可以弹奏的吉他
    JavaScript运算符、条件语句、循环、类型转换
    泛微移动端数据库 :H2数据库
    WiFi连接满格信号但是不能上网?
  • 原文地址:https://blog.csdn.net/m0_73441691/article/details/133849566