队列的基本操作_算法设计:数据结构-队列
一、队列
1、队列的概念
队列是一种“先进先出(first in first out)”的数据结构,它是一种有序线性表的抽象数据类型、队列在计算机 领域的应用也相当的广泛,例如计算机的模拟(simulation)、CPU的作业调度(Job Scheduing)、外围设备联机并发处理系统(spooling)的应用与图遍历运算等
2、队列的基本操作
在操作队列的时候,使用数组和链表都可以,最重要的是要遵循“先进先出”的原则,常见操作如下:
二、使用数组实现队列
#define MAXSIZE 4
int queue [ MAXSIZE ] ; //队列大小
int front = -1;
int rear = -1;
1、开始时候,将front与rear都预设为-1,当front = rear时,则为空队列
2、加入dataA,front = - 1 ,rear = 0 ,每加入一个元素,将rear值加上 1
3、加入dataB、 dataC,front = -1 ,rear = 2
4、取出dataA,front = 0 ,rear = 2,每取出一个元素,将front值加1
队列操作代码;
#define MAX_SIZE 100;//队列的最大容量
int queue[MAX_SIZE ];
//空队列的时候,front = -1 ,rear = -1
int front = -1;
int rear = -1;
【1】将数据加入队尾
void enqueue(int item )
{
if ( rear == MAX_SIZE – 1 )
{
cout<
}else{
rear ++;
queue[rear] = item;
}
}
【2】删除队列前端的数据
void delqueue(int item){
if(front == rear)
{
count << “队列已空”;
}else{
front + +;
item = queue[front];
}
}
【3】删除队列前端的数据
void front_value(int * queue){
if (front == rear ){
count <
}else{
cout << queue[front];
}
}
使用数组操作队列实例代码:
/*
[示范]:实现队列数据的进队和出队
*/
#include
using namespace std;
const int MAX=20;//定义队列的大小
int main(void)
{
int front,rear,val,queue[MAX]={0};
char ch;
front=rear=-1;
while(rear
{
cout<
cin>>ch;
switch(ch)
{
case 'I':
cout<
cin>>val;
rear++;
queue[rear]=val;
break;
case 'G':
if(rear>front)
{
front++;
cout<
cout<
queue[front]=0;
}
else
{
cout<
exit(0);
}
break;
default:
cout<
break;
}
}
if(rear==MAX-1) cout<
cout<
if (front>=rear)
{
cout<
cout<
}
else
{
while (rear>front)
{
front++;
cout<
}
cout<
}
system("pause");
return 0;
}
三、使用链表实现队列操作
使用链表存储详见程序
四、队列的顺序存储
实际中要使用链式存储,因为顺序存储会出现“假溢出现象”
假设一个队列有n个元素,则顺序存储,如下图所示:
从上面可以看出入队操作就是在队尾追加一个元素,不需要任何移动,时间复杂度为O(1)。出队则不同,因为已经假设下标为0为对头,所以每次出队列操作所有元素都要向前移动,按照刚才的方式,出队列的时间复杂度为O(n),效率降低。如果我们不去限制队头位置在下标为0的位置,那么出队列的操作就不需要移动全体元素(详见后面的循环队列)
出队列如果不限制队头的话,可以使用个队头指针,如下图:
但是这样也会出现一些问题,例如按下边的情况继续入队,就会出现数组越界的错误
可事实上,还有0、1两个位置,没有使用,故这是“假溢出”,解决方案---后面的循环队列
五、循环队列
循环队列将专门设个专题来讲解,这里是些基本的概念。
要解决假溢出的现象,就是如果后面的满了,就再从头开始,也就是头尾相连的循序。循环队列它的容量是固定的,它的队头指针和队尾指针都可以随着元素入出队列而发生改变
以入队操作为例,当需要将元素入队操作可按以下步骤进行:
(1)将队尾序号tail增加1,即 tail = tail + 1
(2)若tail = n + 1,则tail = 1
其实,前两步可以使用以下表达式进行计算:
tail = ( tail + 1 ) % n
队列的基本操作_算法设计:数据结构-队列相关推荐
- 队列的基本操作_算法与数据结构(五) 栈和队列
? 工欲善其事,必先利其器. 栈和队列 - Stack And Queue 栈 如何理解栈呢? 后进者先出,先进者后出,这就是典型的 "栈" 结构. 04_栈和队列-栈结构 从栈的 ...
- dhu 4.1 队列模板简单应用算法设计:士兵队列训练
队列模板简单应用算法设计:士兵队列训练 时间限制: 1S类别: DS:队列->队列定义及应用 晚于: 2022-05-04 23:55:00后提交分数乘系数50% 截止日期: 2022-05-0 ...
- java使用队列实现栈思路_算法面试:队列实现栈的方案
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇介绍的是如何用两个队列实现栈的问题.这道题作为上一篇文章算法面试:栈实现队列 ...
- 顺序队列模板简单应用算法设计:农夫过河(这个比较难,我自己都觉得难)
文章目录 问题描述 : 输入说明 : 输出说明 : 输入范例 : 输出范例 : 思路分析 伪码实现 事故现场 第一次提交 分析与总结 如有不妥,或者疑问,请加扣扣651378276,一起商议学习进步 ...
- 队列模板简单应用算法设计:士兵队列训练
问题描述 : 目的:使用C++模板设计队列(链队列和顺序队列)的抽象数据类型(ADT).并在此基础上,使用队列ADT的基本操作,设计并实现简单应用的算法设计. 内容:(1)请参照栈的ADT模板,设计队 ...
- 考研复试 算法设计数据结构
算法的基本概念和特性 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作. 算法的五个特性: 输入: 算法具有0个或多个输入 输出: 算法至少有1个或多个输出 有 ...
- socketmq 设置队列大小_LeetCode 622:设计循环队列 Design Circular Queue
LeetCode 622:设计循环队列 Design Circular Queue 首先来看看队列这种数据结构: 队列:先入先出的数据结构 在 FIFO 数据结构中,将首先处理添加到队列中的第一个元素 ...
- 由任意二叉树的前序遍历序列和中序遍历序列求二叉树的思想方法_算法与数据结构基础 - 二叉树(Binary Tree)...
二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...
- 利用for循环调用插入方法批量插入 一条失败_算法与数据结构(1):基础部分——以插入排序为例...
本文将会以插入排序为例,介绍算法与数据结构的基础部分. 插入排序 排序可以说是整个算法中最为基础,最为重要的一部分,而插入排序正是排序算法中最简单的一种解决办法. 什么是排序问题? 输入:n个数的一个 ...
最新文章
- C++ 泛型编程 -- 函数模版
- java web 教案_《Java web程序设计》教案.pdf
- 07-XML 文件注解开发
- JVM内存模型:运行时栈帧结构
- Java IO流之普通文件流和随机读写流区别
- MySQL通过两表避免回表_mysql利用覆盖索引避免回表优化查询
- OpenCV4每日一练day5:图像读取、显示与保存
- Android:随笔—— ConstraintLayout 效率爆表的技巧
- 星型模型 3nf的区别_数据库和数据仓库的区别和联系
- Flink – submitJob
- android盒子多个DLNA冲突,说说DLNA、AirPlay 、Miracast那点事
- 提升PPT逼格的利器!只需1招,让PPT页面化腐朽为神奇~
- 新型软件生命周期模型-RUP统一过程模型 迭代增量
- 数学分析_Tom Apostol_定理7.48:黎曼可积的充要条件
- 深入理解FPGA加速原理——不是随便写个C代码去HLS一下就能加速的
- 结对编程之经验教训总结
- 图片LSB隐写(java)
- 华为手机如何设置主页面_华为手机怎么返回主界面
- (附源码)node.js中小学生中文写作网 毕业设计 250623
- CNN做时间序列预测_深度学习与时间序列预测
热门文章
- 别在我的坟前哭 脏了我轮回的路
- postgreSQL源码分析——索引的建立与使用——各种索引类型的管理和操作(2)
- 4-2-在Servlet中解决中文输出乱码问题
- linux端口混杂模式,linux端口混杂模式简介~
- python求完全平方数_【Python】【demo实验6】【练习实例】【完全平方数相关】
- 至诚学院MATLAB第四次,MATLAB 第二次实验课课堂作业(4学时)
- python super().__init__()_python——多继承使用super().__init__ 发生的状态
- c语言题目1120,九度题目1120:全排列
- 创意三维c4d形式设计节气海报学习案例
- UI设计灵感|时尚简约风格网页页面设计