Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 소프티어
- 오블완
- Lv. 3
- dfs
- LEVEL 2
- 자바스크립트
- group by
- 티스토리챌린지
- 너비 우선 탐색
- SQL 고득점 KIT
- Python
- select
- Lv. 1
- level 3
- 프로그래머스
- softeer
- 깊이 우선 탐색
- join
- Lv. 2
- 파이썬
- Lv. 0
- Dynamic Programming
- DP
- Java
- programmers
- javascript
- C언어
- bfs
- 동적계획법
- SQL
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
[요약] 자료 구조 - 1 [정의, 분류, 표현, 알고리즘, 배열, 포인터, 구조체, 재귀] 본문
※ 주의 ※
이 블로그는 어디까지나 CS관련 지식을 정리하는 것이 목적입니다. 제가 이해한 내용이 잘못 된 것 같다면 댓글로 남겨주세요. 여러분의 관심이 저의 지식 함양에 도움이 됩니다.
>> 자료구조의 개요와 정의
- 다양한 자료를 "표현", "저장", "처리", "사용" 할 수 있도록 하는 것
>> 자료구조의 분류
- 데이터 타입 : 정수, 실수, 문자, 문자열 등 => 단순구조
- 자료와 자료간의 관계
- 1:1 = 선형구조
- 1:다, 다:다 = 비선형구조
- 파일구조
>> 수치로 자료 표현하기
- 10진수를 표현하는 방법
- 존(Zone): 각 자릿수를 나타내기 위해 각 숫자 앞에 4비트의 존 필드를 추가하여 숫자와 문자를 구별
- 팩(Packed): 두 자리의 10진수를 하나의 바이트로 압축하여 표현하며, 마지막 바이트의 하위 4비트는 사인 비트를 포함
- 2진수 정수를 표현하는 방법
- 부호와 절대값(Sign-Magnitude): 가장 왼쪽 비트를 부호 비트로 사용하여 양수(0) 또는 음수(1)를 나타내고, 나머지 비트는 숫자의 절대값을 나타냄
- 1의 보수형식(Ones' Complement): 음수를 나타낼 때, 해당 숫자의 모든 비트를 반전(0을 1로, 1을 0으로)하여 표현
- 2의 보수 형식(Two's Complement): 음수를 나타낼 때, 해당 숫자의 모든 비트를 반전하고 1을 더하여 표현하며, 이 형식은 덧셈 연산이 간편함
- 2진수 정수에서 음수를 표현하는 방법에는 부호와 절대값, 1의 보수, 2의 보수가 있지만, 현재 컴퓨터에서는 연산이 간편하고 일관성 있는 2의 보수 방식을 사용
>> 문자 자료 표현하기
- 2진수 조합 => 2진수 코드 => BCD 코드, EBCDIC 코드, ASCII 코드, 유니코드
>> 논리 자료 표현하기
- 참과 거짓, True and False, 1 && 0
- 1비트로 표현 가능
- 일반적으로 1바이트 또는 1워드를 사용
- 1워드 : 8비트, 16비트, 32비트 등
>> 포인터 자료 표현하기
- 메모리 주소
- 자료를 저장하고 있는 변수의 주소 또는 메모리 주소를 저장함
- 복잡한 자료구조 연산에 좋음
>> 문자열 자료 표현하기
- 문자 자료는 한 글자, 문자열 자료는 문자 그룹이 하나의 자료
- 부분 문자열을 표현하는 세 가지 방법
- 구분자 사용: 부분 문자열 사이에 구분자를 넣어 저장
- 고정 길이: 가장 긴 문자열의 길이에 맞춰 고정된 길이로 저장
- 포인터 사용: 부분 문자열을 연속적으로 저장하고 각 부분 문자열에 대한 포인터를 사용
>> 추상 자료형
- 자료와 연산자의 특성을 추상화
- 추상화 = 무엇인지를 정의
- 구체화 = 어떻게할 것인지를 표현
>> 알고리즘
- 문제를 해결하는 방법을 기술해 놓은 명세서
- 조건
- 입력(Input) : 문재해결에 필요한 자료가 외부에서 입력받아 제공될 수 있어야 한다.
- 출력(Output) : 하나 이상의 결과를 출력해야 한다.
- 명확성(Definiteness) : 내용과 순서를 나타내는 명령어들이 명확하게 명세되어야 한다.
- 유한성(Finiteness) : 알고리즘이 끝나면 종료가 되어야 한다.
- 효과성(Effectiveness) : 알고리즘의 모든 명령어들이 명확하고 이해 가능하며 실제로 실행할 수 있어야 한다.
>> 알고리즘 성능분석하기
- 시간 복잡도 : 종료되기까지의 총 시간 = 컴파일 시간 + 실행 시간
- 컴파일 시간은 거의 고정적임
- 컴퓨터 성능에 따라 실행 시간은 달라질 수 있음
- 그래서 명령문의 실행 빈도수를 계산
- 빅-오 표기 => O(n) 등
- 빅오 표기법은 알고리즘의 최악의 경우 수행 시간을 나타내어 최대 시간을 평가하는 데 사용됨
>> 1차원 배열
- 같은 자료형의 자료들을 연속으로 메모리에 저장한 그룹
- 인덱스는 요소를 구별하기 위해 사용되며 일반적으 0부터 시작
- 선언 : 자료형 배열이름[개수];
>> 문자로된 배열
- 문자를 나열한 것으로, " " 안에 문자열 값을 넣는다.
- 문자열은 연속적으로 저장되므로 char형 배열을 사용
- 초기화는 문자열 그대로 지정하거나 문자 리스트를 사용
>> 다차원 배열
- 2차원 이상의 배열
- 선언
- 자료형 배열이름[행][열];
- int arr[10][10]
- 행 생략 불가 => int arr[][3] (X)
>> 포인터
- 포인터는 변수의 메모리 주소를 나타내는 변수
- 포인터 변수는 다른 변수를 가리키고 있다는 의미
- 간단히 포인터라고 한다.
>> 문자 배열과 포인터 배열 차이
- 2차원 문자 배열은 1차원 포인터 배열로 표현
- 2차원 배열의 행 개수는 포인터 배열의 크기
- 포인터 배열의 각 요소는 문자열의 시작 주소를 가진 포인터
- 포인터 배열은 문자열 길이에 따라 메모리를 효율적으로 사용 가능하다.
>> 포인터의 포인터(이중 포인터)
- 일반 변수의 주소가 아니라 포인터의 주소를 저장하는 포인터
>> 구조체
- 구조체는 배열처럼 여러 데이터를 하나의 자료형으로 묶어 정의하는 자료형이다.
- 배열은 같은 자료형만 그룹화할 수 있지만, 구조체는 서로 다른 자료형을 하나의 자료형으로 선언해 사용한다.
- 구성 요소
- 구조체 이름
- 자료형
- 데이터 항목
>> 구조체 연산
- 구조체에서는 데이터 항목 참조 연산, 구조체 변수 복사, 구조체 변수의 주소 구하기 연산 등을 사용한다.
- 점 연산자(.)와 화살표 연산자(->)를 이용해 구조체의 개별 데이터 항목을 참조한다.
- 같은 구조체의 변수들끼리 내용을 한 번에 복사할 수 있으며, 포인터 연산자를 사용해 구조체 변수의 주소를 구할 수 있다.
>> 재귀 호출
- 함수가 자기 자신을 호출하여 순환 수행되는 것
- 재귀 호출을 사용하면 프로그램의 크기를 줄이고 간단하게 작성할 수 있다.
- 전체 문제를 하위 작업으로 분할해 작은 문제부터 해결하는 방법이 효율적일 때 사용
'CS 지식 > 자료 구조' 카테고리의 다른 글
[요약] 자료 구조 - 5 [정렬, 검색, 해싱] (0) | 2024.09.16 |
---|---|
[요약] 자료 구조 - 4 [그래프, 신장 트리, 균형 이진 트리, AVL, 히프] (1) | 2024.09.15 |
[요약] 자료 구조 - 3 [스택, 큐, 데크, 트리, 이진 트리] (2) | 2024.09.15 |
[요약] 자료 구조 - 2 [순차(행렬), 선형(1, 2, 3차원 배열), 연결(단순, 원형, 이중, 다항식) 자료 구조] (5) | 2024.09.12 |
[자료 구조] 정의, 분류, 표현 (0) | 2024.06.26 |