본문으로 건너뛰기

자료구조의 이해

1. 자료구조란 무엇인가?​

자료구조는 컴퓨터 프로그램을 통해 문제를 해결하는 과정에서 정보를 효율적으로 표현하고 구성 및 활용하는 기법을 학습하는 교과목입니다. 이는 자료를 효율적으로 표현하고 저장하며 처리할 수 있도록 정리하는 것을 의미합니다.

  • 핵심 목적: 컴퓨터 프로그램의 성능은 효율적인 자료구조와 이에 따른 알고리즘으로 구성되므로, 컴퓨터 프로그래머 및 개발자로 성장하기 위한 중요한 교과목입니다
  • 학습 내용: 리스트, 스택, 큐, 트리, 그래프 등 다양한 자료구조를 이해하고, 이와 관련된 선택, 탐색 및 정렬 문제와 그 효율성 및 해석 기법을 공부합니다

2. 과목의 주요 특징 및 수업 내용​

자료구조와 알고리즘을 함께 학습하며, 이론과 실습을 병행하여 문제 해결 능력을 향상시키는 데 중점을 둡니다.

  • 이론 및 실습 병행: 자주 사용하는 자료구조의 핵심 알고리즘으로 설계한 후 이를 C 프로그램으로 구현하면서 이론과 실습을 병행함
  • 문제 해결 능력 향상: 자료구조를 활용한 문제 해결 능력 향상을 위한 수업 방식을 채택합니다
  • 실습 환경: Visual Studio 2019 Community 버전을 사용합니다

주요 학습 주제​

  • 자료구조와 알고리즘 이해를 위한 기본 지식 및 C 프로그래밍 기법

  • 순차 자료구조: 자료의 논리적 순서와 물리적 저장 순서가 일치하는 표현 방법을 학습합니다

    • 예: 배열을 이용한 리스트, 스택, 큐, 데크, 트리, 그래프 구현
  • 연결 자료구조: 물리적 순서를 고려하지 않고 논리적 순서대로 연결하여 자료를 구성하는 표현 방법을 알아봅니다

    • 예: 포인터를 이용한 리스트, 스택, 큐, 데크, 트리, 그래프 구현
  • 다양한 자료구조: 스택, 큐 (선형), 트리 (1:n 계층형), 그래프 (m:n 관계)의 특징과 연산 방법을 학습합니다

  • 자료 응용: 정렬 및 검색 알고리즘을 살펴보고 구현합니다

    • 정렬: 선택, 버블, 퀵, 삽입, 셸, 병합, 기수, 힙, 트리 정렬
    • 검색: 순차, 이진, 이진 트리 검색, 해싱

3. 자료의 표현 방식​

컴퓨터 내부에서 자료를 표현하는 다양한 방법을 학습합니다. 모든 형식의 자료는 2진수 코드로 표현되어 저장 및 처리됩니다.

  • 2진수 코드의 단위: 1비트, 1니블 (4비트), 1바이트 (8비트)
  • n비트 표현: n개의 비트로 $2^n$개의 상태를 표현할 수 있습니다

3.1. 수치 자료의 표현​

10진수 표현​

  • 존(zone) 형식: 10진수 한 자리를 1바이트(8비트)로 표현하며, 상위 4비트는 존 영역(1111)으로, 하위 4비트는 수치 영역으로 사용합니다. 마지막 자리의 존 영역에 부호(양수: 1100, 음수: 1101)를 표시합니다
  • 팩(pack) 형식: 10진수 한 자리를 4비트로 표현하며, 최하위 4비트에 부호(양수: 1100, 음수: 1101)를 표시합니다

