CS

[CS] 자료형/자료구조

kinggoddino 2024. 7. 26.

CS (Computer Science, 컴퓨터 과학)

 

자료형 (data type)

: 프로그래밍에서 값이 가질 수 있는 데이터의 종류. 데이터가 저장되는 형식.

자료형을 통해 컴퓨터는 해당 값이 어떻게 해석되고 처리되어야 하는지 알 수 있다.

 

 

주요 자료형 (8가지)

1. 정수형 (integer)

: 정수값을 저장함

5, -3, 100
# <class 'int'>

 

2. 실수형 (float)

: 실수값, 즉 소수점을 포함한 값

-0.5, -2.0, 3.141592
# <class 'float'>

 

3. 문자열 (string)

: 문자들의 집합. 큰따옴표나 작은따옴표로 싸인 텍스트

"hi", 'dino'
# <class 'str'>

 

4. 불리언 (boolean)

 : 논리연산에서 사용됨

True, False
# <class 'bool'>

 

5. 리스트 (list) 

: 여러 값을 순서대로 저장함. 대괄호 []로 감싸고 값은 쉼표로 구분

[1, 2, 3], ['A', 'B', 'C']
# <class 'list'>

 

6. 튜플 (tuple)

: 리스트랑 비슷하지만, 값을 변경할 수 없음. 소괄호 ()로 감싸고 값은 쉼표로 구분

(1, 2, 3), ('A', 'B', 'C')
# <class 'tuple'>

 

7. 딕셔너리 (dictionary)

: 키-밸류 쌍으로 이루어짐. 중괄호 {}로 감싸고 키와 밸류는 콜론 : 으로 구분한다. 값의 중복은 상관없지만 키는 중복되면 안됨.

{'name': 'dino', "age": "25"}
# <class 'dict'>

 

8. 집합 (set)

: 중복되지 않는 값들의 모임. 중괄호 {}로 감싸고 순서가 없음.

{1, 2, 3}, {'A', 'B', 'C'}
# <class 'set'>

 

 


 

자료구조 (data structure)

: 데이터를 효율적으로 저장하고 관리하기 위해 어떤 논리나 규칙으로 자료를 모아 놓은 구조.

 

 

1. 선형구조 (Linear structure)

  • 자료들 간에 관계가 1:1로 순차적으로 나열되어 있는 것을 의미
  • 데이터가 일직선, 연속적으로 배치되어 있는 형태
  • 각 요소는 하나의 앞 요소와 뒤 요소만을 가짐

 

1-1. 배열 (Array)

가장 일반적이다. 메모리 상에 '같은 타입의 자료'가 연속적으로 저장된다.

ex) [1, 2, 3, 4, 5] 는 메모리에 연속적으로 배치된 '정수'들의 모임

 

: 너 메모리상에 오른쪽에 있는거 가져와. 하면 가져옴. 메모리상에 물리적인 위치가 순차적임.

 

 

1-2. 리스트

메모리상에 임의의 위치에 데이터를 저장하지만 각 데이터들이 앞뒤 관계를 갖게 하는 방법

 

-> 파이썬에서는 사실 배열과 리스트를 구분해서 쓰고있지 않음. 사실상 리스트로 거의 쓰고잇다.

: 메모리상에 오른쪽 가져와. 하면 이상한거 가져옴. 논리적인 구조가 연결되어있다.

 

 

1- 3. 스택

히스토리에서 사용됨.

선입후출 방식의 자료구조, 선입후출(후입선출)이란 먼저 들어온 데이터가 나중에 처리되는 것을 의미.

스택은 히스토리 기능을 구현할때 유용하고 DFS(깊이우선탐색), 후위연산, 백트래킹, 유효성검사 등 다양한곳에 사용됨.

 

 

1- 4. 큐

선입선출 방식의 자료구조, 선입선출이란 먼저들어온 데이터를 먼저 처리하는 것을 의미

큐는 작업스케줄링 기능을 구현하거나 캐시, BFS(넓이우선탐색), 티켓 시스템 등 다양한곳에서 사용.

 

 

 

2. 비선형구조

  • 비선형 구조란 자료들 간에 관계가 1:N로 나열되어 있는 것을 의미.
  • 예를 들어 집안 가계도나 회사 구조같은 것들이 비선형 구조에 해당함.

 

2-1. 그래프

노드(요소)와 간선으로 이루어진 자료 구조를 의미

네트워크. 망형...? 노드랑 간선 존재함. SNS

위 그림처럼 그래프는 무방향 그래프, 방향 그래프, 가중치 그래프 이렇게 3가지가 있으며 방향과 가중치를 모두 갖는 그래프도 있음.

 

 

2-2. 트리

트리는 그래프의 한 종류이며 나무의 가지나 뿌리가 뻗어나는 모양과 비슷하다고 하여 붙여진 이름

트리의 특징으로는 일반 그래프와는 다르게 사이클이 존재하지 않으며 부모노드와 자식노드를 통해 구조를 표현

 

트리 (tree)

  • 이진트리: 각 부모노드의 자식노드가 최대 2개인 트리
  • 포화이진트리: 이진트리에서 모든 부모가 2개의 자식노드를 갖는 이진트리
  • 완전이진트리: 이진트리에서 거의 모든 노드가 채워져 있으며 가능한한 제일 왼쪽부터 채워져 있는 이진트리
  • 편향이진트리: 한쪽으로만 자식을 갖는 트리

노드 (node)

  • 루트노드: 제일 상단에 있는 노드
  • 부모노드: 자식노드를 갖는 노드
  • 자식노드: 부모노드를 갖는 노드
  • 자손노드: 부모노드 하위에 있는 모든 노드

싸이클이 하나라도 생기면 그래프임. 

제일 상단 노드가 Root

부모-자식노드는 상대적인 개념이다. B는 A에게는 자식노드고, E와 D에게는 부모노드임.

바로 하위 노드가 자식노드임. A의 자식노드 : B, C

자신의 밑에 있는 모든 노드는 자손노드임. F, G는 B의 자손노드는 아님.

자식을 최대 두개까지만 갖고 있는 트리.(한개가져도 되고 안가져도 됨.)

ex) [A, [B, [D, E]], [C, [F]]]

- 편향트리 : [A, [B, [C]]]. 리스트랑은 다름. 리스트는 [A, B, C]

- 포화 이진트리 : 자식이 둘이던가 아예 없던가

- 완전 이진트리 : 왼쪽에서부터 자식이 꽉차있는 트리

만약 저 그림에서 F 없어도 완전이진트리. E가 없으면 그냥이진트리.

D 아래에 노드가 생겨도 왼쪽부터 꽉차있는건 맞으니 완전이진트리.

쓰는 이유: 중위순회할때.  없는 곳은 방문 안해서 단축하려고 쓰는거

 

 


'CS' 카테고리의 다른 글

[CS] OOP 객체지향 프로그래밍  (0) 2024.07.30
[CS] 소프트웨어 설계  (0) 2024.07.29
[CS] 컴파일러/인터프리터/메모리영역  (0) 2024.07.28
[CS] 운영체제  (0) 2024.07.26
[CS] 하드웨어 - 컴퓨터구조  (1) 2024.07.26