1. 程式人生 > >演算法與資料結構(二) 基於連結串列的佇列

演算法與資料結構(二) 基於連結串列的佇列

基於連結串列的佇列

  • 一個數據的集合如果以連結串列來儲存,那麼它的容量就是無限的。
  • 實現的過程中,需要注意連結串列為空的情況下,需要對頭引用和尾引用做特殊處理。

實現程式碼

/**
 * Created by 18855127160 on 2016/4/27.
 */

import java.util.Iterator;

/**
 * 基於連結串列的佇列。
 * Created by zangdonglai on 4/26/16.
 */

public class MyLinkedQueue<T> implements Iterable{

    Node firstNode;     //  連結串列的頭結點
Node lastNode; //連結串列的尾結點 int N=0; //連結串列的長度 /** * 連結串列類,一個泛型變數item 儲存資料, * Node 指向下一個結點 */ class Node{ public T item; public Node next; } /** * Queue 遍歷器 */ private class QueueIterator implements Iterator{ Node currentNode =firstNode; @Override
public boolean hasNext() { return currentNode!=null; } @Override public Object next() { T item=currentNode.item; currentNode=currentNode.next; return item; } @Override public void remove() { } } /** * 入隊操作,需要注意連結串列為空的情況。 * 以下兩種方式都可實現入隊。 * 方式一是, 先建立一個遊離的結點(包裝入隊資料),在把這個節點連在原來的連結串列上, 在把尾結點指向 新新增的結點。 * 方式二是, 新建一個引用指向老的尾結點, 尾結點指向一個新建的遊離的結點(包裝入隊資料)。再把老尾結點和尾結點連線起來。 */
public void enQueue(T t){ /* Node node=new Node(); node.item=t; node.next=null; if(isEmpty()){ firstNode=node; lastNode=node; }else { lastNode.next=node; lastNode=node; }*/ Node oldLastNode =lastNode; lastNode =new Node(); lastNode.item =t; lastNode.next= null; if(isEmpty()) firstNode=lastNode; else oldLastNode.next=lastNode; N++; } /** * 出隊操作,注意佇列為空時,要對尾結點進行賦空。 * @return */ public T pop(){ T item=firstNode.item; firstNode=firstNode.next; if(isEmpty()) lastNode=null; N--; return item; } //佇列的大小 public int size(){ return N;} public boolean isEmpty(){ return N==0;} @Override public Iterator iterator() { return new QueueIterator(); } public static void main(String args[]){ MyLinkedQueue<String> lInkedQueue=new MyLinkedQueue<>(); lInkedQueue.enQueue("A"); lInkedQueue.enQueue("A"); lInkedQueue.enQueue("A"); lInkedQueue.enQueue("A"); lInkedQueue.enQueue("B"); lInkedQueue.enQueue("C"); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); } }

相關推薦

演算法資料結構 基於連結串列佇列

