• c++day6实现成模板类


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

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

    1. #include
    2. using namespace std;
    3. template <typename T>
    4. class Stack
    5. {
    6. private:
    7. T data[50];
    8. int top;//记录栈顶的变量
    9. public:
    10. //构造函数
    11. Stack():top(-1)//栈顶初始化为-1
    12. {
    13. cout<<"构造函数"<
    14. }
    15. //判断栈是否为满
    16. bool S_full()
    17. {
    18. return top==49;
    19. }
    20. //判断栈是否为空
    21. bool S_empty()
    22. {
    23. return top==-1;
    24. }
    25. //入栈
    26. void S_push(const T&item)
    27. {
    28. if(S_full())
    29. {
    30. cout<<"栈已满"<
    31. }
    32. else
    33. {
    34. data[++top]=item;//入栈操作
    35. }
    36. }
    37. //出栈
    38. int S_pop()
    39. {
    40. if(S_empty())
    41. {
    42. cout<<"栈空的"<
    43. return -1;
    44. }
    45. else
    46. {
    47. return data[top--];//出栈操作
    48. }
    49. }
    50. //查看栈顶元素
    51. void S_peek()
    52. {
    53. if(S_empty())
    54. {
    55. cout<<"栈空的"<
    56. }
    57. else
    58. {
    59. cout<<"栈顶元素为:"<
    60. }
    61. }
    62. //求栈的大小
    63. void S_size()
    64. {
    65. cout<<"栈的大小:"<1<
    66. }
    67. //清空栈
    68. void S_free()
    69. {
    70. while(1)
    71. {
    72. if(S_empty())
    73. {
    74. cout<<"栈已清空"<
    75. break;
    76. }
    77. else
    78. {
    79. S_pop();
    80. }
    81. }
    82. }
    83. //析构函数
    84. ~Stack()
    85. {
    86. cout<<"析构函数"<
    87. }
    88. //拷贝构造函数
    89. Stack(const Stack& o) {
    90. cout<<"拷贝构造函数被调用了"<
    91. for(int i=0;i<=top;i++)
    92. {
    93. data[i]=o.data[i];
    94. }
    95. top=o.top;
    96. }
    97. //遍历栈
    98. void S_show()
    99. {
    100. cout<<"栈的元素:";
    101. for(int i=top;i>=0;i--)
    102. {
    103. cout<" ";
    104. }
    105. cout<
    106. }
    107. };
    108. int main()
    109. {
    110. Stack<int> s;
    111. s.S_push(1);
    112. s.S_push(2);
    113. s.S_push(3);
    114. s.S_push(4);
    115. s.S_pop();
    116. s.S_push(5);
    117. s.S_push(6);
    118. s.S_peek();
    119. s.S_size();
    120. s.S_free();
    121. s.S_size();
    122. s.S_push(5);
    123. s.S_push(6);
    124. s.S_size();
    125. s.S_peek();
    126. s.S_show();
    127. Stack<double> s3;
    128. s3.S_push(1.1);
    129. s3.S_push(2.2);
    130. s3.S_push(3.2);
    131. s3.S_push(2.4);
    132. s3.S_show();
    133. Stack<int>s2(s);
    134. s2.S_show();
    135. return 0;
    136. }

     

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

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

    1. #include
    2. using namespace std;
    3. template <typename T>
    4. class Queue
    5. {
    6. private:
    7. T data[10];
    8. int front;//记录头元素位置
    9. int tail;//记录尾元素位置
    10. public:
    11. //构造函数
    12. Queue():front(0),tail(0)//初始化
    13. {
    14. cout<<"构造函数"<
    15. }
    16. //判断队列是否为满
    17. bool S_full()
    18. {
    19. return (tail+1)%10==front;
    20. }
    21. //判断队列是否为空
    22. bool S_empty()
    23. {
    24. return front==tail;
    25. }
    26. //入队
    27. void S_push(const T&item)
    28. {
    29. if(S_full())
    30. {
    31. cout<<"队列已满"<
    32. }
    33. else
    34. {
    35. data[tail]=item;//入队操作
    36. //队尾后移动
    37. tail=(tail+1)%10;
    38. cout<<"入队成功"<
    39. }
    40. }
    41. //出队
    42. void S_pop()
    43. {
    44. if(S_empty())
    45. {
    46. cout<<"队空的"<
    47. }
    48. else
    49. {
    50. cout<"出队成功"<//出队操作
    51. //队头后移
    52. front=(front+1)%10;
    53. }
    54. }
    55. //求队列的大小
    56. void S_size()
    57. {
    58. cout<<"队列的大小:"<<(tail+10-front)%10<
    59. }
    60. //清空队列
    61. void S_free()
    62. {
    63. while(1)
    64. {
    65. if(S_empty())
    66. {
    67. cout<<"队列已清空"<
    68. break;
    69. }
    70. else
    71. {
    72. S_pop();
    73. }
    74. }
    75. }
    76. //析构函数
    77. ~Queue()
    78. {
    79. cout<<"析构函数"<
    80. }
    81. //拷贝构造函数
    82. Queue(const Queue& o) {
    83. cout<<"拷贝构造函数被调用了"<
    84. for(int i=o.front;i!=o.tail;i=(i+1)%10)
    85. {
    86. data[i]=o.data[i];
    87. }
    88. front=o.front;
    89. tail=o.tail;
    90. }
    91. //遍历队列
    92. void S_show()
    93. {
    94. cout<<"队列的元素:";
    95. for(int i=front;i!=tail;i=(i+1)%10)
    96. {
    97. cout<" ";
    98. }
    99. cout<
    100. }
    101. };
    102. int main()
    103. {
    104. Queue<int> s;
    105. s.S_push(1);
    106. s.S_push(2);
    107. s.S_push(3);
    108. s.S_push(4);
    109. Queue<double> s3;
    110. s3.S_push(1.1);
    111. s3.S_push(2.2);
    112. s3.S_push(3.3);
    113. s.S_push(1);
    114. s.S_push(2);
    115. s.S_push(3);
    116. s.S_push(4);
    117. s.S_push(3);
    118. s.S_push(1);
    119. s.S_push(4);
    120. s.S_size();
    121. s.S_show();
    122. s3.S_show();
    123. Queue<int>s2(s);
    124. s2.S_show();
    125. return 0;
    126. }

     思维导图

  • 相关阅读:
    【C++设计模式之简单工厂模式】分析及示例
    《低代码指南》——维格云抗原自检信息系统搭建「采集+检测+转运」
    python生成模拟微信气泡图片
    【Java I/O 流】对象流:ObjectInputStream 和 ObjectOutputStream
    c# 如何将程序加密隐藏?
    内网穿透工具之NATAPP(一)
    多线程03:线程传参详解
    算法基础——求每对结点之间的最短路径
    [iOS开发]iOS中的相关锁
    【UCIe】UCIe Multi-Module Link 介绍
  • 原文地址:https://blog.csdn.net/HYL1234511/article/details/132863533