• C++ day6


    将栈和队列封装成模板类

    栈:

    1. #include
    2. #define N 128
    3. using namespace std;
    4. template <typename T>
    5. class My_stack{
    6. private:
    7. T data[N];
    8. int top;
    9. public:
    10. //无参构造
    11. My_stack();
    12. //判空
    13. bool empty()const;
    14. //入栈
    15. void push(const T val);
    16. //出栈
    17. void pop();
    18. //求栈中元素个数
    19. int size();
    20. //求栈顶元素
    21. T& My_top();
    22. //遍历
    23. void show();
    24. };
    25. //无参构造
    26. template <typename T>
    27. My_stack ::My_stack():top(-1){}
    28. //判空
    29. template <typename T>
    30. bool My_stack::empty()const{
    31. return top == -1?1:0;
    32. }
    33. //入栈
    34. template <typename T>
    35. void My_stack::push(const T val){
    36. if(top == N){cout<<"栈满"<return;}
    37. top++;
    38. data[top] = val;
    39. }
    40. //出栈
    41. template <typename T>
    42. void My_stack::pop(){
    43. if(empty()){cout<<"栈空"<return;}
    44. data[top] = 0;
    45. top--;
    46. }
    47. //求栈顶元素
    48. template <typename T>
    49. T& My_stack::My_top(){
    50. if(empty()){cout<<"栈空"<
    51. return data[top];
    52. }
    53. //求栈中元素个数
    54. template <typename T>
    55. int My_stack::size(){
    56. cout<<"栈中元素个数为:";
    57. return top+1;
    58. }
    59. //遍历
    60. template <typename T>
    61. void My_stack::show(){
    62. if(empty()){cout<<"栈空"<return;}
    63. for(int i=0;i1;i++){
    64. cout<" ";
    65. }
    66. cout<
    67. }
    68. int main()
    69. {
    70. My_stack<int> s;
    71. for(int i=0;i<10;i++){
    72. s.push(i);
    73. }
    74. s.show();
    75. cout<size()<
    76. cout<<"栈顶元素为:"<My_top()<
    77. for(int j=0;j<5;j++){
    78. s.pop();
    79. }
    80. s.show();
    81. cout<size()<
    82. cout<<"栈顶元素为:"<My_top()<
    83. return 0;
    84. }

    队列: 

    1. #include
    2. #define N 9
    3. using namespace std;
    4. template <typename T>
    5. class My_queuse{
    6. private:
    7. T data[N];
    8. int front,tail;
    9. int len;
    10. public:
    11. //无参构造
    12. My_queuse();
    13. //判空
    14. bool empty()const;
    15. //判满
    16. bool full()const;
    17. //入队
    18. void push(const T &val);
    19. //出队
    20. void pop();
    21. //求队中元素个数
    22. int size();
    23. //求队头元素
    24. T& My_front();
    25. //遍历
    26. void show();
    27. };
    28. //无参构造
    29. template <typename T>
    30. My_queuse::My_queuse():front(0),tail(0),len(0){}
    31. //判空
    32. template <typename T>
    33. bool My_queuse::empty()const{
    34. if(tail == front){
    35. return true;
    36. }
    37. return false;
    38. }
    39. //判满
    40. template <typename T>
    41. bool My_queuse::full()const{
    42. if((tail+1)%N == front){
    43. return true;
    44. }
    45. return false;
    46. }
    47. //入队
    48. template <typename T>
    49. void My_queuse::push(const T &val){
    50. if(full()){cout<<"队满"<return;}
    51. data[tail] = val;
    52. tail = (tail+1)%N;
    53. len++;
    54. }
    55. //求队头元素
    56. template <typename T>
    57. T& My_queuse::My_front(){
    58. if(empty()){cout<<"队满"<
    59. return data[front];
    60. }
    61. //出队
    62. template <typename T>
    63. void My_queuse::pop(){
    64. if(empty()){return;}
    65. data[front] = 0;
    66. front = (front+1)%N;
    67. len--;
    68. return;
    69. }
    70. //队内元素个数
    71. template <typename T>
    72. int My_queuse::size(){
    73. return len;
    74. }
    75. //遍历
    76. template <typename T>
    77. void My_queuse::show(){
    78. if(empty()){return;}
    79. int i = front;
    80. while(1){
    81. cout<" ";
    82. if((front+1)%N==tail){
    83. break;
    84. }
    85. front = (front+1)%N;
    86. }
    87. front = i;
    88. cout <
    89. }
    90. int main()
    91. {
    92. My_queuse<int> q;
    93. for(int i=0;i<8;i++){
    94. q.push(i+1);
    95. }
    96. q.show();
    97. cout<<"队长为:"<size()<
    98. for(int j=0;j<4;j++){
    99. q.pop();
    100. }
    101. q.show();
    102. cout<<"队长为:"<size()<
    103. cout<<"队头元素:"<My_front()<
    104. return 0;
    105. }

     

  • 相关阅读:
    我与Vue.js 2.x 的七年之痒
    rust cargo
    【基于FreeRTOS的STM32F103系统】编写FreeRTOS程序
    SysML理论知识
    WordPress(7)配置邮箱发送功能
    【C程序设计】用心浇灌<C程序>
    Facebook平台特征概述
    接口高可用
    校园论坛(Java)—— 数据报表模块
    OpenGL之图形流水线中的光照计算、明暗处理
  • 原文地址:https://blog.csdn.net/2301_77665369/article/details/132864059