队列的数组实现,从队尾进入,对头删除。

队列长度用标志变量size,它是独立于front和rear的一个变量。size == 0,队列为空。size == capacity,满队列。

一、结点声明

 struct Node{
int Capacity;
int Front;
int Rear;
int Size;
int *Array;
};
typedef struct Node Queue;

Capacity队列容量;Front,Rear为队列首元素和尾元素的数组下标;Size为当前队列大小;Array指向整形数组的指针,存放队列元素。

二、非空判断

 int queue::isEmpty(Queue *Q)
{
return Q->Size == ; //独立于Q->Rear和Q->Front存在的一个标志
}

三、满队列判断

 int queue::isFull(Queue *Q)
{
return (Q->Size == Q->Capacity );
}

四、创建队列

 queue::Queue *queue::createQueue(int maxElements)
{
cout << "Please input the value of maxElements: " << endl;
scanf_s("%d", &maxElements);
if (maxElements < minQueueSize)
{
cout << "The size of queue is too small!" << endl;
return ;
}
else
{
Queue *Q;
Q = (Queue *)new(Queue);
if (Q == NULL)
cout << "Out of space!" << endl;
Q->Array = new int[maxElements];
if (Q->Array == NULL)
cout << "Out of space!" << endl; Q->Capacity = maxElements;
Q->Front = ;
Q->Rear = ; // Rear预初始化为1
Q->Size = ; // 空队列标志
makeEmpty(Q);
return Q;
}
}

五、清空队列

 void queue::makeEmpty(Queue *Q)
{
if (isEmpty(Q))
cout << "Donnot need to makeEmpty the queue!" << endl;
Q->Size = ; // 空队列标志,初始状态下标如下
Q->Front = ;
Q->Rear = ;  
}

六、循环队列实现

 int queue::isCycle(int value, Queue *Q)
{
if (++value == Q->Capacity) //下标从0开始,故下标为Capacity,表示循环队列的第一个元素,即下标为0
return ;
return value;         下标小于Capacity,可正常自增
}

七、进队列

 queue::Queue *queue::enQueue(Queue *Q)
{
if (isFull(Q))
cout << " Full queue! " << endl;
else
{
int x = ;
cout << "Please input the number to enQueue!" << endl;
scanf_s("%d", &x); // 取地址符
Q->Size++;
Q->Rear = isCycle(Q->Rear,Q); // 循环队列自增
Q->Array[Q->Rear] = x;
}
return Q; // 满队列则返回原队列,未满则进入队列后返回该队列
}

八、返回队首元素

 int queue::front(Queue *Q)
{
return Q->Array[Q->Front]; //只返回队首元素,不出队列
}

九、出队列

 queue::Queue *queue::deQueue(Queue *Q)
{
if (isEmpty(Q))
cout << "Empty queue! " << endl;
else
{
cout << "The front element of queue is :" << Q->Array[Q->Front] << endl;
Q->Front++;
Q->Size--;
}
return Q;
}

十、处理队列

 void queue::disposeQueue(Queue *Q)
{
while (!isEmpty(Q))
{
Q->Size = ; //循环终止条件
free(Q->Array);
free(Q);
}
}

