Verwendung der Stack-Datenstruktur in Kotlin

Kailash Vaviya 15 Februar 2024
  1. Stapeldatenstruktur in Kotlin
  2. Verwendung von ArrayDeque() in Kotlin
Verwendung der Stack-Datenstruktur in Kotlin

Heute werden wir die Verwendung von Stack in Kotlin lernen. Wir werden auch Standardfunktionen sehen, die zum Aktualisieren und Ändern des Kotlin-Stacks verwendet werden, darunter push, pop, peek, search und isEmpty.

Wir werden uns auch eine bessere Alternative als den Stack in Kotlin ansehen.

Stapeldatenstruktur in Kotlin

Stack ist eine Datenstruktur, die einem Last-In-First-Out-Mechanismus (LIFO) folgt. Das bedeutet, dass wir damit eine Datenbank mit mehreren Objekten erstellen können.

Die Verwendung von Stack ist in Java prominent, da es Teil des Java Collections Framework ist, aber wir können einen Stack in Kotlin erstellen, indem wir die Stack-Bibliothek aus Java importieren.

Sobald die Bibliothek importiert ist, können wir einen Stapel erstellen und Objekte hinzufügen. Dieses Beispiel erstellt einen Stack namens cars und verwendet dann die Methode addAll(), um Automarkennamen hinzuzufügen.

import java.util.Stack

fun main(args: Array<String>){
    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))

    for(c in cars){
        println(c)
    }

}

Ausgang:

Verwendung der Stack-Datenstruktur in Kotlin - Ausgabe eins

Wie Sie sehen können, erstellt das obige Codebeispiel einen Stack und fügt vier Automarken hinzu. Als Nächstes werden wir uns die Verwendung einiger vordefinierter Funktionen zum Betrieb dieses Stacks ansehen.

push() Funktion im Kotlin Stack

Die Funktion push() ermöglicht das Hinzufügen eines neuen Objekts zum Stack. Das hinzugefügte Objekt wird standardmäßig an den Anfang des Stapels verschoben.

Im folgenden Beispiel verwenden wir die Funktion push() und fügen dem oben erstellten Stack ein weiteres Objekt hinzu.

import java.util.Stack

fun main(args: Array<String>){
    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
    cars.push("Lamborghini")

    for(c in cars){
        println(c)
    }

}

Ausgang:

Verwendung der Stack-Datenstruktur in Kotlin - Ausgabe zwei

pop() Funktion im Kotlin Stack

Wie der Name schon sagt, holt die Funktion pop() das letzte Element heraus, das dem Stack hinzugefügt wurde. Daher wird der Last-In-First-Out-Mechanismus zuerst entfernt, da das Element zuletzt hinzugefügt wurde.

Wenn wir also das gleiche Beispiel betrachten und das Objekt oben auf dem Stapel entfernen möchten, z. B. Lamborghini, können wir dies mit der Funktion pop() tun. Hier ist der Code für dasselbe.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
    cars.push("Lamborghini")

    for(c in cars){
        println(c)
    }

    var poppedCar = cars.pop()
    println("\nThe car brand that is popped out is: " + poppedCar)
    println("\nThe new list of car brands is: ")

    for(c in cars){
        print(c + ", ")
    }

}

Ausgang:

Verwendung der Stack-Datenstruktur in Kotlin - Ausgabe drei

peek() Funktion im Kotlin Stack

Die Funktion peek() ermöglicht das Einsehen in den Kotlin-Stack. Das bedeutet, dass wir das Objekt ganz oben im Stapel finden können, ohne es zu entfernen.

Das folgende Beispiel zeigt die Funktion peek(). Als nächstes fügen wir dem Stack die Automarke Lamborghini hinzu und drucken sie mit der Funktion peek() aus.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
    cars.push("Lamborghini")

    for(c in cars){
        println(c)
    }

    var peekCar = cars.peek()
    println("\nPeeked Car is: " + peekCar)

}

Ausgang:

Verwendung der Stack-Datenstruktur in Kotlin - Ausgabe vier

search() Funktion im Kotlin Stack

Wenn Sie ein bestimmtes Element im Stack suchen möchten, können wir die Funktion search() verwenden. Wir können auch nach einem Objekt suchen, wenn wir uns nicht sicher sind, ob es sich im Stapel befindet oder nicht.

Wenn das gesuchte Element im Stack verfügbar ist, gibt die Funktion die Nummer zurück, an der es im Stack vorhanden ist. Aber wenn das Element nicht verfügbar ist, wird es -1 zurückgeben.

Schauen wir uns dieses Beispiel an, wo wir im Stack Autos nach zwei Automarken suchen. Wir suchen nach den Elementen Ferrari und Jeep.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
    cars.push("Lamborghini")

    for(c in cars){
        println(c)
    }

    println("\nLooking for Ferrari: " + cars.search("Ferrari"))
    println("Looking for Jeep: " + cars.search("Jeep"))

}

Ausgang:

Verwendung der Stack-Datenstruktur in Kotlin - Ausgabe fünf

In der obigen Ausgabe hat die erste search()-Funktion 3 zurückgegeben, da sich der Ferrari an der 3 Position befindet. Aber die zweite search()-Funktion gibt -1 zurück, da Jeep nicht im Stack vorhanden ist.

isEmpty() Funktion im Kotlin Stack

Wenn wir versuchen, einige Funktionen auf einem leeren Stack auszuführen, wird ein Fehler ausgegeben. Wenn Sie beispielsweise die Funktion pop() auf einem leeren Stack verwenden, wird java.util.EmptyStackException ausgelöst.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf())
    var v = cars.pop()

}

Ausgang:

Verwendung der Stack-Datenstruktur in Kotlin - Ausgabe sechs

Daher ist es wichtig zu wissen, ob ein Stack leer ist. Sie können dies mit der unten angegebenen Funktion isEmpty() erfahren.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche", "Lamborghini"))

    if(cars.isEmpty()){
        println("This stack is empty")
    }
    else{
        println("This stack is not empty")
    }
}

Ausgang:

Verwendung der Stack-Datenstruktur in Kotlin - Ausgabe sieben

Verwendung von ArrayDeque() in Kotlin

Stack ist zwar eine nützliche Datenstruktur, es wird jedoch davon abgeraten, sie in Kotlin zu verwenden. Stattdessen wird empfohlen, Deque zu verwenden. Deque bedeutet eine doppelseitige Warteschlange, die sowohl als Warteschlange als auch als Stapel arbeiten kann.

Die kotlin.collections.ArrayDeque wurde in Kotlin 1.3.70 eingeführt. So können Sie Deque anstelle des Kotlin-Stacks verwenden und die gleichen Operationen wie mit einem Stack ausführen.

import java.util.ArrayDeque

fun main(args: Array<String>){

    var stackExample = ArrayDeque<String>()
    stackExample.push("Mercedes-Benz")
    stackExample.push("BMW")
    stackExample.push("Ferrari")
    stackExample.push("Porsche")
    println(stackExample)
    println("\n" + stackExample.isEmpty())

    println("\n" + stackExample.pop())
    println("\n" + stackExample)

    stackExample.push("Lamborghini")
    println("\n" + stackExample)

}

Ausgang:

Verwendung der Stack-Datenstruktur in Kotlin - Ausgabe acht

Kailash Vaviya avatar Kailash Vaviya avatar

Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.

LinkedIn