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

队列长度用标志变量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. 车销 商场 批发零售无线POS开单 智能POS开单打印 开单APP应用-云POS扫描打印一体方案

    PDA数据采集器,是一款移动手持开单设备,它通过WIFI和GPRS连接并访问电脑,从进销存软件中读取数据,实现移动开单,打破电脑开单模式. 它自带扫描器,可直接扫描条码来查找产品,且功能强大.操作简单 ...

  2. 【CLR in c#】事件

    1.事件模型建立在委托的基础上. 2,定义事件编译器会做三个动作,第一个构造具有委托类型的字段,事件发生时会通知这个列表中的委托. 第二个构造的是一个添加关注的方法+=.  第三个构造是一个注销事件关 ...

  3. 后缀数组 POJ 2217 Secretary

    题目链接 题意:求两个字符串的最长公共子串 分析:做法是构造新的串是两个串连接而成,中间用没有出现的字符隔开(因为这样才能保证S的后缀的公共前缀不会跨出一个原有串的范围),即newS = S + '$ ...

  4. 【原】iOS学习43即时通信之XMPP(2)

    本篇是 即时通信之XMPP(2) 接上次 即时通信之XMPP(1) 1. 好友列表 1> 初始化好友花名册 // 获取管理好友的单例对象 XMPPRosterCoreDataStorage *r ...

  5. 争夺 & KM思想

    题意: 给一张二分图,每个点与两个特定点又一条边相连,边权非负,让你给这个二分图每个点一个顶标,让每一条边两端顶标和大于等于这条边.求出最小顶标和. 这当然是翻译过的题目... 原题: 小Y和小P无聊 ...

  6. POJ 3061 (二分+前缀和or尺取法)

    题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ...

  7. Set集合对象比较两个元素的方法

    Set集合对象比较两个元素的方法并不是根据“equals()”方法的返回值来比较.而是用“hashCode()”方法来进行判断.只要两个元素的“hashCode()”方法的返回值相同,就认为两个元素相 ...

  8. android 第三方 图表

    1.XCL-Charts 直接利用Canvas api画出图形,各有好处. XCL-Chart尽量把图的绘制逻辑封装在类中,而把绘制相关的各 个元素开放出来,目的是在保证开发效率的同时,给程序员足够多 ...

  9. CentOS6.4 安装nmon

    安装 mkdir /usr/local/nmon cd /usr/local/nmon wget http://sourceforge.net/projects/nmon/files/nmon_lin ...

  10. ACM : HDU 2899 Strange fuction 解题报告 -二分、三分

    Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...