队列的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 ...
随机推荐
- SpringJDBC解析1-使用示例
JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组 ...
- Swift3.0语言教程使用编码创建和初始化字符串
Swift3.0语言教程使用编码创建和初始化字符串 使用编码创建和初始化字符串 创建和初始化字符串除了可以使用上文中提到的方法外,还可以使用init(coder:)方法,此方法一般不常使用,其语法形式 ...
- node body-parser
var express = require('express'); var app = express(); var bodyParser = require('body-parser'); // p ...
- STL UVA 11991 Easy Problem from Rujia Liu?
题目传送门 题意:训练指南P187 分析:用vector存id下标,可以用map,也可以离散化用数组存(发现不用离散化也可以) map #include <bits/stdc++.h> u ...
- Python基础11- 函数之自定义函数
自定义函数语法结构:def fun1([x],[y],....): 语句1 语句2 使用def语句来定义函数,在def后依次写出函数名.小括号.参数(可无).冒号,然后缩进写函数体 1.无参函数:de ...
- POJ2135 Farm Tour(最小费用最大流)
题目问的是从1到n再回到1边不重复走的最短路,本质是找1到n的两条路径不重复的尽量短的路. #include<cstdio> #include<cstring> #includ ...
- django 视图开发与url配置
可识别的视图需满足一下两个条件: 1.第一个参数的类型:HttpRequest 2.返回HttpResponse实例 在新建app的views当中写下以下内容 from django.shortcut ...
- Storm DRPC实现机制分析
DRPC是建立在Storm基本概念(Topology.Spout.Bolt.Stream等)之上的高层抽象,个人理解它的目标是在Storm 集群之上提供一种分布式的RPC框架,以便能够利用Storm快 ...
- Javascript中大括号“{}”的多义性
摘要:本文主要介绍JavaScript中大括号有四种语义作用. JS中大括号有四种语义作用 语义1,组织复合语句,这是最常见的 if( condition ) { //... }else { //.. ...
- UVa 10806 & 费用流+意识流...
题意: 一张无向图,求两条没有重复的从S到T的路径. SOL: 网络流为什么屌呢..因为网络流的容量,流量,费用能对许许多多的问题进行相应的转化,然后它就非常的屌. 对于这道题呢,不是要没有重复吗?不 ...