ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자료구조 기초
    CS ( Computer Science )/자료구조 2022. 10. 1. 16:15

    Stack And Queue

    - 가장 기본적인 자료구조

    - Stack

        ㆍLIFO ( Last In First Out )

        ㆍ비어있는 Stack 에서 데이터를 pop할 때 발생하는 오류는 Stack Underflow

        ㆍStack의 최대 사이즈가 넘어가면 Stack Overflow

        ㆍStack의 구현방법

             ㆍArray or LinkedList 로 구현

             ㆍ두 개의 차이점 : Array는 top에 바로 접근 가능하지만

                                           Linked List는 마지막 데이터에 접근하기 위해 모든 데이터를 거쳐야함

        ㆍStack의 활용

             ㆍ웹 브라우저 방문기록, 역순 문자열 만들기, 수식의 괄호 검사, 메모리의 Stack 영역, Undo ( 실행 취소 )

             ㆍ메모리의 Stack 영역에 대한 개념 필요 : 지역 변수, 매개변수(parameter) 저장

        ㆍ왜 Stack Overflow 가 발생할까? : 재귀함수 무한호출, 너무 큰 지역 또는 매개변수

     

    - Queue

        ㆍFIFO ( First In First Out )

        ㆍFront, Rear 개념 : Front로 들어와서 Rear로 반출

        ㆍQueue의 활용

             ㆍ우선순위가 같은 작업의 예약 ( 스케줄링 기법으로도 사용)

             ㆍBFS ( 너비 우선 탐색 ) 알고리즘에 사용

     

    - 비어있는 스택 참조 경우?

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

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

     

    - 스택은 언제 활용할까?

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

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

     

    Graph & Tree & Heap

    - 3개가 비슷하면서도 다른 것 같지만 연관성이 있음

    - Graph

        ㆍNode (vertex) 와 Edge로 구성

        ㆍ주로 Tree와 차이점 및 사용 예시, 특징 그리고 탐색방법 ( BFS, DFS ) 에 대해 질문

        ㆍ간선에 Weight에 대한 개념 숙지 필요

        ㆍTree와 비교

             ㆍGraph는 방향성이 존재할 수 있고, 아닐 수도 있음 ( Tree는 일종의 Directed Graph )

             ㆍRoot node 개념이 존재하지 않음 ↔ Tree는 시작점인 Root node 존재

             ㆍ부모 자식 개념이 존재하지 않음 ↔ Tree는 부모 자식 개념 존재

        ㆍDFS ( 깊이 우선 탐색 )

             ㆍ모든 노드를 방문하고 싶을 때 사용

        ㆍBFS ( 넓이 우선 탐색 )

             ㆍ두 노드 간의 최단 경로 또는 임의의 경로 탐색

        ㆍ사용 예시 : 도로 길찾기, 지하철 노선도 등 → 어떤 탐색 방법?

     

    - Tree

        ㆍTree는 Binary Tree, Binary Heap ( Min Heep, Max Heap ), Binary Search Tree 등이 있음

        ㆍBinary Tree : 자식 노드를 2개만 가지는 Tree >> 트리 순회 알고리즘 알기

        ㆍBinary Search Tree

             ㆍ'모든 왼쪽 자식들 <= n < 모든 오른쪽 자식들' 조건을 만족하는 Tree

             ㆍ활용 예시 : 사전 탐색 // Up & Down 게임도 일종의 위의 개념을 활용

                                  ( 단어가 1000개 있는 사전에서 특정 단어를 찾으려고 하면 최대 몇 번만에 탐색이 가능할까? )

     

    - Heap

        ㆍ완전 이진 트리( Complete Binary Tree )의 일종으로 우선 순위 큐(Priority Queue)를 구현하기 위해

            만들어진 자료구조

        ㆍPriority Queue 란?

            : 앞에서 배운 Queue는 먼저 들어온 데이터가 가장 먼저 반출되는 구조라면 Priority Queue는 데이터에 우선순위를

              부여해서, 우선순위가 높은 순서대로 나가게 만든다.

        ㆍPriority Queue를 활용하는 예시 → OS 스케줄링 → OS 스케줄링 중 어떤 상황에서 사용? → SJF(Shortest Job First)

        ㆍ왜 그럼 Heap이 Priority Queue를 구현하는데 사용되는가?

            : 다른 자료구조들(Array, Linked List)은 데이터 삭제에는 O(1) 효율을 보이나 삽입의 경우에는 O(n)으로

              효율이 떨어진다. 하지만 Heap은 둘 다 O(log n)으로 구현이 가능

        ㆍHeap에 데이터가 들어가거나 삭제하는 순서에 대해서도 알고 있으면 직접 손으로 써보라고 할 때 유리

        ㆍMax Heap & Min Heap

        ㆍ자식 node의 key 값이 부모 node의 key 값보다 작거나 큰 기준으로 구현된 완전 이진 트리

     

    댓글

Designed by Tistory.