队列的实现(一)顺序队列的实现

队列:只能一端进行出栈一端进行进栈。

队首:只允许进行出栈操作,可以进行删除。

队尾:只允许进行入栈操作,可以进行插入。

队尾进,队尾出,先进先出。

所以队列的实现也有两种形式,一种是数组实现队列,一种是用链表实现队列。

首先是用数组来实现队列。

使用数组队列,因为在删除时front会越来越大,所以最后会出现一种还有空间但是却显示无空间的现象。

解决方法:

构建循环队列,算法为:

判断是否队满:(rear+1)%a.length==front  //如果相等的话则证明队列已满

rear=(rear+1)%a.length;       //创建循环

实现代码:

 1     public class Queue {
 2         private static final int defaultSize = 10;
 3         private Node[] a;
 4         private int rear;
 5         private int front;
 6         Queue(){                //默认构造方法
 7             a = new Node[10];
 8             rear = 0;
 9             front = 0;
10         }
11         Queue(int n){           //指定队列长度的构造方法
12             a = new Node[n];
13             rear = 0;
14             front = 0;
15         }
16         public boolean add(Node node){          //在队尾增加队列节点
17             if((rear+1) % a.length == front )       //检测该对列是否已经满了
18                 return false;
19             else{
20                 a[rear] = node;
21                 rear = (rear+1) % a.length;     //构建循环队列
22                 return true;
23             }
24         }
25         public Node remove(){                   //删除对首节点
26             if(rear == front)
27                 return null;
28             else{
29                 Node n = a[front];
30                 front = (front+1) % a.length;
31                 return n;
32             }
33         }
34         public boolean isEmpty(){               //检测是否为空
35             if(rear == front)
36                 return true;
37             else
38                 return false;
39         }
40         public int size(){              //返回队列长度
41             return a.length;
42         }
43     }  
时间: 2024-10-24 12:01:14

队列的实现(一)顺序队列的实现的相关文章

队列的实现:顺序队列

队列也是一种常见的线性表,它和栈相比有以下不同: 队列可以在表的两端进行操作.栈只能在栈顶进行插入和删除. 两端允许操作的类型不一样:可以进行删除的一端称为队头,这种操作也叫出队:可以进行插入的一端称为队尾,这种操作也叫入队.总的来说,队头只能出队,队尾只能入队. 队列的示意图: 模拟队列这种数据结构并不是什么难事,但会遇到一些问题,如: 假溢出 队列中明明还有空间,却因为rear已经指向最后,造成无法入队问题,这是假溢出. 解决办法是:使用链式存储,这显然可以.在顺序存储时,我们常见的解决办法

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

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

【数据结构】顺序队列的实现(c++)

头文件: #pragma once #include <iostream> #include <assert.h> using namespace std; template<class Type> class SeqQueue { public: SeqQueue(size_t sz = INIT_SZ); ~SeqQueue(); public: bool empty()const; bool full()const; void show()const; bool

_DataStructure_C_Impl:顺序队列

//_DataStructure_C_Impl:顺序队列 #include<stdio.h> #include<stdlib.h> #define QueueSize 50 typedef char DataType; typedef struct Squeue{ //顺序队列类型定义 DataType queue[QueueSize]; int front,rear; //队头指针和队尾指针 }SeqQueue; //将顺序队列初始化为空队列只需要把队头指针和队尾指针同时置为0

顺序队列的表示

#define QUEUESIZE 50//定义队列的最大容量 typedef char DataType;//定义队列元素的类型为字符类型 #include<stdio.h> typedef struct Squeue//顺序队列类型定义 { DataType queue[QUEUESIZE]; int front,rear; }SeqQueue; char x; void InitQueue(SeqQueue *SQ) //将顺序队列初始化为空队列只需要把队头指针和队尾指针同时置为0 {

顺序队列(Sequential Queue)

顺序队列(Sequential Queue) 1. 顺序队列的概念 1.1 顺序队列的定义 顺序队列是基于数组的存储表示实现的队列. 1.2 顺序队列中各元素的逻辑及存储关系 顺序队列可以采用顺序表作为其存储表示,因此,可以在顺序队列的声明中用顺序表定义它的存储空间. 顺序队列可以使用一维数组作为队列的存储空间,存放队列元素的数组的头指针为*elements,该数组的最大允许存放元素个数为maxSize,当前队列的队头位置由数组下标指针front指示,队尾位置由数组下标指针rear指示,如果队列

11. C#数据结构与算法 -- 顺序队列

理论基础: 队列(Queue)是插入操作限定在表的尾部而其它操作限定在表的头部进行的线性表.把进行插入操作的表尾称为队尾(Rear),把进行其它操作的头部称为队头(Front). 对列的操作是按照先进先出(First In First Out)或后进后出( Last In Last Out)的原则进行的,因此,队列又称为FIFO表或LILO表. 与栈一样,队列的运算是定义在逻辑结构层次上的,而运算的具体实现是建立在物理存储结构层次上的.因此,把队列的操作作为逻辑结构的一部分,每个操作的具体实现只

循环顺序队列

#include<iostream> using namespace std; const int MAXQSIZE = 5; //队列类 template<class T> struct LinkList { T * data;//指向连续的数据存储区域 int front;//头指针 指向第一个元素 int rear;//尾指针 如果队列不为空指向最后元素的下一个位置 }; //构造一个空队列 template<class T> void InitQueue(Lin

数据结构 - 顺序队列的实行(C语言)

数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避免当只有一个元素时,队头和队尾重合使得处理变得麻烦,所以引入两个指针:front指针指向队头元素,rear指针指向队尾元素的下一个位置,当front=rear时,为空队列,结构如下图所示. 假设是长度为5的数组,初始状态,空队列如下图左所示,front与 rear指针均指向下标为0的位置.然后入队a

顺序队列实现任务以此执行-任务调度系列2

顺序队列实现任务以此执行的想法: public class TaskManage { //任务队列 private BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(10); private boolean running = false; public void start() { running = true; Thread t = new Thread(new OrderedJob()); t.s