持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情。
在前几篇中,我们分析设计了一种常见的数据结构——链表。
从本篇开始,将为大家介绍另一种线性表的数据结构——队列。
什么是队列(Queue)
队列(Queue) 是线性表的一种,在操作数据元素时,有自己的规则:使用队列存取数据元素时,数据元素只能从表的一端进入队列,另一端出队列。 这种存取规则我们称之为: “先进先出”原则。
队列必须具备两个指针属性:头指针和尾指针。
在队列篇中,我们将分别使用线性表的顺序存储结构和链式存储结构来实现队列,在两种构建构建方法中,我们都将实现以下几种基本方法:
public class Queue{
public void add() // 向队列中添加元素
public void pop() // 从队列中取出元素
public void length() // 获取队列中现有元素的数量
}
在完成队列的两种实现后,我们也将继续研究队列的一些常见算法。
基于顺序表的队列实现
要使用顺序表实现队列,首先我们需要依据顺序表的特点来先设计队列类。
public class queueArr{
int[] arr;
int headIndex;
int endIndex;
}
首先是队列的三个基本属性:
arr用于存储队列元素,是一个数组;headIndex是队列中的头指针,用于标记数组arr中队头元素下标,在取出元素时需要使用;endIndex是队列的尾指针,用于标记数组arr中队头元素下标,在添加元素时需要使用;
然后因为顺序存储的特点,在创建顺序链表的对象时,必须将arr属性实例化。而arr属性是一个数组,所以queueArr的构造器方法必须是接收一个int length的构造器方法。而在queueArr对象创建时,队列中一个元素都没有,所以头指针headIndex和尾指针endIndex都为-1(下标为0的位置是可以存储元素的)。
public queueArr(int length){
this.arr = new int[10];
this.headIndex = -1;
this.endIndex = -1;
}
然后我们为queueArr类添加行为:
public void add(int value)
{
endIndex++;
arr[endIndex] = value;
}
public int pop()
{
headIndex++;
return arr[headIndex];
}
public void length()
{
return endIndex - headIndex;
}
现在我们就设计好了一个基本的队列,但目前任有许多缺点,在下一篇中逐步完善这个队列类。
小结
本章主要讲解了什么是队列、队列的基本要素。
天天学习,加速成长!
希望与各位一起变得越来越强!