include

  1. using namespace std;
  2. #define Maxsize 5
  3. typedef int DataType;
  4. typedef struct Queue {
  5. DataType data[Maxsize];
  6. int front; //循环 队列头指针
  7. int rear; //循环 队列尾指针
  8. }QueueList;
  9. void intit(QueueList *list) {
  10. list->front=list->rear = 0;
  11. }
  12. // 队列是否已满
  13. bool IsFull(QueueList *list) {
  14. if (!list) return false;
  15. if ((list->rear + 1) % Maxsize == list->front) {
  16. return false;
  17. }
  18. return true;
  19. }
  20. // 队列是否为空
  21. bool isEmpty(QueueList *list) {
  22. if (list->rear == list->front) {
  23. return true;
  24. }
  25. return false;
  26. }
  27. void showData(QueueList *list) {
  28. int i = list->front;
  29. while (i != list->rear)
  30. {
  31. cout << list->data[i] << "\t";
  32. i = (i + 1) % Maxsize;
  33. }
  34. }
  35. void EnterQueue(QueueList *list, DataType datas) {
  36. if (!list) return;
  37. if (!IsFull(list)) {
  38. cout << "队列已满:" << datas << "不能插入此队列" << endl;
  39. return;
  40. }
  41. list->data[list->rear] = datas; // 在队尾插入元素值
  42. list->rear = (list->rear + 1) % Maxsize; // 队尾指针后移一位
  43. }
  44. bool DeleteQueue(QueueList *list, DataType *datas) {
  45. if (!list || isEmpty(list)) {
  46. cout << "此队列为空" << endl;
  47. return false;
  48. }
  49. *datas = list->data[list->front];
  50. list->front = (list->front + 1) % Maxsize;
  51. return true;
  52. }
  53. void ClearQueues(QueueList *list) {
  54. if (!list) return;
  55. list->front = list->rear = 0;
  56. }
  57. // 获取队列元素 个数
  58. int getLengths(QueueList *list) {
  59. return (list->rear - list->front + Maxsize) % Maxsize;
  60. }
  61. int main() {
  62. QueueList *list = new QueueList;
  63. intit(list);
  64. for (int i = 0; i < 7; i++)
  65. {
  66. EnterQueue(list, i);
  67. }
  68. cout << "---------------------入队的值-----------------:" << endl;
  69. showData(list);
  70. cout << "队列元素个数:" << getLengths(list) << endl;
  71. int k = 0;
  72. int *p = &k;
  73. cout << "------------------------删除队列元素-----------------------" << endl;
  74. for (int i = 0; i < 3;i++) {
  75. DeleteQueue(list, p);
  76. cout << "出列的值:" << endl;
  77. cout<< *p <<'\t';
  78. }
  79. cout << "队列剩余的值" << endl;
  80. showData(list);
  81. cout << "队列元素个数:" << getLengths(list) << endl;
  82. cout << "--------------删除后再添加元素--------------" << endl;
  83. for (int i = 0; i < 3;i++) {
  84. EnterQueue(list, i);
  85. }
  86. cout << "入队的值:" << endl;
  87. showData(list);
  88. cout << "队列元素个数:" << getLengths(list) << endl;
  89. }

