• DAY48


     

    1. #ifndef QUEUE_H
    2. #define QUEUE_H
    3. #include
    4. using namespace std;
    5. #define MAX 10
    6. typedef int datatype;
    7. template <typename T>
    8. class queue
    9. {
    10. T data[MAX];
    11. T front;
    12. T tail;
    13. public:
    14. queue();
    15. ~queue();
    16. queue(const T &other);
    17. //创建循环队列
    18. T *queue_create();
    19. //判空
    20. int queue_empty(queue *q);
    21. //判满
    22. int queue_full(queue *q);
    23. //入队
    24. int queue_push(queue *q,T e);
    25. //遍历
    26. void queue_show(queue *q);
    27. //出队
    28. int queue_pop(queue *q);
    29. //求队列的长度
    30. int queue_size(queue *q);
    31. //销毁
    32. void queue_free(queue *q);
    33. };
    34. #endif // QUEUE_H
    1. #include"queue.h"
    2. template <typename T>
    3. queue::queue()
    4. {
    5. cout << "queue:无参构造" << endl;
    6. }
    7. template <typename T>
    8. queue::~queue()
    9. {
    10. cout << "queue::析构函数" << this << endl;
    11. }
    12. template <typename T>
    13. queue::queue(const T &other):front(other.front),tail(other.tail)
    14. {
    15. cout << "拷贝构造函数" << endl;
    16. }
    17. //创建循环队列
    18. template <typename T>
    19. T *queue::queue_create()
    20. {
    21. queue * q = (queue *)malloc(sizeof(queue));
    22. if(NULL == q)
    23. {
    24. printf("创建失败\n");
    25. return NULL;
    26. }
    27. q -> front = q -> tail = 0;
    28. printf("创建成功\n");
    29. return q;
    30. }
    31. //判空
    32. template <typename T>
    33. int queue::queue_empty(queue * q)
    34. {
    35. if(NULL == q)
    36. {
    37. printf("队列错误\n");
    38. return 0;
    39. }
    40. return q -> front == q -> tail;
    41. }
    42. //判满
    43. template <typename T>
    44. int queue::queue_full(queue *q)
    45. {
    46. if(NULL == q)
    47. {
    48. printf("队列错误\n");
    49. return 0;
    50. }
    51. return (q -> tail + 1) % MAX == q -> front;
    52. }
    53. //入队
    54. template <typename T>
    55. int queue::queue_push(queue *q,T e)
    56. {
    57. if(NULL == q)
    58. {
    59. printf("入队失败\n");
    60. return 0;
    61. }
    62. q -> data[q -> tail] = e;
    63. q -> tail = (q ->tail + 1) % MAX;
    64. printf("入队成功\n");
    65. return 1;
    66. }
    67. //遍历
    68. template <typename T>
    69. void queue::queue_show(queue *q)
    70. {
    71. if(NULL == q || queue_empty(q))
    72. {
    73. printf("遍历失败\n");
    74. return;
    75. }
    76. printf("从队头到队尾元素分别是: ");
    77. for(int i = q -> front; i != q -> tail; i = (i + 1) % MAX)
    78. {
    79. printf("%d\t",q -> data[i]);
    80. }
    81. printf("\n");
    82. }
    83. //出队
    84. template <typename T>
    85. int queue::queue_pop(queue * q)
    86. {
    87. if(NULL == q)
    88. {
    89. printf("出队失败\n");
    90. return 0;
    91. }
    92. cout << "出队的元素是: ";
    93. printf("%d\n",q -> data[q -> front]);
    94. q -> front = (q -> front + 1) % MAX;
    95. return 1;
    96. }
    97. //求队列的长度
    98. template <typename T>
    99. int queue::queue_size(queue * q)
    100. {
    101. if(NULL == q)
    102. {
    103. printf("不合法\n");
    104. return 0;
    105. }
    106. return (q -> tail + MAX - q -> front) % MAX;
    107. }
    108. //销毁
    109. template <typename T>
    110. void queue::queue_free(queue * q)
    111. {
    112. if(NULL == q)
    113. {
    114. printf("销毁失败\n");
    115. return ;
    116. }
    117. free(q);
    118. q = NULL;
    119. printf("释放成功\n");
    120. return ;
    121. }
    1. #include "queue.h"
    2. using namespace std;
    3. template <typename T>
    4. int main()
    5. {
    6. queue u;
    7. queue *q = u.queue_create();
    8. if(NULL == q)
    9. {
    10. return -1;
    11. }
    12. //入队
    13. u.queue_push(q,"aafa");
    14. u.queue_push(q,9);
    15. u.queue_push(q,3);
    16. u.queue_push(q,7);
    17. u.queue_push(q,4);
    18. u.queue_push(q,1);
    19. u.queue_show(q);
    20. //出队
    21. u.queue_pop(q);
    22. u.queue_show(q);
    23. //求队列大小
    24. u.queue_size(q);
    25. //清空且销毁
    26. u.queue_free(q);
    27. return 0;
    28. }

    1. #ifndef STACK_H
    2. #define STACK_H
    3. #include
    4. #include
    5. using namespace std;
    6. typedef int datatype;
    7. template <typename T>
    8. class stack
    9. {
    10. T * data;
    11. T top;
    12. public:
    13. stack();
    14. ~stack();
    15. stack(const T &other);
    16. //创建栈
    17. T *Stack_create();
    18. //判空
    19. T Stack_empty(T *s);
    20. //判满
    21. T Stack_full(T *s);
    22. //入栈
    23. T Stack_push(T *s,T e);
    24. //遍历栈
    25. T Stack_show(T *s);
    26. //出栈
    27. T Stack_pop(T *s);
    28. //获取栈顶元素
    29. T * Stack_top(T *s);
    30. //求栈的大小
    31. T Stack_size(T *s);
    32. //销毁栈
    33. T Stack_free(T *s);
    34. };
    35. #endif // STACK_H
    1. #include"stack.h"
    2. template <typename T>
    3. stack::stack():data(new T(111))
    4. {
    5. cout << "stack::无参构造" << endl;
    6. }
    7. template <typename T>
    8. stack::~stack()
    9. {
    10. delete data;
    11. cout << "stack::析构函数:" << this << endl;
    12. }
    13. //创建栈
    14. template <typename T>
    15. T * stack::Stack_create()
    16. {
    17. stack * s = (stack *)malloc(sizeof(stack));
    18. if(NULL == s)
    19. {
    20. cout << "申请失败" << endl;
    21. return NULL;
    22. }
    23. s -> data = (datatype *)malloc(sizeof(datatype) * 10);
    24. if(NULL == s -> data)
    25. {
    26. cout << "申请失败" << endl;
    27. free(s);
    28. return NULL;
    29. }
    30. s -> top = -1;
    31. printf("创建成功\n");
    32. return s;
    33. }
    34. //判空
    35. template <typename T>
    36. T stack::Stack_empty(T *s)
    37. {
    38. if(NULL == s)
    39. {
    40. printf("栈不合法\n");
    41. return 0;
    42. }
    43. return s -> top == -1;
    44. }
    45. //判满
    46. template <typename T>
    47. T stack::Stack_full(T *s)
    48. {
    49. if(NULL == s)
    50. {
    51. printf("栈不合法\n");
    52. return 0;
    53. }
    54. return s -> top == 10 - 1;
    55. }
    56. //入栈
    57. template <typename T>
    58. T stack::Stack_push(T * s,T e)
    59. {
    60. if(NULL == s || Stack_full(s))
    61. {
    62. printf("入栈失败\n");
    63. return 0;
    64. }
    65. s -> top++;
    66. s -> data[s -> top] = e;
    67. printf("入栈成功\n");
    68. return 1;
    69. }
    70. //遍历栈
    71. template <typename T>
    72. T stack::Stack_show(T *s)
    73. {
    74. if(NULL == s || Stack_empty(s))
    75. {
    76. printf("遍历失败\n");
    77. return ;
    78. }
    79. printf("从栈顶到栈底的元素分别是: \n");
    80. for(int i = s -> top; i >= 0; i--)
    81. {
    82. printf("%d\t",s -> data[i]);
    83. }
    84. printf("\n");
    85. }
    86. //出栈
    87. template <typename T>
    88. T stack::Stack_pop(T * s)
    89. {
    90. if(NULL == s || Stack_empty(s))
    91. {
    92. printf("出栈失败\n");
    93. return 0;
    94. }
    95. datatype e = s -> data[s -> top];
    96. printf("%d",e);
    97. s -> top--;
    98. return 1;
    99. }
    100. //获取栈顶元素
    101. template <typename T>
    102. T * stack::Stack_top(T *s)
    103. {
    104. if(NULL == s || Stack_empty(s))
    105. {
    106. printf("获取失败\n");
    107. return NULL;
    108. }
    109. return &s -> data[s -> top];
    110. }
    111. //求栈的大小
    112. template <typename T>
    113. T stack::Stack_size(T *s)
    114. {
    115. if(NULL == s)
    116. {
    117. printf("求取失败\n");
    118. return 0;
    119. }
    120. return s -> top + 1;
    121. }
    122. //销毁栈
    123. template <typename T>
    124. T stack::Stack_free(T *s)
    125. {
    126. if(NULL == s)
    127. {
    128. printf("不合法\n");
    129. return;
    130. }
    131. free(s -> data);
    132. s -> data = NULL;
    133. free(s);
    134. s = NULL;
    135. printf("释放成功\n");
    136. return ;
    137. }
    1. #include"stack.h"
    2. template <typename T>
    3. int main()
    4. {
    5. stack k;
    6. T *s = k.Stack_create();
    7. if(NULL == s)
    8. {
    9. return -1;
    10. }
    11. datatype e;
    12. //入栈
    13. cout << "请输入一位栈底元素: ";
    14. cin >> e;
    15. k.Stack_push(s,e);
    16. k.Stack_push(s,2);
    17. k.Stack_push(s,5);
    18. k.Stack_push(s,6);
    19. k.Stack_push(s,4);
    20. k.Stack_push(s,8);
    21. //遍历栈
    22. k.Stack_show(s);
    23. //出栈
    24. k.Stack_pop(s);
    25. k.Stack_show(s);
    26. //求栈顶元素
    27. k.Stack_top(s);
    28. //求栈的大小
    29. k.Stack_size(s);
    30. //清空栈且销毁
    31. k.Stack_free(s);
    32. s = NULL;
    33. return 0;
    34. }

  • 相关阅读:
    华为ensp nat转换实验
    office2019如何自定义安装位置?
    C++中queue的用法(超详细,入门必看)
    JeeSite快速开发平台 JNPF快速开发平台3.3版本 框架源码部署文档入门说明
    JAVA多线程
    单例设计模式
    如何理解UDP和TCP的区别
    2023中国计算机大会:蚂蚁集团连发两支百万级科研基金
    Arduino驱动DFPlayer Mini MP3模块
    仿英雄联盟网页HTML代码 学生网页设计与制作期末作业下载 大学生网页设计与制作成品下载 DW游戏介绍网页作业代码下载
  • 原文地址:https://blog.csdn.net/weixin_52839062/article/details/132864415