新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 隊列(JAVA實現)“>數據結構->隊列(JAVA實現)

        隊列(JAVA實現)“>數據結構->隊列(JAVA實現)

        作者: 時間:2016-12-01 來源:網絡 收藏
        隊列又是一種比較特殊的線性表,和棧一樣在線性表的基礎上進行了一些限制操作。就是隊列了。顧名思義,隊列就是咱們排隊買火車票一樣,排在最前面的先買到,排到后面的后買到。先進先出、后進后出。

        隊列的操作
        隊列的操作一般包括:進隊列、出隊列,訪問隊列頭元素、刪除隊列頭元素、判斷隊列是否為空、獲得隊列大小這些核心操作。
        隊列的順序實現
        和棧結構一樣隊列也有兩種實現方式相對于順序實現方式,鏈式實現相對比較簡單,只需要利用Node結構,記錄下隊列的頭Node和尾巴Node,在記錄下元素個數就可以了。實現代碼如下:
        package dateStructer.queue;

        本文引用地址:http://www.104case.com/article/201612/324247.htm

        public class MyQueue implements Queue {

        /**
        * 雙向鏈表結構
        */
        public class LinkNode {

        // 真正的數據域
        private E date;

        // 記錄上一個節點
        private LinkNode prevLinkNode;

        // 記錄下一個節點
        private LinkNode nextLinkNode;

        public LinkNode() {

        }

        public LinkNode(E date, LinkNode prevLinkNode, LinkNode nextLinkNode) {
        this.date = date;
        this.prevLinkNode = prevLinkNode;
        this.nextLinkNode = nextLinkNode;
        }
        }

        // 結點個數
        private int nodeSize;

        // 頭結點
        private LinkNode headNode;

        // 尾巴節點
        private LinkNode tailNode;

        public MyQueue(){
        headNode = null;
        tailNode = null;
        }

        /**
        * 添加元素
        */
        @Override
        public boolean add(E element) {
        if (nodeSize == 0) {
        headNode = new LinkNode(element, null, tailNode);
        }else {

        if (tailNode == null) {
        tailNode = new LinkNode(element, headNode, null);
        headNode.nextLinkNode = tailNode;
        nodeSize++;
        return true;
        }

        LinkNode linkNode = tailNode;
        tailNode = new LinkNode(element, linkNode, null);
        linkNode.nextLinkNode = tailNode;

        }
        nodeSize++;
        return true;
        }

        /**
        * 訪問隊列頭元素
        */
        @Override
        public E element() {
        return headNode.date;
        }

        /**
        * 返回頭元素,不刪除頭元素
        */
        @Override
        public E peek() {
        return headNode.date;
        }

        /**
        * 返回頭元素,刪除頭元素
        */
        @Override
        public E poll() {

        LinkNode headNodeTemp = headNode;
        E date = headNodeTemp.date;
        if(headNode.nextLinkNode == null){
        headNode.date = null;
        headNode = null;
        nodeSize--;
        return date;
        }else{
        headNode = headNode.nextLinkNode;
        if(headNode == tailNode){
        tailNode = null;
        }
        }

        nodeSize--;

        return headNodeTemp.date;
        }

        /**
        * 清除所有元素
        */
        @Override
        public void clear() {

        LinkNode linkNodeNowTemp = headNode;

        for (int i = 0; i < nodeSize; i++) {

        if (linkNodeNowTemp != tailNode && linkNodeNowTemp != headNode) {
        linkNodeNowTemp = linkNodeNowTemp.nextLinkNode;
        linkNodeNowTemp.prevLinkNode.nextLinkNode = null;
        linkNodeNowTemp.prevLinkNode.prevLinkNode = null;
        linkNodeNowTemp.prevLinkNode.date = null;
        linkNodeNowTemp.prevLinkNode = null;
        } else if (linkNodeNowTemp == tailNode) {
        linkNodeNowTemp.prevLinkNode = null;
        } else if (linkNodeNowTemp == headNode) {
        linkNodeNowTemp.nextLinkNode = null;
        }

        }
        headNode = null;
        tailNode = null;
        nodeSize = 0;

        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 巴里| 大方县| 巩义市| 区。| 溧阳市| 濉溪县| 合水县| 高雄市| 宁远县| 肃宁县| 滨州市| 新源县| 轮台县| 舟曲县| 普安县| 江口县| 阳西县| 竹溪县| 新建县| 连城县| 出国| 通海县| 沙坪坝区| 广昌县| 密山市| 桃园市| 曲松县| 蕲春县| 井陉县| 平顶山市| 嘉鱼县| 迭部县| 马鞍山市| 九台市| 襄樊市| 石家庄市| 六安市| 吴堡县| 高雄市| 嘉义县| 乌苏市|