Kotlin 스택(Stack)

Notepad96

·

2020. 11. 30. 22:40

300x250

 

 

 

 


1. Stack(스택)

 

Stack은 후입선출(나중에 입력된 것이 먼저 출력된다)의 구조를 갖는 자료구조이다.

 

Stack

 

Stack의 구조는 그림과 같이 어느 상자 속에 물건을 넣고 빼는 행위를 하는 것과 동일하다.

 

 

이같은 상황에서 나중에 상자에 넣는 물건은 먼저 넣은 물건의 위에 위치하게 되며,

 

아래에 있는 물건을 꺼내기 위해서는 위에 있는 물건들을 먼저 꺼내야만 한다.

 

 

 

그래서 후입선출(나중에 들어온 것이 가장 먼저 나간다)의 구조인 것이다.

 

 

 

 

Kotlin에서는 구현된 Stack이 없으므로 사용하기 위해서는 직접 구현하거나 Java에 있는 Stack을 사용할 수 있다.

 

따라서 사용하기 위해서는 'import java.util.Stack' 을 해주어야 한다.

 

 

 

 


2. 코 드

환경 : Kotlin Version = 1.4.20, JVM

import java.util.Stack

fun main(args : Array<String>) {
    val stack = Stack<Int>()

    /* 삽입 */
    stack.push(4)
    stack.push(5)
    stack.push(3)
    stack.push(2)
    println("================삽 입==================")
    println("Push : ${stack.push(1)}")  // 가장 위에 삽입
    stack.add(0, 10)    // index = 0(가장 아래), 10 삽입


    println("================탐 색==================")
    println(stack)
    println("현재 Top : ${stack.peek()}")
    println("Size = ${stack.size}")
    println("Index 0 = ${stack[0]}")
    println("원소 4 나갈 순서 = ${stack.search(4)}")  // Index 아님, 위에서부터 5번 째에 있다. + 위에서부터 탐색한다.
    println("없는 원소 탐색 = ${stack.search(123)}")  // 없으면 -1


    println("=================삭 제==================")
    while(stack.isNotEmpty()) {
        println("POP : ${stack.pop()}") // Pop 하면서 원소를 반환해준다
    }

}

 

결 과

- push 함수를  통하여 삽입을 할 수 있다.

 

 

또한, add라는 함수를 사용하면 원하는 Index를 지정하여 삽입할 수도 있지만

 

이는 Stack의 구조 상 특징을 무시하는 행위이며, 굳이 이같은 작업을 해야만한다면 Stack을 사용할 필요가 없다.

 

 

 

 

- stack을 List처럼 index를 사용하여 접근할 수도 있다.

 

peek : 현재 Top, 가장 위에 있는 원소를 반환해준다.

 

size : 현재 Stack의 Size

 

search : 현재 찾을 원소가 존재한다면 원소가 나갈 순서를 반환하며, 존재하지 않는다면 -1를 반환해준다.

 

따라서 원소가 존재하는지 여부를 확인하기 위해서도 사용할 수 있다.

 

탐색은 위에서부터하기 때문에 동일한 원소가 존재한다면 가장 위에 있는 원소의 순서를 반환해준다.

 

 

 

 

- isNotEmpty 함수를 사용하면 현재 Stack이 비어있지 않다면 True를 받는다.

 

이와 반대되는 isEmpty 함수는 Stack 비어있다면 True를 반환 받는다.

 

 

 

삭제를 하기 위해서는 pop 함수를 사용하고 가장 Top에 있는 원소를 삭제하고 해당 원소를 반환해 준다.

 

 

 

300x250