Java集合LinkedList模拟队列

原创 2013年12月02日 16:39:27

前言

下午写LeetCode期间需要使用广度优先搜索算法,配合队列这种数据结构,队列数据结构的特性可以参考我之前的文章:队列的学习

在java里使用队列可以用LinkedList集合进行模拟


方法

使用LinkedList集合,并使用其中的addLast、removeFirst、isEmpty等API集体模拟队列操作

入队列

void addLast(E e); // 将元素插入此列表的结尾


出队列

E removeFirst(); // 移除并返回列表的第一个元素


判空

boolean isEmpty(); // 判断队列是否为空 


示例代码

package coreJavaOne;

import java.util.LinkedList;
import java.util.NoSuchElementException;

public class SimulateQueue {
    private LinkedList<Integer> queue = new LinkedList<Integer>();

    public boolean isEmpty() {
        return this.queue.isEmpty();
    }

    public void enQueue(int data) {
        this.queue.addLast(data);
    }

    public int deQueue() throws NoSuchElementException {
        return this.queue.removeFirst();
    }

    public static void main(String[] args) {
        SimulateQueue q = new SimulateQueue();

        q.enQueue(1);
        q.enQueue(2);
        q.enQueue(3);

        while (! q.isEmpty()) {
            int data = q.deQueue();
            System.out.println(data);
        }
    }
}


层次遍历二叉树

对应到LeetCode上的一道题目,很容易看出是广度优先搜索,需要队列的辅助

题目

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

AC代码

import java.util.ArrayList;
import java.util.LinkedList;


public class BinaryTreeLevelOrderTraversal {
    static class TreeNode {
        public int val;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(int x) {
            this.val = x;
        }
    }

    public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
        TreeNode p;
        int data;

        if (root == null) {
            return list;
        } else {
            queue.addLast(root);
        }

        while (!queue.isEmpty()) {
            ArrayList<Integer> sublist = new ArrayList<Integer>();
            LinkedList<TreeNode> subQueue = new LinkedList<TreeNode>();

            while (!queue.isEmpty()) {
                p = queue.removeFirst();
                sublist.add(p.val);

                if (p.left != null) {
                    subQueue.addLast(p.left);
                }

                if (p.right != null) {
                    subQueue.addLast(p.right);
                }
            }

            list.add(sublist);
            queue.addAll(subQueue);
        }

        return list;
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

LinkedList实现栈、队列或者双端队列分析

LinkedList实现了Deque和Queue接口,可以按照队列、栈和双端队列的方式进行操作 Queue里面的方法 Queue扩展了Collection,它的主要操作有三个(每个操作2个方...
  • huangfan322
  • huangfan322
  • 2016年10月08日 15:08
  • 861

java中LinkedList 集合类实现栈和队列

栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称它们为运算受限的线性表。   LinkedList数据结构是一种双向的链式结构,每一个对象除了数据本身...
  • lincyang
  • lincyang
  • 2010年07月17日 10:34
  • 3208

使用LinkedList模拟一个堆栈或者队列数据结构

LinkedList特有方法:addFirst(); addLast();getFirst(); getLast();获取元素但不删除元素。如果集合中没有元素会会出现NoSuchElementExce...
  • daomihuihui
  • daomihuihui
  • 2015年04月20日 22:55
  • 1369

实现一个基于LinkedList的队列数据结构,去除ArrayList集合中重复的元素,

/* 需求:实现一个基于LinkedList的队列数据结构 构造方法:               LinkedList()                        构造一个空列表。  ...
  • xiaoyangmiemie_blog
  • xiaoyangmiemie_blog
  • 2016年05月26日 11:19
  • 987

java 使用LinkedList模拟一个堆栈或者队列数据结构

java 使用LinkedList模拟一个堆栈或者队列数据结构
  • coderinchina
  • coderinchina
  • 2014年10月29日 11:35
  • 2115

LinkedList实现栈、队列或者双端队列分析

LinkedList实现了Deque和Queue接口,可以按照队列、栈和双端队列的方式进行操作 Queue里面的方法 Queue扩展了Collection,它的主要操作有三个(每个操作2个方...
  • huangfan322
  • huangfan322
  • 2016年10月08日 15:08
  • 861

LinkedList 方法大全(栈、队列)

LinkedList类是双向列表(底层使用链表结构),列表中的每个节点都包含了对前一个和后一个元素的引用。LinkedList有很多方法,通过这些方法可以很容易将其用作队列、栈等数据结构。   1...
  • liuxiao723846
  • liuxiao723846
  • 2016年01月12日 16:19
  • 1234

[疯狂Java]集合:Deque(双端队列)以及两个实现(ArrayDeque、LinkedList)、Stack(摒弃)、各线性表性能分析

1. Deque:     1) 是Queue的子接口,表示双端队列,即两端(队尾和队首)都能插入和删除的特殊队列;     2) 当然,Deque可以使用Queue的全部方法,但是自己也扩展了很多方...
  • Lirx_Tech
  • Lirx_Tech
  • 2016年05月29日 09:24
  • 4977

java中Queue队列的介绍和使用(1)之LinkedList

public interface Queueextends Collection队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根...
  • u011955252
  • u011955252
  • 2015年10月10日 11:13
  • 881

java中的集合与队列

List ArrayList   以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第...
  • u011192409
  • u011192409
  • 2015年07月11日 14:32
  • 2660
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java集合LinkedList模拟队列
举报原因:
原因补充:

(最多只允许输入30个字)