iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0

今天來介紹我們的第一個資料結構——堆疊Stack。

堆疊你可以把他想像成一堆盤子,一個個疊高,你要拿就只能從最上面去拿資料,不能從中間拿取。

所以stack會有兩個method,「放資料push」 跟 「丟掉最上面的資料pop」 跟 「查看最上面的資料peek」,那其實還有一個「是否為空empty」。

我們可以這樣宣告

import java.util.Stack

fun main(){
    var my_stack = Stack<Int>()
    my_stack.push(123)
    println("${my_stack.peek()}")
    my_stack.pop()
    if(my_stack.empty()){
        println("my stack is empty.")
    }
}

你可以注意到我們出現了一個新的語法import,他簡單來說就是幫我們導入別人寫好的程式碼,在java.util.Stack就有寫好Stack的定義,所以我們可以直接拿來用。很有趣的是,其實java.util.Stack是java的東西,但Kotlin的設計上讓我們可以直接使用java的庫。

那這個地方要注意,如果裡面已經沒資料,就不能pop跟peek喔。

我先來做一個小小的範例示範,比如說今天我要把一個陣列倒著輸出,我可以這樣寫。

import java.util.Stack

fun main(){
    var a = arrayOf<Int>(1,4,5,6,7)
    var my_stack = Stack<Int>()
    for(i in 0 ..4){
        my_stack.push(a[i])
    }
    while(my_stack.empty() != true){
        print("${my_stack.peek()} ")
        my_stack.pop()
    }
    println()
}

課堂練習~

小明是一個非常愛寫括號的人,他常常寫一堆括號。

今天他寫了一串括號,想請問你是否可以匹配。

輸入說明

輸入為一行字串,只會是(或),請判斷是否可以完整匹配。

匹配是指如數學式那樣,比如(())、()()就可以,())(或)())就不行。

輸出說明

如果可以完整匹配,輸出YES,否則輸出NO

輸入範例

()(())())()

輸出範例

NO

今天的練習題非常的難喔,是真的開始資料結構的練習了,想想看我們可以怎麼去利用stack完成這個題目。


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

尚未有邦友留言

立即登入留言