2진수 정수 표현​

  • 부호 절댓값 형식: 최상위 1비트는 부호(0: 양수, 1: 음수)를, 나머지 n-1비트는 절댓값을 표시합니다
  • 1의 보수(1' complement) 형식: 음수를 표현할 때 부호 비트 대신 1의 보수를 사용합니다. 양수 표현은 부호 절댓값과 같으며, 음수의 첫 비트는 1이 됩니다. (A-B) 뺄셈을 (A+(B의 1의 보수))로 변환하여 계산할 수 있습니다
  • 2의 보수(2' complement) 형식: 음수를 표현할 때 2의 보수를 사용합니다. 컴퓨터 시스템에서 실제로 사용하는 형식입니다. (A-B) 뺄셈을 (A+(B의 2의 보수))로 변환하여 계산할 수 있으며, 덧셈 연산에서 오버플로 처리가 1의 보수 형식보다 간단합니다

2진수 실수 표현​

  • 고정 소수점 표현: 소수점이 항상 최상위 비트의 왼쪽 밖에 고정되어 있는 것으로 취급합니다
  • 부동 소수점 표현: 고정 소수점 형식에 비해 표현 가능한 값의 범위가 넓으며, 실수를 소수부, 지수, 밑수로 구분하여 표현합니다

3.2. 문자 자료의 표현​

문자에 대한 이진수 코드를 정의하여 사용합니다.

  • BCD 코드: 6비트를 사용하여 문자를 표현합니다. 상위 2비트는 존 비트, 하위 4비트는 2진수 비트로 구성됩니다
  • EBCDIC 코드: 8비트를 사용하여 문자를 표현합니다. 상위 4비트는 존 비트, 하위 4비트는 2진수 비트로 구성됩니다
  • ASCII 코드: 7비트를 사용하여 문자를 표현합니다. 상위 3비트는 존 비트, 하위 4비트는 2진수 비트로 구성됩니다
  • 유니코드: 세계 여러 나라의 언어를 통일된 방법으로 표현할 수 있도록 정의한 국제 표준 코드(ISO/IEC 10646)입니다. 2바이트를 조합하여 하나의 글자를 표현함으로써 다양한 언어를 지원하며, 현재 인터넷 기반 프로그램과 제품에 일반화되어 사용됩니다

3.3. 논리 자료의 표현​

논리값(참/거짓, 1/0)을 표현하기 위한 자료 형식입니다. 1바이트를 사용하여 표현하며, 참은 최하위 비트 1 또는 전체 비트 1, 거짓은 전체 비트 0 등으로 정의할 수 있습니다.

3.4. 포인터 자료의 표현​

메모리의 주소를 표현하기 위한 자료 형식입니다. 변수의 주소나 메모리의 특정 위치에 대한 주소를 저장하고 주소 연산에 사용됩니다.

3.5. 문자열 자료의 표현​

여러 문자로 이루어진 문자의 그룹을 하나의 자료로 취급하여 메모리에 연속적으로 저장하는 자료 형식입니다. 부분 문자열을 표현하는 방법에는 세 가지가 있습니다.

  1. 구분자를 사용하는 방법: 부분 문자열 사이에 구분자를 사용하며, 메모리 이용률은 효율적이나 탐색 시간은 비효율적입니다
  2. 고정 길이를 사용하는 방법: 가장 긴 문자열 길이에 맞춰 고정 길이로 저장하며, 메모리 이용률은 비효율적이나 탐색 시간은 효율적입니다
  3. 포인터를 사용하는 방법: 부분 문자열을 연속 저장하고 각 부분 문자열에 대한 포인터를 사용하며, 메모리 이용률과 탐색 시간 모두 효율적입니다

4. 자료의 추상화​

추상화는 크고 복잡한 문제를 단순화시켜 쉽게 해결하기 위한 방법입니다.

자료 추상화 (data abstraction)​

처리할 자료, 연산, 자료형에 대한 추상화 표현을 의미합니다.

  • 자료: 프로그램의 처리 대상이 되는 모든 것
  • 연산: 어떤 일을 처리하는 과정으로, 연산자에 의해 수행됩니다
  • 자료형: 처리할 자료의 집합과 자료에 대해 수행할 연산자의 집합입니다
    • 예: 정수 자료형 - 정수의 집합과 +, -, x, ÷, mod 연산자 집합

추상 자료형 (ADT, Abstract Data Type)​

자료와 연산자의 특성을 논리적으로 추상화하여 정의한 자료형입니다.

  • 추상화: "무엇(what)인가?"를 논리적으로 정의하는 단계입니다
  • 구체화: "어떻게(how) 할 것인가?"를 실제적으로 표현하는 단계입니다

참고: 자료와 연산에 있어서 추상화는 '추상 자료형'과 '알고리즘 정의'에 해당하며, 구체화는 '자료형'과 '프로그램 구현'에 해당합니다

실습 툴 설치 및 활용​

Visual Studio 2019 Community를 활용하여 실습 환경을 구축하고 C 언어로 자료구조 및 알고리즘을 구현합니다.