면접준비[프론트,백,데이터,CS]/CS 정리

[ C.S 지식 정리 : 자료 구조 ] 알고리즘 공부 하기 전 필요한, 자료구조 기초 지식들.

안다미로 : Web3 & D.S 2024. 11. 16. 21:37

 

 

 

 

[ C.S 지식 정리 : 자료 구조 ] 

알고리즘 공부 하기 전 필요한, 

자료구조 기초 지식들.

 


 

∇ 알고리즘을 위한, 자료구조 기초 지식.

목  차

1. 자료구조란??
2. 자료구조 분류

 

 


 

 

Ⅰ. 자료구조란?


     - 데이터 값의 모임, 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며, 

        자료에 대한 처리를 효율적으로 수행가능하도록  자료를 구분해 표현한 것. !

 

 

      ∇ ex) 책장으로 본 자료구조 배치.

             

 

                ○ 1번  :  책장의 모든 공간을 사용 가능하지만, 

                              처음 책(자료)을 배치한 후에,

                              추후에 새로운 책(자료)을 추가할 때 비집고 넣거나, 순서를 찾아야 하는 수고로움이 생깁니다.

 

                ○ 2번  :  분야별로 책(자료)을 쉽게 찾을 순 있지만, 공간배치의 비효율이 생깁니다.

 

                ○ 3번  :  2번보다는 더 효율적으로 공간을 사용할 수 있지만, 줄을 넘기면서 배치될 때, 헷갈림이 발생 가능 !

 

 

               ☆ 책장 == "메모리"  //  책 == "데이터"

 

 


 

Ⅱ. 자료구조 분류


 

자료 구조.

   A . Primitive Data Structure ( 단순 구조 ) 

            √ '단순구조'는 프로그래밍에서 사용되는 간단한 데이터 타입입니다.

 

            √ Number, String, Boolean 등 기본적인 정보를 나타내는데 사용하고,

                   이러한 데이터 타입은 언어 자체에 내장되어 있어서 바로 사용 가능합니다.

 

                [ Ex.   Number - 6,  String - 'Go Home' ,  Boolean - true  ]

 

 

   B . Non - Primitive Data Structure ( 비단순 구조 ) 

            √ '비단순구조'는 여러개의 기본 데이터를 모아서 하나의 큰 단위로 다루는 방법입니다.

                       == 여러 종류의 재료를 사용해서 레고 블록을 만드는 것과 비슷.

 

            √ 사용자가 필요에 따라 직접 정의해서 만들 수 있음.

 

                [ Ex,   여러 정보를 담는 주소록,  학생 정보를 저장하는 데이터. ] 

 

 

 

   C . Linear Data Structure ( 선형 구조 ) 

            √  '선형구조' 는 데이터가 일렬로 나열되어 있는 형태를 의미합니다.

 

            √  마치 책장에 책을 정리하는 것처럼, 데이터들 간에 순서를 만들어서 한 방향으로 연결하는 것을 의미.

 

 

   D . Non - Linear Data Structure ( 비선형 구조 ) 

            √  '비선형구조' 는 데이터가 계층적이거나 복잡하게 연결되어 있는 형태를 의미합니다.

 

            √  마치 나무의 가지처럼 여러 갈래로 뻗어나가거나, 이리저리 얽혀있는 땅의 길처럼 보이는 것과 비슷.

                   [ Ex, 가계도 구조, 등 ]

 

   E . 시간 복잡도 & 공간 복잡도.

            √ 시간 복잡도와 공간 복잡도는 알고리즘의 성능을 평가하는 중요한 지표입니다.

 

 


   1. Arrays (배열구조)

 

          ○ 자료형을 원소로 취급해, 나열한 것! - 요소들을 일렬로 나열한 선형 구조.

          ○ 기본적으로 배열의 크기는 정해져있습니다.

          ○ 동일한 타입의 데이터들을 저장합니다.

          ○ '인덱싱'이 되어있어서 인덱스를 통해  빠르게 데이터에 접근 가능!

                   - 인덱스를 통해 접근하며, 같은 타입의 데이터를 저장 가능.

          ○ 총 갯수가 정해진 자료를 다룰 때 유용합니다. 

 

            ● 배열 목록, 힙, 해시테이블, 벡터 및 행렬과 같은 기타 데이터 구조들을 구축하기 위한 빌딩 블록으로 사용합니다!

 

            ● 삽입 정렬, 빠른 정렬, 버블 정렬 및 병합 정렬과 같은 다양한 정렬 알고리즘들에 활용됩니다.

 

 


 

   2. Linked - Lists (리스트)

          ○ 하나의 자료가 다른 자료를 가리키면서, 자료를 축적해나가는 구조.

          ○ 총 갯수가 정해져 있지 않은 자료들을 다룰 때 유용합니다.

          ○ '배열'에 비해서, 빈 공간을 낭비하지 않습니다.

          ○ 인덱스가 없으므로, 접근시 배열과 달리 한 번에 원하는 자료를 찾아가기 어렵습니다.

 

