• c++day3---9.8


    1> 自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量

    成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小

    头文件:

    1. #ifndef Z_H
    2. #define Z_H
    3. #include
    4. using namespace std;
    5. class Zhan
    6. {
    7. private:
    8. int *zhan;//存放栈中的数据
    9. int N;//栈空间
    10. int top;//栈顶
    11. public:
    12. //构造函数设置空间为10
    13. Zhan();
    14. //析构函数
    15. ~Zhan();
    16. //清空栈
    17. void clear();
    18. //是否栈空
    19. int empty();
    20. //是否栈满
    21. int full();
    22. //获取栈顶元素
    23. void top_data();
    24. //进栈
    25. void into();
    26. //出栈
    27. int out();
    28. //栈的大小
    29. void len();
    30. void show();
    31. };
    32. void choose();
    33. #endif // Z_H

    功能函数文件:

    1. #include"z.h"
    2. Zhan::Zhan()
    3. {
    4. N=10;
    5. zhan=new int[N];//分配栈空间
    6. this->top=-1;//初始化栈顶
    7. }
    8. //析构函数
    9. Zhan::~Zhan()
    10. {
    11. delete zhan;
    12. }
    13. //清空栈
    14. void Zhan::clear()
    15. {
    16. this->top=-1;
    17. cout<<"清空成功"<
    18. }
    19. //是否栈空
    20. int Zhan::empty()
    21. {
    22. return (this->top==-1)?1:0;
    23. }
    24. //是否栈满
    25. int Zhan::full()
    26. {
    27. return (this->top==N-1)?1:0;
    28. }
    29. //获取栈顶元素
    30. void Zhan::top_data()
    31. {
    32. if(empty())
    33. return;
    34. else
    35. {
    36. int a=0;
    37. a=this->top;
    38. cout<<"栈顶元素为:"<
    39. }
    40. }
    41. //进栈
    42. void Zhan::into()
    43. {
    44. if(full())
    45. return;
    46. else
    47. {
    48. int x;
    49. cout<<"请输入入栈元素:";
    50. cin>>x;
    51. while(getchar()!=10);
    52. zhan[++(this->top)]=x;
    53. cout<"入栈成功"<
    54. }
    55. }
    56. //出栈
    57. int Zhan::out()
    58. {
    59. if(empty())
    60. return 0;
    61. else
    62. return zhan[(this->top)--];
    63. }
    64. //栈的大小
    65. void Zhan::len()
    66. {
    67. int a=top;
    68. a+=1;
    69. cout<<"现在栈的大小为:"<
    70. }
    71. void Zhan::show()
    72. {
    73. cout<<"现在栈元素为:";
    74. int a=this->top;
    75. for(int i=0;i<=a;i++)
    76. {
    77. cout<" ";
    78. }
    79. cout<
    80. }
    81. //选择功能函数
    82. void choose()
    83. {
    84. int i=0;
    85. Zhan z;
    86. while(1)
    87. {
    88. system("CLS");
    89. z.show();
    90. cout<<"******1.入栈***********"<
    91. cout<<"******2.出栈***********"<
    92. cout<<"******3.清空栈*********"<
    93. cout<<"******4.栈顶元素********"<
    94. cout<<"******5.栈的大小********"<
    95. cout<<"******6.退出********"<
    96. cout<<"请选择功能:";
    97. cin>>i;
    98. while(getchar()!=10);
    99. switch(i)
    100. {
    101. case 1:
    102. z.into();
    103. break;
    104. case 2:
    105. z.out();
    106. break;
    107. case 3:
    108. z.clear();
    109. break;
    110. case 4:
    111. z.top_data();
    112. break;
    113. case 5:
    114. z.len();
    115. break;
    116. case 6:
    117. return;
    118. break;
    119. default:
    120. cout<<"输入错误,请重新输入"<
    121. break;
    122. }
    123. cout<<"请输入任意字符重新选择:";
    124. getchar();
    125. }
    126. }

    测试文件:

    1. #include"z.h"
    2. int main()
    3. {
    4. choose();
    5. return 0;
    6. }

    2> 自行封装一个循环顺序队列的类,包含私有成员属性:存放队列的数组、队头位置、队尾位置

    成员函数完成:构造函数、析构函数、拷贝构造函数、入队、出队、清空队列、判空、判满、求队列大小

    头文件:

    1. #ifndef DL_H
    2. #define DL_H
    3. #include
    4. using namespace std;
    5. class Duilie
    6. {
    7. private:
    8. int *duilie;//存放栈中的数据
    9. int N;//队列空间
    10. int top;//队列头
    11. int tail;//队列尾
    12. public:
    13. //构造函数设置空间为10
    14. Duilie();
    15. //析构函数
    16. ~Duilie();
    17. //清空队列
    18. void clear();
    19. //是否队列空
    20. int empty();
    21. //是否队列满
    22. int full();
    23. //进队列
    24. void into();
    25. //出队列
    26. int out();
    27. //队列的大小
    28. void len();
    29. void show();
    30. };
    31. void choose();
    32. #endif // DL_H

    功能函数文件:

    1. #include"dl.h"
    2. Duilie::Duilie()
    3. {
    4. N=10;
    5. duilie=new int[N];//分配队列空间
    6. this->top=0;//初始化队列头尾
    7. this->tail=0;
    8. }
    9. //析构函数
    10. Duilie::~Duilie()
    11. {
    12. delete duilie;
    13. }
    14. //清空队列
    15. void Duilie::clear()
    16. {
    17. for(int i=this->top;i!=this->tail;i=(i+1)%N)
    18. {
    19. duilie[i]=0;
    20. }
    21. this->tail=this->top=0;
    22. cout<<"清空成功"<
    23. }
    24. //是否队列空
    25. int Duilie::empty()
    26. {
    27. return (this->top==this->tail)?1:0;
    28. }
    29. //是否队列满
    30. int Duilie::full()
    31. {
    32. int a=this->tail;
    33. return ((a+1)%N==this->top)?1:0;
    34. }
    35. //进队列
    36. void Duilie::into()
    37. {
    38. if(full())
    39. return;
    40. else
    41. {
    42. int x;
    43. int a=this->tail;
    44. cout<<"请输入入队列的元素:";
    45. cin>>x;
    46. while(getchar()!=10);
    47. duilie[a]=x;
    48. this->tail=(this->tail+1)%N;
    49. cout<"入队列成功"<
    50. }
    51. }
    52. //出队列
    53. int Duilie::out()
    54. {
    55. if(empty())
    56. return 0;
    57. else
    58. {
    59. cout<this->top]<<"出队列成功"<
    60. this->top=(this->top+1)%N;
    61. return 1;
    62. }
    63. }
    64. //队列的大小
    65. void Duilie::len()
    66. {
    67. int a=0;
    68. a=(this->tail+N-this->top)%N;
    69. cout<<"现在队列的大小为:"<
    70. }
    71. void Duilie::show()
    72. {
    73. int a=this->top,b=this->tail;
    74. cout<<"现在队列从头到尾元素为:";
    75. for(int i=a;i!=b;i=(i+1)%N)
    76. {
    77. cout<" ";
    78. }
    79. cout<
    80. }
    81. //选择功能函数
    82. void choose()
    83. {
    84. int i=0;
    85. Duilie d;
    86. while(1)
    87. {
    88. system("CLS");
    89. d.show();
    90. cout<<"******1.入队列***********"<
    91. cout<<"******2.出队列***********"<
    92. cout<<"******3.清空队列*********"<
    93. cout<<"******4.队列的大小********"<
    94. cout<<"******5.退出********"<
    95. cout<<"请选择功能:";
    96. cin>>i;
    97. while(getchar()!=10);
    98. switch(i)
    99. {
    100. case 1:
    101. d.into();
    102. break;
    103. case 2:
    104. d.out();
    105. break;
    106. case 3:
    107. d.clear();
    108. break;
    109. case 4:
    110. d.len();
    111. break;
    112. case 5:
    113. return;
    114. break;
    115. default:
    116. cout<<"输入错误,请重新输入"<
    117. break;
    118. }
    119. cout<<"请输入任意字符重新选择:";
    120. getchar();
    121. }
    122. }

    测试文件:

    1. #include"dl.h"
    2. int main()
    3. {
    4. choose();
    5. return 0;
    6. }

    3>思维导图:

  • 相关阅读:
    3.消息队列全面总结——ActiveMq,RabbitMQ,RocketMq,Kafa
    学习队列,Java实现
    (2023,GPT-4V,LLM,LMM,功能和应用)大型多模态模型的黎明:GPT-4V(ision) 的初步探索
    LeetCode 35. 搜索插入位置
    AspNetCoreRateLimit应用于MVC项目求助
    972信息检索 | 第一章 信息检索概述
    C#与物联网:打造智能家居解决方案
    springboot整合minio上传文件
    Chrome扩展V2到V3的变化
    少儿编程Python大纲:趣味编程,探索未来
  • 原文地址:https://blog.csdn.net/yjh666jhy/article/details/132765993