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;
            }
        }
    }
  • 相关阅读:
    【题解】洛谷 P3942 将军令【20201017 CSP 模拟赛】【贪心】
    ASP.NET上传文件的三种基本方法
    Android 最火的快速开发框架XUtils
    asp.net 上传文件到一般处理程序中
    Android版本:使用findViewById()用字符串/在一个循环
    android 调用系统图库查看指定路径的图片
    Android中实现日期时间选择器(DatePicker和TimePicker)
    Android自定义ListView的Item无法响应OnItemClick的解决办法
    Android开发配置,消除SDK更新时的“https://dl-ssl.google.com refused”异常
    mysql 修改密码
  • 原文地址:https://www.cnblogs.com/Seraph1999/p/12758511.html
Copyright © 2011-2022 走看看