文档章节

Java实现队列 && 链式存储结构

秋风醉了
 秋风醉了
发布于 2014/09/17 13:51
字数 457
阅读 818
收藏 8

队列的链式存储结构

示例代码如下,

package hash;

/**
 * Created with IntelliJ IDEA.
 * User: ASUS
 * Date: 14-9-17
 * Time: 上午11:58
 * To change this template use File | Settings | File Templates.
 */
public class CustomLinkQueue<E> {
    //定义一个内部类Node,Node实例代表链队列的节点。
    private class Node {
        //保存节点的数据
        private E data;
        //指向下个节点的引用
        private Node next;

        //无参数的构造器
        public Node() {
        }

        //初始化节点的数据域
        private Node(E data) {
            this.data = data;
        }

        //初始化全部属性的构造器
        public Node(E data, Node next) {
            this.data = data;
            this.next = next;
        }
    }

    private Node front;  //头指针指向头结点
    private Node rear;   //尾节点
    private int count;   //该队列元素的数量


    /**
     * 初始化队列
     * 此时队列为空
     */
    public CustomLinkQueue() {
        Node p = new Node();
        p.data = null;
        p.next = null;
        front = rear = p;
    }

    /**
     * 在队列的后端插入节点
     *
     * @param item
     */
    public void enqueue(E item) {
        Node newNode = new Node();
        newNode.data = item;
        newNode.next = null;      //入队的节点没有后继节点
        this.rear.next = newNode; //让原来的尾节点的后继节点指向新节点
        this.rear = newNode;      //rear指向最后一个节点
        count++;
    }


    /**
     * 出队
     * 在队列的前端删除节点
     *
     * @return
     */
    public E dequeue() throws Exception {
        if (isEmpty()) {
            throw new Exception("队列为空");
        } else {
            E obj;
            Node p = this.front.next;  //指向队头的第一个节点
            obj = p.data;
            this.front.next = p.next;

            if (rear == p) {
                rear = front;
            }
            count--;
            return obj;
        }
    }


    /**
     * @return
     */
    public int size() {
        return count;
    }

    /**
     * 遍历算法
     * 移动front指针,直到front指针追上rear指针
     */
    public void traverse() {
        for (Node current = front.next; current != null; current = current.next) {
            System.out.println(current.data);
        }
    }

    /**
     * 判断队列为空的条件是front == rear
     *
     * @return
     */
    public boolean isEmpty() {
        return front == rear;
    }


    public static void main(String args[]) throws Exception {
        CustomLinkQueue linkQueue = new CustomLinkQueue();

        for (int i = 0; i < 5; i++) {  //添加5个元素
            linkQueue.enqueue("lyx" + i);
        }

        System.out.println(linkQueue.size());
        System.out.println("===========traverse===========");
        linkQueue.traverse();
        System.out.println("==============================");
        linkQueue.dequeue();
        linkQueue.dequeue();
        System.out.println("===========traverse===========");
        linkQueue.traverse();
        System.out.println("==============================");
        System.out.println(linkQueue.size());
    }
}

====EN====

© 著作权归作者所有

秋风醉了
粉丝 252
博文 532
码字总数 405690
作品 0
朝阳
程序员
私信 提问
Java并发编程利用 Condition 实现阻塞队列

什么是阻塞队列 BlockingQueue 队列是一种数据结构,它的特点是先进先出(First In First Out),它有两个基本操作:在队列尾部加入一个元素,从队列头部移除一个元素。队列在多线程应用中,...

行走在旅途中
2017/11/07
90
0
java数组、集合和数据结构知识*

一、数据结构知识。数据结构分为逻辑结构和物理结构,下面是百度百科的数据结构知识。 数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关...

cjun1990
2015/06/27
71
0
Java实现单链表_使用链式存储结构

Java实现单链表_使用链式存储结构 单链表的示意图:http://my.oschina.net/xinxingegeya/blog/261287 贴代码,部分代码参考:http://blog.csdn.net/zhangerqing/article/details/8796518 在J...

秋风醉了
2014/09/15
104
0
再谈js对象数据结构底层实现原理-object array map set

如果有java基础的同学,可以回顾下《再谈Java数据结构—分析底层实现与应用注意事项》:java把内存分两种:一种是栈内存,另一种是堆内存。基本类型(即int,short,long,byte,float,double,bo...

zhoulujun
05/17
130
0
《数据结构与算法之美》——队列

什么是队列 队列是一种线性表数据结构,和栈类似 它操作受限,表现为先进先出,后进后出 它有头指针和尾指针之分,删除元素从head操作,添加元素从tail操作 基于以上特点,我们看到队列是这样...

Jackie_Zheng
2018/12/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

反射

类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化来实现对这个类进行初始化 加载: 将class文件读入内存, 并为之创建一个Class对象; 任何类...

凹凸凸
48分钟前
4
0
jQuery与Ajax的应用

jQuery与Ajax的应用 Ajax Ajax 即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,异步交互,传输的数据为XML.是一种在无需重新加载...

cjy_lean
59分钟前
6
0
查漏补缺,JVM系列:(JVM内存组成及分配)

java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”...

小刀爱编程
今天
5
0
Java实现哈希表

Java实现哈希表 基本概念 哈希表:Hash Table,也称为散列表。在待存放的数据中定义一个关键字k,通过一个映射关系f,将k映射到一个地址中,这个地址称为散列地址。之后查找该记录时,不用再...

盒饭加鸡腿
今天
5
0
透彻讲解:并发编程的优缺点

一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发?凡事总有好坏两面,之间的trade-off是什么...

李红欧巴
今天
32
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部