队列的C++实现(数组)——创建-进队-出队-返回队首元素-清空队列栈-处理队列
队列的数组实现,从队尾进入,对头删除。
队列长度用标志变量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++实现(数组)——创建-进队-出队-返回队首元素-清空队列栈-处理队列的更多相关文章
- 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)
数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...
- JavaScript中的算法之美——栈、队列、表
序 最近花了比较多的时间来学习前端的知识,在这个期间也看到了很多的优秀的文章,其中Aaron可能在这个算法方面算是我的启蒙,在此衷心感谢Aaron的付出和奉献,同时自己也会坚定的走前人这种无私奉献的分 ...
- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...
- Python笔记_第二篇_面向过程_第二部分_2.路径、栈和队列、内存修改
这一部分分三个主题进行讲解,主要为后面的模块.包.第三方库的概念补充一些相关的内容. 1. 路径(Path): 相对路径和绝对路径. 举例1:我们先导入一个os库(模块)来观察一下路径 import ...
- 数据结构 1 线性表详解 链表、 栈 、 队列 结合JAVA 详解
前言 其实在学习数据结构之前,我也是从来都没了解过这门课,但是随着工作的慢慢深入,之前学习的东西实在是不够用,并且太皮毛了.太浅,只是懂得一些浅层的,我知道这个东西怎么用,但是要优化.或者是解析,就不 ...
- Python 栈、队列的实现
在python中,列表既可以作为栈使用,又可以作为队列使用. 把列表作为栈使用 栈:后进先出 stack=[1,2,3] stack.append(4) #入栈,以列表尾部为栈顶 print(stac ...
- Algorithm --> 两个栈实现队列和两个队列实现栈
两个栈实现队列和两个队列实现栈 队列(queue)先进先出的线性表:栈(stack)先进后出的线性表. 两个栈实现队列 法一思路: s1是入栈的,s2是出栈的. 入队列:直接压入s1即可: 出队列:如 ...
- list实现栈以及队列操作
1.堆栈stack操作:尾进 尾出 或者叫先进后出 //1借助LinkedList 类中的方法实现栈 public class MyStack { private LinkedList<Obje ...
- C语言实现循环队列的初始化&进队&出队&读取队头元素&判空-2
/*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/ #include<stdio.h> #include<stdlib.h> #define Queue_Si ...
随机推荐
- C++11 std::chrono库详解
所谓的详解只不过是参考www.cplusplus.com的说明整理了一下,因为没发现别人有详细讲解. chrono是一个time library, 源于boost,现在已经是C++标准.话说今年似乎又 ...
- Scau 10327 Biggest Square
时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description You are given a M*M cloth wi ...
- iOS instancetype or id ?
The id type simply says a method will return a reference to an object. It could be any object of any ...
- Python基础3- 变量与数字
1.Python变量不需要声明,其赋值操作既是变量声明和定义的过程;2.Python中每个变量在使用前都必须赋值,变量赋值后该变量才会被创建;3.Python变量是存储内存中的值,若变量赋值时内存中存 ...
- POJ3680 Intervals(最小费用最大流)
选择若干条线段使权值最大,并且点覆盖次数不超过k. 建图如下:vs到0建立容量为k费用为0的边:坐标终点到vt连接一条容量为k费用为0的边:对于每两个相邻坐标连接一条容量为INF费用为0的边:对于线段 ...
- (转)Storm UI 解释
Storm UI link:http://lbxc.iteye.com/category/221265 本文主要解释下storm ui上各项属性的含义. 1. mainpage 首页主要分为3块: a ...
- 栈式自动编码器(Stacked AutoEncoder)
起源:自动编码器 单自动编码器,充其量也就是个强化补丁版PCA,只用一次好不过瘾. 于是Bengio等人在2007年的 Greedy Layer-Wise Training of Deep Netw ...
- [Cocos2D-x For WP8]ParallaxNode视差
视差就是从有一定距离的两个点上观察同一个目标所产生的方向差异.从目标看两个点之间的夹角,叫做这两个点的视差角,两点之间的距离称作基线.只要知道视差角度和基线长度,就可以计算出目标和观测者之间的距离.游 ...
- Mac OS X中MacPorts安装和使用
安装 官网pkg安装 搜索索引中的软件port search name 安装新软件sudo port install name 卸载软件sudo port uninstall name 查看有 ...
- 通过Ajax post Json类型的数据到Controller
View function postSimpleData() { $.ajax({ type: "POST", url: "/Service/SimpleData&quo ...