数据结构06:队列(01)

333 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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;
}

现在我们就设计好了一个基本的队列,但目前任有许多缺点,在下一篇中逐步完善这个队列类。

小结

本章主要讲解了什么是队列、队列的基本要素。

天天学习,加速成长!

希望与各位一起变得越来越强!