ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자료구조] Stack
    Archive/CS & App 2021. 1. 21. 00:06
    728x90

    자료구조 02 / Stack


    정의 

    "쌓다" 개념을 가진 자료구조

    후입선출 LIFO (Last-In First-Out) 의 원리를 가짐

    예를들어 책을 쌓고 다른 곳으로 옮길때 맨위에 책부터 다시 하나씩 빼는 모습으로 볼 수 있다.

     

    장점 : 구조 단순해서 구현이 쉽다.

    단점 : 저장 공간 낭비가 발생 할 수 도 있다.

     

    주요기능

    push() : 스택에 데이터 쌓기

    pop() : 스택의 가장 마지막 데이터 빼기

    top() : 스택의 가장 마지막 데이터

    empty() : 스택이 비어있는 지 확인하는  

     

    활용

    컴퓨터 내부의 프로세스 구조의 함수 동작 방식 (return)

    - 함수 동작을 시작할때 돌아갈 시점(반환주소)을 스택에 쌓고 함수동작이 끝나는 데로 가장 마지막으로 쌓인 시점부터 돌아간다

     

    예상하지 못한 Stack 범위를 넘게 되면 "Stack Overflow" 오류가 발생한다.

     

    구현

     

    github

     

    GitHub - keeplo/SwiftTools: 자료구조 알고리즘 등 직/간접적으로 사용가능한 예제

    자료구조 알고리즘 등 직/간접적으로 사용가능한 예제. Contribute to keeplo/SwiftTools development by creating an account on GitHub.

    github.com

    연결리스트를 통한 구현

     - 노드의 할당 및 삭제, 포인터를 타고 들어가는 시간 낭비가 생긴다

     

    동적 배열을 이용한 구현

     - HEAD와 TAIL의 사용을 신경쓰지 않으면 공간의 낭비가 발생할 수 있다.

    // Swift 5
    // raywenderlich.com
    
    public struct Stack<T> {
      fileprivate var array = [T]()
    
      public var isEmpty: Bool {
        return array.isEmpty
      }
    
      public var count: Int {
        return array.count
      }
    
      // 원소가 맨 앞에 생성되면 index이동으로 O(n)의 시간복잡도 비용발생
      public mutating func push(_ element: T) {
        array.append(element)		
      }
    
      public mutating func pop() -> T? {
        return array.popLast()
      }
    
      // Stack 내부의 값이 없는 경우대비 옵셔널 처리 
      public var top: T? {		
        return array.last	
      }
    }

    추가적으로 생각해볼 내용

    면접 예상질문

    Q: 비어있는 스택 참조 하는 경우? 

    A: 스택이 비어 데이터가 없는데 데이터를 참조하는 경우 Stack Underflow 발생할 수 있음,

        스택이 수용범위까지 가득찼는데 데이터 푸시하는 경우 Stack Overflow 발생

     

    Q : 스택을 활용하는 경우?

    A : 하나의 프로세스가 동작할때 할당되어 함수를 참조 할경우 함수 코드가 마칠때 돌아갈 코드의 위치를 스택에 쌓아둠

          가장 마지막으로 실행된 함수가 돌아갈 리턴될 위치 필요

     

    Q : X 상황에서 스택과 큐중 무엇을 사용하는 게 이득?

    - 1. 웹브라우저 방문기록 (뒤로가기) -> 스택구조

    - 2. 역순 문자열 만들기 -> 스택구조

    - 3. 괄호 검사 (수식) -> 스택구조

    - 4. 메모리의 Stack영역 -> 지역변수, 매개변수 저장, 함수

    - 5. 재귀함수 무한 호출 (하노이 탑) 및 지역변수 클 경우  ->  Stack영역 Stack Overflow 

     

    Q : Array와 Linked List 형태로 스택 구현할 경우 차이점

    A : Array는 top에 바로 접근 가능하지만 Linked List는 마지막 데이터에 접근하기 위해서 모든 데이터 거쳐야함

    Reference : raywenderlich.com github explain

     

    728x90

    'Archive > CS & App' 카테고리의 다른 글

    [자료구조] Tree - Binary Tree  (0) 2021.05.03
    [자료구조] Tree - 기초개념  (0) 2021.04.30
    [자료구조] Hash Table  (0) 2021.02.11
    [자료구조] Linked List  (0) 2021.02.11
    [자료구조] Queue  (0) 2021.01.20
Designed by Tistory.