博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java实现队列 && 链式存储结构
阅读量:5968 次
发布时间:2019-06-19

本文共 2826 字,大约阅读时间需要 9 分钟。

hot3.png

队列的链式存储结构

135018_e6eq_1469576.png

示例代码如下,

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
 {    //定义一个内部类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====

转载于:https://my.oschina.net/xinxingegeya/blog/314716

你可能感兴趣的文章
02go 基础知识
查看>>
vscode插件列表及配置信息
查看>>
238. Product of Array Except Self
查看>>
Understanding HBase and BigTable 译文
查看>>
在项目中遇到的一些bug
查看>>
理解这几张图,你就是js小牛了
查看>>
企业云计算指南:在安全前提下获得利益
查看>>
【每日一包0029】merge-descriptors
查看>>
以太坊和Metamask开发web应用时不再需要密码
查看>>
NEO改进协议提案2(NEP-2)
查看>>
小程序的项目结构设计
查看>>
vue 表单验证按钮事件交由父组件触发
查看>>
Python 类的属性与实例属性
查看>>
精读《Epitath 源码 - renderProps 新用法》
查看>>
Angular和SAP C4C的事件处理队列
查看>>
浅谈移动端中的视口(viewport)
查看>>
Elasticsearch 参考指南(介绍)
查看>>
使用shouldComponentUpdate进行性能优化
查看>>
CSS导航条菜单:带小三角形
查看>>
matplotlib嵌入到pyqt中
查看>>