基於連結串列的佇列 一個數據的集合如果以連結串列來儲存,那麼它的容量就是無限的。 實現的過程中,需要注意連結串列為空的情況下,需要對頭引用和尾引用做特殊處理。 實現程式碼 /** * Created by 18855127160 on 2

基礎演算法資料結構字首、中綴、字尾表示式

目錄 簡介 字首表示式計算 字尾表示式計算 簡介 中綴表示式(正常的表示式) \[ (1+2)*3-4 \] 字首表示式(運算子位於運算元之前) \[ -*+1234 \] 字尾表示式(運算子位於運算元之後) \[ 12+3*4- \] 字首表示式計算 從右向左遍歷,

資料結構雙向連結串列的的分析python程式碼實現

概念        每個節點有兩個連結:一個指向前一個節點,當此節點為第一個節點時,指向空值;而另一個指向下一個節點,當此節點為最後一個節點時,指向空值。 特點:         節點包含

用 python 學習資料結構雙向連結串列

##一、相比單向連結串列,雙向連結串列的優勢 雙向連結串列的每個節點儲存了前一個節點和後一個節點的引用(指標),到達某個節點是,可以向前或者向後遍歷,提高了操作的效率。比如,insertBefore(nodeA, value) 操作,可以一步完成,而不需要先查詢

基礎演算法資料結構普通並查集

簡介 在平時的計算中,常常會遇到集合劃分的問題,例如一個集合S={a1,a2,a3,a4},按照一定規則我們可以劃分為S1={a1,a2},S2={a3},s3={a4}。但是在劃分好集合後,又該如何快速確認任意兩個元素之間的關係呢。由此引出並查集。 並查集簡介 並查集最關鍵的表現就是一個集合中的每

基礎演算法資料結構最短路徑——Dijkstra演算法

一般最短路徑演算法習慣性的分為兩種:單源最短路徑演算法和全頂點之間最短路徑。前者是計算出從一個點出發,到達所有其餘可到達頂點的距離。後者是計算出圖中所有點之間的路徑距離。 單源最短路徑 Dijkstra演算法 思維 本質上是貪心的思想,宣告一個數組dis來儲存源點到各個頂點的最短距離和一個儲存已經

演算法資料結構2:時間複雜度——以歸併排序為例

這一篇文章我們首先會介紹一下歸併排序,並以歸併排序和我們上一章所說的插入排序為例,介紹時間複雜度。此係列的所有程式碼均可在我的 [github](https://github.com/AlbertShenC/Algorithm) 上找到。 [點此](https://github.com/AlbertShen

演算法資料結構3:基本資料結構——連結串列,棧,佇列,有根樹

原本今天是想要介紹堆排序的。雖然堆排序需要用到樹,但基本上也就只需要用一用樹的概念,而且還只需要完全二叉樹,實際的實現也是用陣列的,所以原本想先把主要的排序演算法講完,只簡單的說一下樹的概念。但在寫的過程中才發現,雖然是隻用了一下樹的概念,但要是樹的概念沒講明白的話,其實不太好理解。所以決定先介紹一下基本的資

演算法資料結構4:堆排序

堆排序(HeapSort)是最常用的排序演算法之一。這種排序演算法同時具有插入排序和歸併排序的優點。與插入排序一樣,具有**空間原址性**,即**任何時候都只需要常數個額外的空間儲存臨時資料**(對此,請大家回想一下歸併排序,隨著問題規模的越大,需要的額外空間就越大,在解決大型問題時,這是不可接受的缺點)。與

資料結構單向連結串列的的分析python程式碼實現

概念        單向連結串列也叫單鏈表,是連結串列中最簡單的一種形式,它的每個節點包含兩個域,一個資訊域(元素域)和一個連結域。這個連結指向連結串列中的下一個節點,而最後一個節點的連結域則指向一個空值。 結構  程式碼實現

JavaScript 資料結構連結串列

前言 從實用性角度來說,連結串列對Javascript 來說沒有任何價值,為什麼呢? 我們先了解連結串列的特性,這個特性我們放在c++前提下來說,因為 這個特性是 根據 記憶體特性 來闡述的,Javascript 不存在記憶體操作,所有資料型別,本質性繼承Object 物件,而Ob

大話資料結構——雙向連結串列的java實現

在實現了單向連結串列後,我們在使用單向連結串列中會發現一個問題:在單向連結串列中查詢某一個結點的下一個結點的時間複雜度是O(1),但是查詢這個結點的上一個結點的時候,時間複雜度的最大值就變成了O(n),因為在查詢這個指定結點的上一個結點時又需要從頭開始遍歷。 那麼該如何解決這個困難呢?

資料結構2-- 單向連結串列

目錄 0.目錄 1.線性表 – 陣列 2.線性表 – 單向連結串列 連結串列   連結串列是一種物理儲存單元上非連續、非順序的資料結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列節點組成,這些節點不必在記憶體中相連。每個節點由資料部分Data和鏈部分

資料結構連結串列

連結串列篇 #include<stdio.h>//P77例三 int ReversDouble(LinkList L) { int n=1; LinkList pre,p,q; pre=L; p1=L->next; p=L->next; wh

資料結構4連結串列的原理和實現

上、簡單的單端連結串列 完整程式碼向下拉 連結串列是一種常用的資料結構,在插入和移除操作中有著優秀的表現,同為資料結構的陣列哭暈,其實陣列的訪問效率比連結串列高多了有木有。 我們先看一下連結串列的樣子 有同學可能要說了,這不就是我們生活中的交通工具——火車,沒錯連結串列的結構和下圖簡直就是一個模子刻出來的

資料結構演算法及其描述

一、演算法及其描述 1、什麼是演算法 資料元素之間的關係有邏輯關係和物理關係,對應的操作有邏輯結構上的操作功能和具體儲存結構上的操作實現。 把 具體儲存結構上的操作實現方法 稱為演算法。 確切地說,演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一

上海交大演算法資料結構Data Structures Learning Video檀曉紅老師資料結構公開課程

教材及習題 資料結構(C語言版)嚴蔚敏 吳偉明 清華大學出版社 資料結構題集(C語言版)  嚴蔚敏 吳偉明 清華大學出版社 課程簡介 資料結構是一門專業技術基礎的課程,課程分析,研究計算機加工資料的特徵,資料的邏輯結構,資料的儲存結構,資料涉及

2018-2019-20172309 《程式設計資料結構》實驗報告

課程:《程式設計與資料結構(下)》 班級:1723 姓名: 王志偉 學號:20172309 實驗教師:王志強老師 實驗日期:2018年11月2日 必修/選修: 必修 實驗內容: 實驗一:實現二叉樹。 1.參考教材p212,完成鏈樹LinkedBinaryTree的實現(getRight,conta

資料結構之順序佇列佇列

順序佇列 運用陣列結構來構建的線性佇列就是順序佇列。 本例實現了順序佇列的入隊、出隊、判斷隊空、初始化佇列、列印佇列等操作。 #include<iostream> using namespace std; const int m=1000; struct

淺談演算法資料結構7叉查詢樹

前文介紹了符號表的兩種實現,無序連結串列和有序陣列,無序連結串列在插入的時候具有較高的靈活性,而有序陣列在查詢時具有較高的效率,本文介紹的二叉查詢樹(Binary Search Tree,BST)這一資料結構綜合了以上兩種資料結構的優點。 二叉查詢樹具有很高的靈活性