iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0

今天介紹的資料結構叫做LinkedList。

他跟mutablelist一樣是可以增加資料的,只是他儲存的方式有點不一樣。

陣列的資料是一格格來排的,所以可以很方便的去取得資料,但linkedlist其實是一個資料指一個資料,所以在刪除資料上會比較方便。

我們這裡介紹五個method,分別是在前面新增東西addFirst(),在後面新增東西addLast(),刪除第一項removeFirst()、刪除最後項removeLast(),跟判斷是否為空isEmpty()(我也不太清楚為什麼前面兩個是empty,這卻叫isEmpty)

當然他還是能像陣列一樣使用[]取得特定某一格,不過他取得的速度會比陣列慢喔。

具體的原理我們就先不解釋了,先記得 「功能上如果比較常取特定格,那就用陣列;如果很常增刪就用LinkedList」,真的想知道的話,上網搜尋「陣列跟LinkedList的差別」,應該會有很多資料。

import java.util.LinkedList

fun main(){
    var a = LinkedList<Int>()
    a.addFirst(12)
    a.addLast(13)
    println("${a[1]}")
    a.removeFirst()
    a.removeLast()
    if(a.isEmpty()==false){
        println("a is not empty.")
    }
}

聰明的小夥伴可能已經發現了,其實在使用addLast跟removeFirst,跟我們前面介紹的Stack功能其實是一樣的喔。


所以我們這邊順便介紹另外一個資結,Queue佇列。

他的概念跟Stack某些地方剛好反過來,Queue是「最後放的,最後拿出來」,就像是排隊一樣,所以很常被拿來做排隊相關的程式,後面的BFS也會用到。

但是Queue的宣告比較特別,他是利用一個叫做interface的概念來做的,原理是什麼我們也不討論,知道怎麼宣告就好。

import java.util.Queue
import java.util.LinkedList

fun main(){
    var q: Queue<Int> = LinkedList<Int>()

}

沒錯,我們後面其實塞的是一個LinkedList,不過透過前面的Queue可以把他變成queue來使用。(所以queue跟linkedlist都要import喔)

queue的method有這些,在後面新增項add()、在查看第一項peek()、刪除最前面remove()、判斷是否為空isEmpty()。

那我們簡單來做一個排隊程式吧。


import java.util.Queue
import java.util.LinkedList

fun main(){
    var q: Queue<Int> = LinkedList<Int>()
    q.add(1)
    q.add(2)
    q.add(3)

    while(q.isEmpty() == false){
        print("${q.peek()} ")
        q.remove()
    }
}

課堂練習

請你實作Queue相關的幾個基本操作:

  1. 在隊伍尾端加入元素。
  2. 輸出隊伍最前端的元素。
  3. 刪除隊伍最前端的元素。

輸入說明

第一行有一個N,接下來有N行,每一行一開始有一個K,代表哪一種操作:

  1. 如果k=1,請再讀入一個整數,並在隊伍尾端加入該整數。
  • 如果k=2,請輸出隊伍最前端的元素,如果當前隊伍內沒有元素,請輸出-1。
  • 如果k=3 ,請刪除隊伍最前端的元素,如果當前隊伍內沒有元素,請無視該操作。

輸入範例

13
1 1
1 2
1 3
2
3
3
2
1 4
3
2
3
3
2

輸出說明

對於每次k=2操作,輸出一個整數於一行,代表當時隊伍最前端的元素;如果當時隊伍內沒有元素,請輸出-1。

輸出範例

1
3
4
-1

題目來源

https://zerojudge.tw/ShowProblem?problemid=e447


上一篇
[Day18][資結]MutableList
下一篇
[Day20][資結]tree
系列文
櫛風風的「完全不會寫程式,從零開始的 Kotlin 教學」30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言