数据结构基础(5)--队列和循环队列详解--静态方式

队列的具体应用:

所有和事件有关的操作都有队列的影子。

(例如操作系统认为先进来的先处理)

定义:

一种可是实现“先进先出”的存储结构

分类:

链式队列:用链表实现

静态队列:用数组实现

静态队列通常都必须是循环队列,为了减少

内存浪费。

循环队列 :

1、静态队列为什么必须是循环队列

如果用传统意义的数组实现队列,无论入队还是出队,rear和front指针只能+不能-;

比 F元素下标小的的数组元素下标就浪费了。

循环队列怎么用呢?

当出现这种情况时,如果仍然需要插入元素,那么f指向下一个位置,即5,r指向下一个位置即0.如图:

那么,我们在插入一个元素“国”,然后再删除中呢?

这就是所谓的循环队列。

2、    循环队列需要几个参数来确定 及其含义

需要2个参数来确定

front

rear

3、 循环队列各个参数的含义

2个参数不同场合不同的含义?

建议初学者先记住,然后慢慢体会

1)队列初始化

front和rear的值都是零,初始化时队列就是空的。

2)队列非空

front代表队列的第一个元素

rear代表了最后一个有效元素的下一个元素

3)队列空

front和rear的值相等,但是不一定是零

4、    循环队列入队伪算法讲解

需要判断r是否指向数组最后一个元素。

两步完成:

1)将值存入r所代表的位置

2)将r后移,正确写法是rear = (rear+1)%数组长度

错误写法:rear=rear+1;

5、 循环队列出队伪算法讲解

front = (front+1)% 数组长度

6、 如何判断循环队列是否为空

如果front与rear的值相等,

则队列一定为空

7、 如何判断循环队列是否已满

上图这种情况,如果再插入f,r指向同一个元素。如果这样的话就不能判断队列是空还是满。

所以为了判断循环队列是否已满,有一下两种方式:

1、多增加一个表标识的参数

2、少用一个队列中的元素(才一个,不影响的)

如果r和f紧挨着(r的下一个位置是f),则队列已满

用C语言描述:

If((r+1)%数组长度)==f

队列已满

Else

队列不满

时间: 2024-10-10 01:40:29

数据结构基础(5)--队列和循环队列详解--静态方式的相关文章

数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

数据结构6_顺序队列(循环队列)

本文实现了顺序队列,与链队列不同的是,顺序队列需要考虑一个问题, 问题情况如下, 解决办法:循环队列,当rear到分配的数组空间末尾时,转到数组头 但是当q.rear==q.front时,又如何区分一种是空队列,一种是满队列的情况呢 这里有两种方案 本次代码实现了第一种方法,同时设置了一个技术变量length,稍加改动便可实现第二个方法 代码如下: #include<iostream>using namespace std;//该顺序队列为循环队列,解决队尾指针达到最大值,队列中有空闲单元,但

二、数据结构之栈、队列、循环队列

二.数据结构之栈.队列.循环队列 顺序栈 Stack.h 结构类型,函数声明: #ifndef _STACK_H_ #define _STACK_H_ typedef int SElementType; ///顺序栈 #define STACK_INIT_SIZE 20 #define STACK_INCREMENT 10 typedef struct { SElementType * base; SElementType * top; int stackSize;///当前栈的大小 }SqSt

c语言描述-链式队列与循环队列

我真的不喜欢写代码 队列的特点 先进先出,即只能从队尾插入元素,从队头删除元素 队列的链式存储结构 #include<stdio.h> #include <stdlib.h> #include<malloc.h> typedef struct QNode { int date; struct QNode *next; }QNode ,*QueuePtr; typedef struct { int size; //记录队列长度 QueuePtr front; //头指针

队列与循环队列

复习一下队列与循环队列的实现(C语言) 1.单链队列: 1 typedef struct QNode{ //若不写typedef,在C中每次定义QNode需要在前面加上struct,而C++不必 2 QElemType data; 3 struct QNode *next; 4 }QNode,*QueuePtr; 5 6 typedef struct{ //若不写结构体名,则需要加上typedef 7 QueuePtr front; 8 QueuePtr rear; 9 }LinkQueue;

数据结构 - 简单选择排序(simple selection sort) 详解 及 代码(C++)

数据结构 - 简单选择排序(simple selection sort) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28601965 选择排序(selection sort) : 每一趟在n-i+1个记录中选取关键字最小的记录作为有序序列中第i个记录. 简单选择排序(simple selection sort) : 通过n-i次关键字之间的比较, 从n-i+1个记录中选出关键字最小的记录, 并和第i个记录交换. 选择排序需

批处理命令 For循环命令详解

批处理for命令详解FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能!看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令参数:FOR有4个参数 /d /l /r /f 他们的作用我在下面用例子解释%%变量名 :这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;IN:命令的格式,照写就是了;(相关文件或命令) :FOR要把什么东西读取然后赋值给变量,看下

C#GDI+基础(三)画刷详解

SolidBrush:一般的画刷,通常只用一种颜色去填充GDI+图形 创建一般画刷: SolidBrush sbBrush1 = new SolidBrush(Color.Green); HatchBrush:阴影画刷,有两种颜色:前景色和背景色创建阴影画刷: HatchBrush(HatchStyle,Color);//前景 HatchBrush(HatchStyle,Color,Color)://前景.背景 HatchStyle对应阴影方案列表. 名称 说明 BackwardDiagonal

【转】批处理命令 For循环命令详解!

批处理for命令详解FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能!看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令参数:FOR有4个参数 /d /l /r /f 他们的作用我在下面用例子解释%%变量名 :这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;IN:命令的格式,照写就是了;(相关文件或命令) :FOR要把什么东西读取然后赋值给变量,看下