• 23062C++&QTday5


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

    栈:

    1. #include
    2. #define MAX 128
    3. using namespace std;
    4. template<typename T,typename C>
    5. class Stack
    6. {
    7. private:
    8. T top; //栈顶元素的下标
    9. C *data; //指向堆区空间
    10. public:
    11. Stack():top(-1),data(new C[MAX]) {} //无参构造
    12. //析构函数
    13. ~Stack()
    14. {
    15. delete[] data;
    16. cout<<"析构函数"<
    17. }
    18. //拷贝构造函数
    19. Stack(const Stack &other):top(other.top),data(new T(*other.data))
    20. {
    21. for(int i=0;i<=top;i++)
    22. {
    23. data[i]=other.data[i];
    24. }
    25. cout<<"拷贝构造函数"<
    26. }
    27. //入栈
    28. int Stack_push(C e)
    29. {
    30. top++;
    31. data[top]=e;
    32. cout<<"入栈成功"<
    33. return 0;
    34. }
    35. //出栈
    36. int Stack_pop()
    37. {
    38. top--;
    39. cout<<"出栈成功"<
    40. return 0;
    41. }
    42. //清空栈
    43. void Stack_clear()
    44. {
    45. top=-1;
    46. return;
    47. }
    48. //判空
    49. bool Stack_empty()
    50. {
    51. return top==-1;
    52. }
    53. //判满
    54. bool Stack_full()
    55. {
    56. return top==MAX-1;
    57. }
    58. //获取栈顶元素
    59. C & Stack_top()
    60. {
    61. return data[top];
    62. }
    63. //求栈的大小
    64. int Stack_size()
    65. {
    66. return top+1;
    67. }
    68. };
    69. int main()
    70. {
    71. Stack<int,int> n1;
    72. n1.Stack_push(1);
    73. n1.Stack_push(2);
    74. cout<<"栈的大小为"<Stack_size()<
    75. cout<<"栈顶元素为"<Stack_top()<
    76. Stack<int,string> n2;
    77. n2.Stack_push("hello");
    78. n2.Stack_push(" world");
    79. cout<<"栈的大小为"<Stack_size()<
    80. cout<<"栈顶元素为"<Stack_top()<
    81. return 0;
    82. }

    运行结果:

    队列:

    代码:

    1. #include
    2. #define MAX 128
    3. using namespace std;
    4. template<typename C>
    5. class queue
    6. {
    7. private:
    8. int front;
    9. int tail;
    10. C data[MAX];
    11. public:
    12. //构造函数
    13. queue():front(0),tail(0)
    14. {
    15. cout<<"构造函数"<
    16. }
    17. //析构函数
    18. ~queue()
    19. {
    20. cout<<"析构函数"<
    21. }
    22. //拷贝构造函数
    23. queue(const queue &other ):data(new C(*other.data))
    24. {
    25. int index=front;
    26. while(index!=tail)
    27. {
    28. data[index]=other.data[index];
    29. index=(index+1)%128;
    30. }
    31. cout<<"拷贝构造函数"<
    32. }
    33. //入队
    34. int queue_push(C e)
    35. {
    36. if(queue_full())
    37. {
    38. return -1;
    39. }
    40. data[tail]=e;
    41. tail=(tail+1)%128;
    42. return 0;
    43. }
    44. //出队
    45. int queue_pop()
    46. {
    47. if(queue_empty())
    48. {
    49. return -1;
    50. }
    51. front=(front+1)%128;
    52. return 0;
    53. }
    54. //清空队列
    55. void queue_delete()
    56. {
    57. tail=front=0;
    58. }
    59. //判空
    60. bool queue_empty()
    61. {
    62. return front==tail;
    63. }
    64. //判满
    65. bool queue_full()
    66. {
    67. return (tail+1)%128==front;
    68. }
    69. //求队列的大小
    70. int queue_size()
    71. {
    72. return (tail-front+128)%128;
    73. }
    74. //遍历
    75. void queue_show()
    76. {
    77. for(int i=front;i!=tail;i=(i+1)%128)
    78. {
    79. cout<" ";
    80. }
    81. putchar(10);
    82. }
    83. };
    84. int main()
    85. {
    86. queue<int> n1;
    87. n1.queue_push(1);
    88. n1.queue_push(2);
    89. n1.queue_show();
    90. queue n2;
    91. n2.queue_push("hello");
    92. n2.queue_push(" world");
    93. n2.queue_show();
    94. return 0;
    95. }

    运行结果:

     思维导图

  • 相关阅读:
    Linux - Linux下Java安装路径查找;配置Java环境变量
    学生类定义(类和对象)Java
    2023年数维杯国际赛B题赛题解题思路+部分代码
    el-date-picker的使用,及解决切换type时面板样式错乱问题
    Three.js 实现导出模型文件(.glb,.gltf)功能 GLTFExporter
    03-JAVA设计模式-访问者模式
    Redis入门到通关之Redis数据结构-List篇
    CAD快捷键——绘制类
    领跑两轮电动车江湖,谁是“关键先生”?
    [Linux]Windows使用ssh连接Linux虚拟机(mininet)
  • 原文地址:https://blog.csdn.net/cwj442257772/article/details/132863681