CS/자료구조

[자료구조] 1. 자료구조의 개요

JIN-JJS 2025. 2. 21. 19:00

1. 자료구조의 개념

1) 컴퓨터 분야에서 자료구조를 배우는 이유

• 컴퓨터가 효율적으로 문제를 처리하기 위해 문제를 정의하고 분석하여 최적의 프로그램을 작성해야 함

• 자료구조에 대한 개념과 활용 능력이 필요함

 

2) 자료와 정보

• 자료(Data): 단순한 관찰이나 측정을 통해 수집된 사실이나 값

• 정보(Information): 자료를 특정 목적을 위해 가공 및 처리하여 실제 문제 해결에 도움이 되는 유용한 형태로 변환한 것

 

3) 자료구조의 필요성

• 자료구조(Data structure): 동일한 타입의 데이터를 정돈하여 저장한 구성체

• 데이터를 정돈하는 목적: 탐색, 삽입, 삭제 등의 연산을 효율적으로 수행하기 위함

• 자료구조는 [데이터] + [데이터에 관련된 연산] 함께 고려하여 만들어야 함

 

4) 자료구조(Data Structure)

• 자료를 효율적으로 사용하기 위해 분류하여 구성하고 저장 및 처리하는 모든 작업

• 자료의 사용 방법이나 성격에 따라 효율적으로 저장하고 조직하는 방법

• 자료구조의 예: 배열, 연결 리스트, 큐, 스택, 그래프, 트리 등

• 자료구조가 잘 설계될수록 프로그램의 속도, 개발 시간, 메모리 사용량, 유지보수 비용 등이 최적화됨

• 자료구조는 알고리즘을 구성하는 부품(Component)

 

5) 알고리즘과 자료구조의 관계

• 효율적인 알고리즘을 위해 적절한 자료구조 필요

- 입력 데이터를 위한 효율적인 자료구조

- 알고리즘 수행 과정에서 생성되는 데이터도 효율적인 자료구조에 저장해야 함

 

• 프로그램 = 자료구조 + 알고리즘

- (예) 최대값 탐색 프로그램 = 배열 + 순차탐색

 
 

2. 자료구조의 분류

1) 자료의 형태에 따른 분류

• 단순 구조: 정수, 실수, 문자, 문자열 등의 기본 자료형

• 선형 구조: 데이터가 연속적으로 연결된 구조 (리스트, 연결 리스트, 스택, 큐, 데크 등)

• 비선형 구조: 비순차적인 성질을 지닌 구조 (트리, 그래프 등)

• 파일 구조: 파일 내에서 자료 처리를 쉽게 하기 위한 구조 (순차 파일, 색인 파일, 직접 파일 등)

 

2) 자료구조 선택 시 고려 요소

• 포함된 데이터의 양

• 데이터 사용 방법 및 사용 빈도

• 데이터의 정적 혹은 동적인 특성

• 자료구조에 의해 요구되는 메모리 사용량

• 데이터 수정에 걸리는 시간

• 프로그래밍의 복잡도

 

3) 자료의 단위와 종류

• 비트(bit): 정보 표현의 최소 단위 (0 또는 1)

• 니블(nibble): 4비트 (16개의 정보 표현 가능)

• 바이트(byte): 8비트 (256개의 데이터 표현 가능)

• 문자(character): 문자, 숫자, 기호 표현 (7~8비트)

• 필드(field): 파일을 구성하는 최소 단위

• 레코드(record): 하나 이상의 필드가 모여서 구성된 단위

• 파일(file): 여러 개의 레코드가 모여 구성된 단위

 
 

3.  자료구조와 알고리즘

1) 알고리즘(Algorithm)

• 주어진 문제를 해결하기 위한 절차와 방법

• 명확하고 유한한 단계로 문제 해결을 기술한 것

• 프로그램 개발 초기 단계에서 중요한 역할 수행

 

• 부정확한 알고리즘의 문제점

- 비정상 종료 (ABORT, ABEND)

- 무한 루프

- 잘못된 결과 출력

 

• 알고리즘의 예: 요리 레시피 (순서대로 단계적으로 기술)

 

2) 알고리즘의 요구조건

• 입력(Input): 외부에서 제공되는 0개 이상의 입력 데이터 필요

• 출력(Output): 적어도 하나 이상의 결과가 있어야 함

• 명확성(Clarity): 모호하지 않고 명확해야 함

• 유한성(Finiteness): 제한된 수의 단계 후 반드시 종료되어야 함

• 유효성(Effectiveness): 모든 명령은 실행 가능해야 함

 

3) 알고리즘의 기술 방법

• 자연어(Natural Language): 사람이 읽기 쉬우나 모호할 수 있음

• 순서도(Flowchart): 직관적이지만 복잡한 알고리즘 표현이 어려움

• 의사코드(Pseudo Code): 핵심적인 내용만 표현할 수 있어 효율적

• 프로그래밍 언어(C, C++, Java 등): 가장 정확하게 기술 가능하지만 이해가 어려울 수 있음


이 내용은 휴넷사회복지평생교육원의 자료구조 강의를 듣고 정리한 것입니다.