Linked - List

              ○ 각 요소는 Node이고, Node 안에는 key와 다음 노드를 가리키는 포인터(next)가 포함.

                      == 노드들이 연결되어 있는 선형 구조.

              ○ 노드 추가/삭제가 상대적으로 편리함.

              ○ 첫 번째 요소는 Head,   마지막 요소는 Tail.

 

 


 

   3. Stack ( 선형 자료구조 )

              ○ 데이터를 차곡차곡 쌓아 올리는 선형 구조.

              ○ "맨 위" 에 있는 데이터에만 접근 가능 !

              ○ 순서가 보존되는 선형 데이터 구조입니다.

              ○ 가장 마지막에 넣은 요소부터 처리하는 LIFO(Last In Fist Out) - 후입선출 구조.

 


   4. Queue( 선형 자료구조 )

              ○ 데이터를 줄을 서서 기다리는 것처럼 관리하는 선형 구조.

              ○ "맨앞" & "맨뒤"에 데이터를 추가하거나 삭제하는 구조.

              ○ 가장 먼저 입력된 요소를 처리하는 FIFO(First In Frist Out) - 선입선출 구조.

              ○ 멀티 스레딩에서 스레드를 관리시 사용.

              ○ 대기열 시스템.

 

 


 

   5. Hash Table

              ○ 해시 함수를 사용하여 변환한 값을 인덱스(index)로 삼아서,

                           키(key)와 데이터(값,value)를 저장하는 자료구조.  [ 키 - 값 ]

 

              ○ 데이터의 크기에 관계 없이, 삽입 및 검색에 매우 효율적입니다. !

                      ( 빠른 검색과 데이터 삽입을 위해 설계 )

해시 테이블 구조.

 


   6.  Graph ( 비선형 자료 구조 )

 

              ○ 노드들이 서로 연결되어 있는 비선형 구조.

              ○ 각 노드는 다른 노드와의 관계성을 가지며, 다양한 형태의 그래프가 존재합니다.

 


   7.  Tree ( 비선형 자료 구조 )

              ○ 계층적인 구조를 가지고 있는 비선형 구조 입니다.

              ○ 부모-자식 관계성을 가지는 노드들로 이루어져 있습니다.

                     [ Ex, 이진 트리, 이진 탐색 트리, AVL 트리 등 ]

 

 


   8.  Heap

              ○ 완전 이진 트리의 한 종류로,  최댓값 혹은 최솟값을 빠르게 찾을 수 있도록 구현된 자료구조 입니다.

              ○ 주로, 우선순위 큐에 사용됩니다.

 

 


 

   8.  해시 맵 ( Hash Map)

              ○ 해시 테이블의 구현 중 하나로, 키와 값을 저장하는데 사용됩니다.

 

              ○ 키를 해시 함수를 통해 인덱스로 변환하여 값에 접근합니다.