include

     using namespace std;
#define Maxsize 5
typedef int DataType; typedef struct Queue {
DataType data[Maxsize];
int front; //循环 队列头指针
int rear; //循环 队列尾指针
}QueueList; void intit(QueueList *list) {
list->front=list->rear = 0;
}
// 队列是否已满
bool IsFull(QueueList *list) {
if (!list) return false;
if ((list->rear + 1) % Maxsize == list->front) {
return false;
}
return true;
}
// 队列是否为空
bool isEmpty(QueueList *list) {
if (list->rear == list->front) {
return true;
}
return false;
}
void showData(QueueList *list) {
int i = list->front;
while (i != list->rear)
{
cout << list->data[i] << "\t";
i = (i + 1) % Maxsize;
}
}
void EnterQueue(QueueList *list, DataType datas) {
if (!list) return;
if (!IsFull(list)) {
cout << "队列已满:" << datas << "不能插入此队列" << endl;
return;
}
list->data[list->rear] = datas; // 在队尾插入元素值
list->rear = (list->rear + 1) % Maxsize; // 队尾指针后移一位
}
bool DeleteQueue(QueueList *list, DataType *datas) {
if (!list || isEmpty(list)) {
cout << "此队列为空" << endl;
return false;
}
*datas = list->data[list->front];
list->front = (list->front + 1) % Maxsize;
return true;
}
void ClearQueues(QueueList *list) {
if (!list) return;
list->front = list->rear = 0;
}
// 获取队列元素 个数
int getLengths(QueueList *list) {
return (list->rear - list->front + Maxsize) % Maxsize;
}
int main() {
QueueList *list = new QueueList;
intit(list);
for (int i = 0; i < 7; i++)
{
EnterQueue(list, i);
}
cout << "---------------------入队的值-----------------:" << endl;
showData(list);
cout << "队列元素个数:" << getLengths(list) << endl;
int k = 0;
int *p = &k;
cout << "------------------------删除队列元素-----------------------" << endl;
for (int i = 0; i < 3;i++) {
DeleteQueue(list, p);
cout << "出列的值:" << endl;
cout<< *p <<'\t';
}
cout << "队列剩余的值" << endl;
showData(list);
cout << "队列元素个数:" << getLengths(list) << endl;
cout << "--------------删除后再添加元素--------------" << endl;
for (int i = 0; i < 3;i++) {
EnterQueue(list, i);
}
cout << "入队的值:" << endl;
showData(list);
cout << "队列元素个数:" << getLengths(list) << endl;
}

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. python 利用抛出异常并处理的优点

  2. 如何编写go代码

    go是一种静态编译型的语言,它的编译速度非常快. go的官方编译器称为gc,包括编译工具5g,6g和8g,连接工具5l,6l和8l.其中的数字表示处理器的架构.我们不必关心如何挑选这些工具,因为go提 ...

  3. 【Linux】根目录命名的意义

    1./bin :获得最小的系统可操作性所需要的命令2./boot :内核和加载内核所需的文件3./dev :终端.磁盘.调制解调器等的设备项4./etc :关键的启动文件和配置文件5./home :用 ...

  4. hdu 6201 【树形dp||SPFA最长路】

    http://acm.hdu.edu.cn/showproblem.php?pid=6201 n个城市都在卖一种书,该书的价格在i城市为cost[i],商人打算从某个城市出发到另一个城市结束,途中可以 ...

  5. UVa 10502【dp】

    uva 10502 题意:给定01矩阵,求有多少个由1构成的矩阵.1本事也算一个矩阵. 到最后还是想不出来..... 每次枚举两行,从第i行到第j行,k枚举矩阵的宽(column).这样就相当于每次看 ...

  6. python 数据集变量的数据类型总结

  7. @codeforces - 1205D@ Almost All

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n 个点的无向树. 请在每条边上写上权值,使得对于每一 ...

  8. Shell 基本运算符 1

    Shell 和其他编程语言一样,支持多种运算符,包括: 算术运算符 关系运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr ...

  9. laravel 5.6接入微信第三方授权登陆的主要步骤

    https://yq.aliyun.com/articles/590435 摘要: 这方面,php已很成熟了, 综合下面这个链接,基本上调试一下就可以搞定了. 这方面,php已很成熟了, 综合下面这个 ...

  10. Install Openjdk11 to Ubuntu 18.04 LTS

      Ubuntu 18.04 LTS系统上通过sudo apt install openjdk-11-*命令安装的jdk11版本依然是jdk10,怎么样才能安装openjdk 11呢,今天,我们就来完 ...