数据结构 - 基于数组的队列

队列Queue

  *队列也是一种线性结构

  *相比于数组,队列对应的操作是数组的子集

  *只能从一端(队尾)添加元素,从另一端(队首)取出元素

  *队列是一种先进先出的数据结构(先到先得 First In First Out)

  

  基于数组的队列实现的源码如下:

package queue;

public interface Queue<E> {
    
    public void enqueue(E e);
    
    public E dequeue();
    
    public E getFront();
    
    public int getSize();
    
    public boolean isEmpty();
}

package queue;

import array.Array;

/**
 * 基于数组实现的队列
 *
 * @author zhangtianci
 */
public class ArrayQueue<E> implements Queue<E>{

private Array<E> array;
    
    /**
     * 构造方法
     *
     * @param capacity
     * 队列的容量
     */
    public ArrayQueue(int capacity){
        array = new Array<>(capacity);
    }
    
    /**
     * 无参构方法,默认容量大小为10
     */
    public ArrayQueue(){
        array = new Array<>();
    }
    
    /**
     * 获取队列中元素的个数
     */
    @Override
    public int getSize() {
        return array.getSize();
    }
    
    /**
     * 判断队列是否为空,为空则返回true,反之false
     */
    @Override
    public boolean isEmpty() {
        return array.isEmpty();
    }
    
    /**
     * 返回队列的容量
     * @return
     */
    public int getCapacity(){
        return array.getCapacity();
    }
    
    
    /**
     * 向队尾添加一个 元素
     */
    @Override
    public void enqueue(E e) {
        array.addLast(e);
    }
    
    /**
     * 移出队首的元素并返回
     */
    @Override
    public E dequeue() {
        return array.removeFirst();
    }
    
    /**
     * 瞧一眼队首的元素
     */
    @Override
    public E getFront() {
        return array.getFirst();
    }
    
    @Override
    public String toString(){
        StringBuilder res = new StringBuilder();
        
        res.append(String.format("capacity = %d size = %d\n", getCapacity(),getSize()));
        res.append("Front: ");
        res.append(‘[‘);
        for (int i = 0; i < getSize(); i++) {
            res.append(array.get(i));
            if (i != getSize() - 1) {
                res.append(", ");
            }
            
        }
        res.append(‘]‘);
        res.append("tail");
        
        return res.toString();
    }
    
    
}

  简单的时间复杂度分析:

  * void enqueue(E e) : O(1) 均摊

  *E dequeue() : O(n)

  *E getFront() : O(1)

  *int getSize() : O(1)

  *boolean isEmpty() : O(1)

原文地址:https://www.cnblogs.com/tc971121/p/10010562.html

时间: 2024-08-03 04:28:40

数据结构 - 基于数组的队列的相关文章

数据结构 - 基于链表的队列

基于链表的队列 当我们基于链表实现队列时,需要从一端加元素,另一端取出元素,就需要引入一个新的变量tail指向链表的尾部,此时,向尾部进行添加操作时间复杂度会变为O(1),然而删除操作还是需要从head向后遍历,所以此时选择链表尾为队尾,链表头为队首. 基于链表的实现的源码如下: package queue; import linkedList.LinkedList; public class LinkedListQueue<E> implements Queue<E> {    

java 数据结构 用数组实现队列

代码内容 1 package com.structure; 2 3 import java.util.Scanner; 4 5 /** 6 * @auther::9527 7 * @Description: 数组模拟队列 8 * @program: jstl2 9 * @create: 2019-10-05 08:58 10 */ 11 public class ArrayQueueDemo { 12 public static void main(String[] args) { 13 Sca

数据结构之——基于数组的队列的C++模板实现

template<typename T> Class Myqueue { public: Myqueue(int max=50):capa(max),head(0),tail(0),data(nullptr) { data=new T[capa] } void enqueue(T &x);//入队 T front();//队首 void dequeue();//出队 int counts();//元素个数 bool empty();//判空 bool full();//判满 ~Myqu

基于数组实现Java 自定义Queue队列及应用

Java 自定义队列Queue: 队列的抽象数据类型就是一个容器,其中的对象排成一个序列,我们只能访问和取出排在最前端( Front)的对象,只能在队列的尾部( Rear)插入新对象.正是按照这一规则,才能保证最先被插入的对象首先被删除( FIFO).java本身是有自带Queue类包,为了达到学习目的已经更好深入了解Queue队列,自己动手自建java Queue类是个很好的学习开始: 基于数组的实现 ? 顺序数组 借助一个定长数组 Q 来存放对象,即可简单地实现队列.那么,为了符合 FIFO

教你如何使用Java手写一个基于数组实现的队列

一.概述 队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表.在具体应用中通常用链表或者数组来实现.队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作.队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加. 在Java中队列又可以分为两个大类,一种是阻塞队列和非阻塞队列. 1.没有实现阻塞接口: 1)实现java.util.Queue的LinkList, 2)实现java.util.Abstra

数据结构与算法—稀疏数组和队列

目录 稀疏数组和队列 1.稀疏数组 1.1 解决方法 1.2 代码实现 2. 队列 2.1 数组模拟队列 2.2 数组模拟环形队列 稀疏数组和队列 1.稀疏数组 所谓稀疏数组就是当数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用.因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以使用稀疏数组去压缩数据.OK,如果你不明白,那我们来看一个例子. ? 在一个五子棋中,有存盘和续上盘的功能 分析问题:因为该二维数组的很多默认值是 0,因此记录了很多

数据结构(2)-队列

前言: 栈和队列很相似,上一篇插曲简单比较了线性表的顺序存储结构和链式存储结构,接下来继续回到正题,数据结构之队列. 1.what is queue(队列是啥啊?) 摘自<数据结构>:队列(queue)是一种先进先出(first in first out,缩写为FIFO)的线性表,它只允许在表的一端进行插入,而在另一端删除元素.如同排队,最先到的最先离开. 同样队列也有两种存储方式:链式存储和顺序存储. 1.1先说链式队列: 队列的两种状态: 当队列为空时,头指针(front)和尾指针(rea

【转载】浅谈算法和数据结构: 一 栈和队列

作者:yangecnu(yangecnu's Blog on 博客园) 出处:http://www.cnblogs.com/yangecnu/ 最近晚上在家里看Algorithms,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开

浅谈算法和数据结构: 一 栈和队列

最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且"图码并茂",趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开算法和数据结构,本文简单介绍栈(Stack)和队列(Queue)的实现,.NET中与之相关的数据结构,典型应用等,希望能加深自己对这