• C++&QT day6


    1> 将之前定义的栈类和队列类都实现成模板类

    栈:

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

    结果:

    队列:

    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(p)),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. return 0;
    160. }

    结果:

    思维导图:

  • 相关阅读:
    Java Spring Boot 写 API 接口
    Django入门完整教程之如何使用 Django 和 Bulma CSS 构建 CMS(教程含源码)
    JDK与字节码版本
    Unity(第十九部)射线
    Podfile、Podfile.lock、Manifest.lock、Podspec
    Spring Boot 多数据源配置
    37~python 字符串
    springboot项目使用validated参数校验框架
    Unity 制作登录功能02-创建和链接数据库(SQlite)
    OpenAI开发者大会大模型圈开卷AI Agent? 实在智能布局前瞻已下“先手棋”
  • 原文地址:https://blog.csdn.net/m0_59031281/article/details/132863806