• C++day6


    模板类实现封装栈

    1. #include
    2. #define MAX 128
    3. using namespace std;
    4. template <typename T>
    5. class Stack
    6. {
    7. private:
    8. T *p = new T[MAX];//存放数据的数组
    9. int top;//记录下标位置
    10. public:
    11. //构造函数
    12. Stack()
    13. {
    14. top = -1;
    15. cout<<"无参构造函数"<
    16. }
    17. //析构函数
    18. ~Stack()
    19. {
    20. cout<<"Stack::析构函数"<
    21. }
    22. //拷贝构造函数
    23. Stack(const Stack &other):p(new T[MAX]),top(other.top)
    24. {
    25. cout<<"拷贝构造函数"<
    26. }
    27. //入栈
    28. bool stack_push(T e);
    29. //出栈
    30. bool stack_pop();
    31. //清空栈
    32. void stack_free();
    33. //判空
    34. int stack_empty();
    35. //判满
    36. int stack_full();
    37. //获取栈顶元素
    38. T stack_top();
    39. //栈的大小
    40. int stack_size();
    41. };
    42. //栈的大小
    43. template <typename T>
    44. int Stack::stack_size()
    45. {
    46. cout<<"栈的大小为 "<1<
    47. return top+1;
    48. }
    49. //获取栈顶元素
    50. template <typename T>
    51. T Stack::stack_top()
    52. {
    53. if(stack_empty())
    54. {
    55. cout<<"获取失败"<
    56. return -1;
    57. }
    58. cout<<"栈顶元素为 "<
    59. return p[top];
    60. }
    61. //判满
    62. template <typename T>
    63. int Stack::stack_full()
    64. {
    65. return top == MAX-1;
    66. }
    67. //判空
    68. template <typename T>
    69. int Stack::stack_empty()
    70. {
    71. return top == -1;
    72. }
    73. //清空栈
    74. template <typename T>
    75. void Stack::stack_free()
    76. {
    77. while(top != -1)
    78. {
    79. stack_pop();
    80. }
    81. cout<<"清空成功"<
    82. }
    83. //出栈
    84. template <typename T>
    85. bool Stack::stack_pop()
    86. {
    87. if(stack_empty())
    88. {
    89. return false;
    90. }
    91. T e = p[top];
    92. top--;
    93. cout<" 出栈成功"<
    94. return true;
    95. }
    96. //入栈
    97. template <typename T>
    98. bool Stack::stack_push(T e)
    99. {
    100. if(stack_full())
    101. {
    102. cout<<"入栈失败"<
    103. return false;
    104. }
    105. top++;
    106. p[top] = e;
    107. cout<" 入栈成功"<
    108. return true;
    109. }
    110. int main()
    111. {
    112. Stack<int> s1;
    113. s1.stack_push(4);
    114. Stack<int> s3 = s1;
    115. s3.stack_pop();
    116. s3.stack_size();
    117. s1.stack_pop();
    118. Stack s2;
    119. s2.stack_push("hello");
    120. s2.stack_pop();
    121. return 0;
    122. }

     

    模板类封装队列

    1. #include
    2. #define MAX 128
    3. using namespace std;
    4. template<typename T>
    5. class Queue_q
    6. {
    7. private:
    8. T *p=new T[MAX];//队列的数组
    9. int tail;//记录队尾元素
    10. int head;//记录对头元素
    11. public:
    12. //构造函数
    13. Queue_q(int t=0)
    14. {
    15. head=t;
    16. tail=t;
    17. cout<<"无参构造函数"<
    18. }
    19. //析构函数
    20. ~Queue_q()
    21. {
    22. cout<<"Stack::析构函数"<
    23. }
    24. //拷贝构造函数
    25. Queue_q(const Queue_q &other):p(new T[MAX]),tail(other.tail),head(other.head)
    26. {
    27. cout<<"拷贝构造函数"<
    28. }
    29. //入队
    30. int queue_push(T e);
    31. //出队
    32. int queue_pop();
    33. //清空队列
    34. int queue_delete();
    35. //判空
    36. bool queue_empty();
    37. //判满
    38. bool queue_full();
    39. //队列的大小
    40. void queue_getsize();
    41. void show(int i)
    42. {
    43. cout<" ";
    44. }
    45. };
    46. //入队
    47. template<typename T>
    48. int Queue_q::queue_push(T e)
    49. {
    50. if(queue_full())
    51. {
    52. cout<<"入队失败"<
    53. return -1;
    54. }
    55. p[tail]=e;
    56. tail=(tail+1)%MAX;
    57. cout<<"入队成功"<
    58. return 0;
    59. }
    60. //出队
    61. template<typename T>
    62. int Queue_q::queue_pop()
    63. {
    64. if(queue_empty())
    65. {
    66. cout<<"出队失败"<
    67. return -1;
    68. }
    69. T e=p[head];
    70. head=(head+1)%MAX;
    71. cout<" 出队成功"<
    72. return 0;
    73. }
    74. //清空队列
    75. template<typename T>
    76. int Queue_q::queue_delete()
    77. {
    78. while(head!=tail)
    79. {
    80. queue_pop();
    81. }
    82. delete [] p;
    83. p=nullptr;
    84. cout<<"清空队列成功"<
    85. return 0;
    86. }
    87. //判空
    88. template<typename T>
    89. bool Queue_q::queue_empty()
    90. {
    91. if(head==tail)
    92. {
    93. cout<<"队列空"<
    94. return 1;
    95. }
    96. return 0;
    97. }
    98. //判满
    99. template<typename T>
    100. bool Queue_q::queue_full()
    101. {
    102. if((tail+1)==0)
    103. {
    104. cout<<"队列满了"<
    105. return 1;
    106. }
    107. return 0;
    108. }
    109. //队列的大小
    110. template<typename T>
    111. void Queue_q::queue_getsize()
    112. {
    113. int size;
    114. size=(tail-head+MAX)%MAX;
    115. cout<<"队的大小为:"<
    116. }
    117. int main()
    118. {
    119. //实例一个double类型的队列
    120. Queue_q<double> q1;
    121. double e;
    122. int s;
    123. q1.queue_empty();
    124. cout<<"请输入要入队的个数:";
    125. cin>>s;
    126. for(int i=0;i
    127. {
    128. cout<<"请输入要入队的元素:";
    129. cin>>e;
    130. q1.queue_push(e);
    131. }
    132. q1.queue_getsize();
    133. for(int i=0;i
    134. {
    135. q1.show(i);
    136. }
    137. cout<
    138. q1.queue_delete();
    139. //实例一个string类型的队列
    140. Queue_q q2;
    141. string e1;
    142. int s2;
    143. q2.queue_empty();
    144. cout<<"请输入要入队的个数:";
    145. cin>>s2;
    146. for(int j=0;j
    147. {
    148. cout<<"请输入要入队的元素:";
    149. cin>>e1;
    150. q2.queue_push(e1);
    151. }
    152. q2.queue_getsize();
    153. for(int j=0;j
    154. {
    155. q2.show(j);
    156. }
    157. cout<
    158. q2.queue_delete();
    159. Queue_q q3 = q2;
    160. return 0;
    161. }

     

  • 相关阅读:
    第七篇,STM32串口通信编程
    基础算法--双指针算法
    面向6G的欠采样相移键控可见光调制方案
    hadoop 大数据环境配置 ssh免密登录 centos配置免密登录 hadoop(四)
    【人脸检测 FPS 1000+】ubuntu下libfacedetection tensorrt部署
    Can‘t call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.
    Starday影响者视频能给你提升80%的流量?
    vue可ctrl、shift多选,可添加标记的日历组件
    nodejs中对es6语法规范讲解
    Selenium安装WebDriver Chrome驱动(含 116/117/118/119/120/)
  • 原文地址:https://blog.csdn.net/qq_53478460/article/details/132864075