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实现队列

队列  队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。...

Java 模拟队列(一般队列、双端队列、优先级队列)

队列: 先进先出,处理类似排队的问题,先排的,先处理,后排的等前面的处理完了,再处理 对于插入和移除操作的时间复杂度都为O(1),从后面插入,从前面移除 双向队列: 即在队列两端都可以inse...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Java 模拟双端链表,以链表实现栈和队列

双端链表: 双端链表与传统链表非常相似.只是新增了一个属性-即对最后一个链结点的引用rear 这样在链尾插入会变得非常容易,只需改变rear的next为新增的结点即可,而不需要循环搜索到最后一个节点 ...

java用LinkedList模拟栈和队列

测试package lgtStatck;public class TestDemo { public static void main(String[] args) { met...

java-集合(4)-用LinkedList来实现栈/队列-ArrayList和LinkedList比较

1:栈(Stack)也是一种特殊的线性表,是一种后进先出(LIFO)的结构。 2:栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶(top),表头称为栈底(bottom)。 package...

Java集合系列(3)--LinkedList

Java集合--LinkedList

Java集合系列02--LinkedList

LinkedList(1)LinkedList是一个继承与AbstractSequentialList的双向链表。它也可以被当做堆栈、队列和双向队列使用。 (2)LinkedList实现了List接...

LinkedList集合类实现队列

package michael.wang; import java.util.LinkedList; public class MyQueue { /**  * 定义LinkedLis...

Java LinkedList 集合

Java LinkedListLinkedList 继承自 AbstractSequentialList,实现了 Iterable 、Collection、List 接口。 内部类 ListItr 实...

Java 集合—— LinkedList

Java 集合—— LinkedList介绍  从名字上可以看出,它与 ArrayList 一样,都是 List 的具体实现子类,但它是基于链表的,链表这种数据结构相信只要学过编程或者计算机的,都应该...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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