c++ 队列算法的更多相关文章

  1. 双有序队列算法——处理哈夫曼K叉树的高效算法

    算法介绍: 哈夫曼树的思路及实现众所周知,大部分是用堆来维护和实现,这种思路比较清晰,在K比较小的时候处理较快(具体例子接下来再说),而且编程复杂度不是很高,利于应用.但是,其所用的数据结构是树,是在 ...

  2. 『Python CoolBook:heapq』数据结构和算法_heapq堆队列算法&容器排序

    一.heapq堆队列算法模块 本模块实现了堆队列算法,也叫作优先级队列算法.堆队列是一棵二叉树,并且拥有这样特点,它的父节点的值小于等于任何它的子节点的值. 本模块实际上实现了一系列操作容器的方法,使 ...

  3. php队列算法[转]

    <?php/*** php队列算法* * Create On 2010-6-4* Author Been* QQ:281443751* Email:binbin1129@126.com**/cl ...

  4. 5.4 heapq--堆队列算法

    本模块实现了堆队列算法,也叫作优先级队列算法.堆队列是一棵二叉树.而且拥有这样特点,它的父节点的值小于等于不论什么它的子节点的值,假设採用数组array实现,能够把它们的关系表示为:heap[k] & ...

  5. 约瑟夫环-循环队列算法(曾微软,google笔试题)

    这也是我们聚会时常常做的游戏之一. 算法思路: 此处我使用循环链表模拟人围城一圈,每一个结点代表一个人.链表是一个有序链表,链表结点数据域是一个整型,代表人的序号.出局等同于链表删除元素,每次出局后重 ...

  6. FIFO队列算法的C程序实现

    头文件:Queue.h #ifndef _Queue_H #define _Queue_H typedef struct QueueDef_ //队列对象定义 { u16 front; //队列头部 ...

  7. ACM山东工商 栈和队列算法练习

    #include <stdio.h>#include <stdlib.h> #define SIZE   20 typedef struct hold{ char sign[S ...

  8. Michael-Scott非阻塞队列(lock-free)算法的C实现

    Michael-Scott非阻塞队列算法,即MS-queue算法,是1 9 9 6 年由Maged . M .Michael and M. L. Scott提出的,是最为经典的并发FIFO队列上的算法 ...

  9. PHP队列的实现 算法

    <?php /** * php队列算法 * * Create On 2010-6-4 * Author Been * QQ:281443751 * Email:binbin1129@126.co ...

随机推荐

  1. MaxCompute如何对SQL查询结果实现分页获取

    由于MaxCompute SQL本身不提供类似数据库的select * from table limit x offset y的分页查询逻辑.但是有很多用户希望在一定场景下能够使用获取类似数据库分页的 ...

  2. ArcGIS 发布高程服务。10.4

    ArcGIS 发布高程必须是10.21以上,我用10.4. 前端用ArcGIS For API 4.x. ARCGIS很早之前有CS版本的ArcScene,可查看高程TIF文件,但机制和BS的完全不同 ...

  3. Flask学习之九 分页

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ix-pagination 中文翻译地址:http:// ...

  4. js+canvas五子棋人机大战ai算法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. oracle函数 RPAD(c1,n[,c2])

    [功能]在字符串c1的右边用字符串c2填充,直到长度为n时为止 [参数]C1 字符串 n 追加后字符总长度 c2 追加字符串,默认为空格 [返回]字符型 [说明]如果c1长度大于n,则返回c1左边n个 ...

  6. pytorch学习笔记(十二):详解 Module 类

    Module 是 pytorch 提供的一个基类,每次我们要 搭建 自己的神经网络的时候都要继承这个类,继承这个类会使得我们 搭建网络的过程变得异常简单. 本文主要关注 Module 类的内部是怎么样 ...

  7. HDU-6668-Game 百度之星第一场B

    在多个连续的区间段中,选出连续重复度最高的区间,这样连续选出多个重复度最高的不相交区间,然后从第一个区间的左边已经右边开始,连续贪心即可,答案取最小值 #include<iostream> ...

  8. js获取当前时间戳以及前一天时间戳

    js获取当前时间戳以及前一天时间戳(毫秒) var timestamp = (new Date()).getTime(); console.log(timestamp);//打印当前时间戳 conso ...

  9. mosquitto/openssl 在RK3288上的编译以及MQTT客户端的代码示例

    1,依赖库openssl 的交叉编译 (1)配置编译器信息 setarch i386 ./config no-asm shared --cross-compile-prefix=arm-linux-a ...

  10. 用CSS画平行四边形

    <div class="jx">我是一个平行四边形</div> <style> .jx{ //定义div的高度宽度 transform:skew ...