zoukankan      html  css  js  c++  java
  • 我的算法日志:数据结构之链队列

    •  链队列:用链式存储结构来存放队列中的元素,队列中每一个元素对应链表中一个链结点。具体而言,把线性链表第一个链结点定义为头结点head(链头),把链表的最后一个链结点定义为尾节点tail(链尾),并且限定只能在链头进行删除操作(出队),在链尾进行插入操作(入队),这个线性链表就构成了一个链队列。

    java代码实现

    package com.guohao.arithmetics;
    
    /**
     * 链队列
     */
    public class LinkQueue<T> {
        private QueueNode<T> head;  //头结点
        private QueueNode<T> tail;  //尾节点
        private int capacity;  //链队列的容量
        private int size;  //链队列的长度
    
        public LinkQueue(int capacity){
            this.capacity = capacity;
            size = 0;
            head = tail = null;
        }
    
        /**
         * 入队
         * @param data
         * @return
         */
        public boolean Enqueue(T data){
            if(!isFull()){
                if(isEmpty()){
                    head = tail = new QueueNode<>(data);
                }else {
                    tail.setNextNode(new QueueNode<>(data));
                    tail = tail.getNextNode();
                }
                size++;
                return true;
            }
    
            return false;
        }
    
        /**
         * 出队
         * @return
         */
        public boolean Dequeue(){
            if(!isEmpty()){
                head = head.getNextNode();
                if(head == null){
                    tail = null;
                }
                size--;
                return true;
            }
    
            return false;
        }
    
        /**
         * 取队头元素
         * @return
         */
        public T peekHeadElement(){
            return head.getData();
        }
    
        /**
         * 判断是否队满
         * @return
         */
        public boolean isFull(){
            return size==capacity;
        }
    
        /**
         * 判断是否队空
         * @return
         */
        public boolean isEmpty(){
            return size==0;
        }
    
        //getter & setter
        public QueueNode<T> getHead() {
            return head;
        }
    
        public void setHead(QueueNode<T> head) {
            this.head = head;
        }
    
        public QueueNode<T> getTail() {
            return tail;
        }
    
        public void setTail(QueueNode<T> tail) {
            this.tail = tail;
        }
    
        public int getCapacity() {
            return capacity;
        }
    
        public void setCapacity(int capacity) {
            this.capacity = capacity;
        }
    
        public int getSize() {
            return size;
        }
    
        public void setSize(int size) {
            this.size = size;
        }
    
    
        /**
         * 链表的结点
         * @param <T>
         */
        private class QueueNode<T>{
            private T data;  //数据域
            private QueueNode<T> nextNode;  //引用域
    
            public QueueNode(T data){
                this.data = data;
                nextNode = null;
            }
    
            //getter & setter
            public T getData() {
                return data;
            }
    
            public void setData(T data) {
                this.data = data;
            }
    
            public QueueNode<T> getNextNode() {
                return nextNode;
            }
    
            public void setNextNode(QueueNode<T> nextNode) {
                this.nextNode = nextNode;
            }
        }
    }
  • 相关阅读:
    新概念英语第四册16-30课(转)
    新概念英语第四册01-15课(转)
    通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建(转载)
    BASE64编码规则及C#实现
    Lucene资料汇总
    SQL Server性能监控
    Fedex接口和测试账户
    css语法
    POI操作Excel常用方法总结 (转)
    java eclipse中的代码联动提示功能
  • 原文地址:https://www.cnblogs.com/Seraph1999/p/12758511.html
Copyright © 2011-2022 走看看