队列的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 ...
随机推荐
- Liferay 6.2 改造系列之十九:修改站点设置的表单内容
在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Input a list of sections that will b ...
- c#基础系列(转)
转:http://www.cnblogs.com/landeanfen/p/4953025.html C#基础系列——一场风花雪月的邂逅:接口和抽象类 前言:最近一个认识的朋友准备转行做编程,看他自己 ...
- 什么是智能扫描开单打印进销存POS?安卓工业手持PDA设备上的POS销售开单,现场打印打票,用扫描枪太方便了
安卓PDA版POS销售开单如果和扫描枪配合使用,和超市的POS销售一样的操作 什么是智能扫描开单打印进销存POS? 互联网特性,让它在数据统计分析.客户关系管理等方面表现出众.智能POS,不仅是一个收 ...
- canvas 3D运动球效果
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- jquery笔记(效果)
显示/隐藏: $(selector).hide(speed, function()):隐藏 $(selector).show(speed, function()):隐藏 $(selector).tog ...
- http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html
http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html
- 8VC Venture Cup 2016 - Final Round (Div. 2 Edition)
暴力 A - Orchestra import java.io.*; import java.util.*; public class Main { public static void main(S ...
- Ue4全景图制作设想
官方有个Scene Capture Cube与Cube Rander Target. 之后再想办法生成文件就好了吧
- Shell 编程基础之 If 练习
一.语法 if [ condition ]; then # 当 condition 成立时,执行内容: fi # 将 if 反过来写,fi 结束 if 之意 if [ condition ]; the ...
- Post请求
写在前面的话: XMLHttpRequest对象的open方法的第一个参数为request-type,取值可以为get或post.本篇介绍post请求. 使用post方式时,浏览器会把各表单中字段元素 ...