• 栈的应用(C++,进制转化、括号匹配)


             十进制转化八进制,利用栈

    1. #include//十进制转八进制,利用栈
    2. using namespace std;
    3. typedef struct stack
    4. {
    5. int data;
    6. stack* next;
    7. }stack, * linkstack;
    8. void Initstack(linkstack& s)
    9. {
    10. s = NULL;
    11. }
    12. int Emptystack(linkstack s)
    13. {
    14. if (s == NULL)
    15. return 1;
    16. else
    17. return 0;
    18. }
    19. void Pushstack(linkstack& s, int node)
    20. {
    21. linkstack p = new stack;
    22. p->data = node;
    23. p->next = s;
    24. s = p;
    25. }
    26. int Popstack(linkstack& s, int& node)
    27. {
    28. linkstack p = new stack;
    29. if (s == NULL) return 0;
    30. node = s->data;
    31. p = s;
    32. s = s->next;
    33. delete p;
    34. return 1;
    35. }
    36. void Conversion(int N)
    37. {
    38. linkstack s;
    39. Initstack(s);
    40. while (N)
    41. {
    42. Pushstack(s, N % 8);
    43. N = N / 8;
    44. }
    45. while (!Emptystack(s))
    46. {
    47. int e;
    48. Popstack(s, e);
    49. cout << e;
    50. }
    51. }
    52. int main()
    53. {
    54. int N;
    55. cin >> N;
    56. cout << "八进制:" << endl;
    57. Conversion(N);
    58. }

      

           括号匹配 

    1. #include//括号匹配,利用栈
    2. using namespace std;
    3. typedef struct stack
    4. {
    5. int data;
    6. stack* next;
    7. }stack,*linkstack;
    8. void Initstack(linkstack &s)
    9. {
    10. s = NULL;
    11. }
    12. int Emptystack(linkstack s)
    13. {
    14. if (s == NULL)
    15. return 1;
    16. else
    17. return 0;
    18. }
    19. void Pushstack(linkstack& s, char node)
    20. {
    21. linkstack p=new stack;
    22. p->data = node;
    23. p->next = s;
    24. s = p;
    25. }
    26. int Popstack(linkstack& s, char &node)
    27. {
    28. linkstack p = new stack;
    29. if (s == NULL) return 0;
    30. node = s->data;
    31. p = s;
    32. s = s->next;
    33. delete p;
    34. return 1;
    35. }
    36. int Gettop(linkstack s)
    37. {
    38. if (s != NULL)
    39. return s->data;
    40. }
    41. int Matching()//返回一合法、返回零不合法
    42. {
    43. linkstack s;
    44. Initstack(s);
    45. int flag = 1;
    46. char ch,x;
    47. cin >> ch;
    48. while (ch != '#' && flag)
    49. {
    50. switch (ch)
    51. {
    52. case '[':
    53. case '(':
    54. Pushstack(s, ch);//左括号入栈
    55. break;
    56. case ')':
    57. if (!Emptystack(s) && Gettop(s) == '(')
    58. Popstack(s, x);//栈非空且栈顶是(,匹配成功;(出栈
    59. else flag = 0;//栈空或栈顶不是(,匹配失败
    60. break;
    61. case ']':
    62. if (!Emptystack(s) && Gettop(s) == '[')
    63. Popstack(s, x); //栈非空且栈顶是[, 匹配成功;[出栈
    64. else flag = 0;//栈空或栈顶不是(,匹配失败
    65. break;
    66. }
    67. cin >> ch;
    68. }
    69. if (Emptystack(s) && flag) return 1;
    70. else return 0;
    71. }
    72. int main()
    73. {
    74. int a=Matching();
    75. cout << a;
    76. }

     

  • 相关阅读:
    编写单元测试
    Springboot实现发送邮箱
    C++11新特性介绍,源码测试
    C#创建磁性窗体的方法:创建特殊窗体
    css设置下划线
    MySQL一条SQL语句的执行过程
    【愚公系列】2022年12月 .NET CORE工具案例-BackgroundService实现任务调度
    开源项目 - RuoYi-Cloud集成PostgreSQL数据库
    kubenetes-容器网络接口CNI
    论文阅读 CVPR2022《Rethinking Semantic Segmentation:A Prototype View》
  • 原文地址:https://blog.csdn.net/qq_74156152/article/details/133234305