队列的C++实现(数组)——创建-进队-出队-返回队首元素-清空队列栈-处理队列的更多相关文章

  1. 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)

    数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...

  2. JavaScript中的算法之美——栈、队列、表

    序 最近花了比较多的时间来学习前端的知识,在这个期间也看到了很多的优秀的文章,其中Aaron可能在这个算法方面算是我的启蒙,在此衷心感谢Aaron的付出和奉献,同时自己也会坚定的走前人这种无私奉献的分 ...

  3. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  4. Python笔记_第二篇_面向过程_第二部分_2.路径、栈和队列、内存修改

    这一部分分三个主题进行讲解,主要为后面的模块.包.第三方库的概念补充一些相关的内容. 1. 路径(Path): 相对路径和绝对路径. 举例1:我们先导入一个os库(模块)来观察一下路径 import ...

  5. 数据结构 1 线性表详解 链表、 栈 、 队列 结合JAVA 详解

    前言 其实在学习数据结构之前,我也是从来都没了解过这门课,但是随着工作的慢慢深入,之前学习的东西实在是不够用,并且太皮毛了.太浅,只是懂得一些浅层的,我知道这个东西怎么用,但是要优化.或者是解析,就不 ...

  6. Python 栈、队列的实现

    在python中,列表既可以作为栈使用,又可以作为队列使用. 把列表作为栈使用 栈:后进先出 stack=[1,2,3] stack.append(4) #入栈,以列表尾部为栈顶 print(stac ...

  7. Algorithm --> 两个栈实现队列和两个队列实现栈

    两个栈实现队列和两个队列实现栈 队列(queue)先进先出的线性表:栈(stack)先进后出的线性表. 两个栈实现队列 法一思路: s1是入栈的,s2是出栈的. 入队列:直接压入s1即可: 出队列:如 ...

  8. list实现栈以及队列操作

    1.堆栈stack操作:尾进 尾出 或者叫先进后出 //1借助LinkedList 类中的方法实现栈 public class MyStack { private LinkedList<Obje ...

  9. C语言实现循环队列的初始化&进队&出队&读取队头元素&判空-2

    /*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/ #include<stdio.h> #include<stdlib.h> #define Queue_Si ...

随机推荐

  1. mysql数据库备份与还原命令

    还原一个数据库:mysql -h localhost -u root -p123456 www 备份一个数据库:mysqldump -h localhost -u root -p123456 www ...

  2. 阿里云Linux系统挂载数据盘

    Linux云服务器数据盘未做分区和格式化,我们可以根据以下步骤进行分区以及格式化操作. 目录 [隐藏]  1 查看数据盘 2 对数据盘进行分区 3 查看新的分区 4 格式化新分区 5 添加分区信息 6 ...

  3. PHP 下载简历

    下载简历:先生成html模版,然后在下载转化为word格式: 获取数据方法: 先获取数据,然后开启缓存,写入数据,关闭缓存:然后下载成word: /** * 下载简历--简单 * @author La ...

  4. 解决$.getJSON在IE浏览器下出现数据缓存,第一次访问某个后台路径之后,再次访问该路径不再走后台的方法。

    最近写代码的时候遇到一个小问题,我用的是火狐,项目里测试人员用的是IE,当用jquery的getjson函数从后台获取数据的时候,IE浏览器会自动设置缓存,如果此时你对数据进行修改的时候刷新页面,IE ...

  5. PHP历程(PHP与MYSQL数据库之间连接、创建和关闭)

    <?php define('WXLEVELS_DB_HOST','127.0.0.1'); //服务器 define('WXLEVELS_DB_USER','root'); //数据库用户名 d ...

  6. 百度地图API使用记录

    用户数据图层的总教程: 就是把用户数据存到LBS云里面,应用从云里面读数据 http://developer.baidu.com/map/jsdevelop-9.htm 上传数据的地方: http:/ ...

  7. 基于Theano的DL的开源小框架:Dragon

    Link:https://github.com/neopenx/Dragon 起因 最近看了Hinton的Dropout,发现原来的乱代码只能在Softmax层前面加Dropout.索性把整个Thea ...

  8. CentOS 6.4 查看每个进程的网络流量

    所需工具nethogs 安装:yum install -y nethogs 使用:nethogs eth0

  9. Codeforces Round #196 (Div. 2) B. Routine Problem

    screen 尺寸为a:b video 尺寸为 c:d 如果a == c 则 面积比为 cd/ab=ad/cb (ad < cb) 如果b == d 则 面积比为 cd/ab=cb/ad  (c ...

  10. [杂谈] There is a Doctor in My Computer.

    (p.s. 附带手写翻译,有错轻喷) Admin: Hi.             (嗨) Doctor: How do you do?  What brings you to see me?     ...