데이터 구조

데이터를 조직화하는 표준적인 방법

데이터 구조 중 상당수는 여러 유형의 메모리를 더 효율적으로 사용하기 위해 존재함

기본 데이터 타입

프로그래밍 언어는 다양한 기본 데이터 타입을 제공

포인터

  • 컴퓨터 아키텍쳐에 따라 결정되는 크기의 부호가 없는 정수
  • 값이 아닌 메모리 주소

배열

문자열

  • 배열과 마찬가지로 문자열로 길이를 연산해야함
  • 길이가 가변적으로 변하는 가변 문자열 데이터를 활용하는 프로그램이 많음
  • 문자열의 끝을 표시하는 NULL 문자 사용
  • 문자열의 길이 + 문자열 터미네이터(NULL 문자) = 실제 문자열이 쓰는 메모리 byte
  • 문자열 터미네이터는 1byte

  • 저장이 쉬운 장점이 존재
  • 문자열의 길이를 알고 싶으면 문자열 터미네이터를 발견할 때 까지 문자열을 순회해야함
  • 문자열 중간에 NULL 문자를 사용할 수 없음

복합 데이터 타입

  • 간단한 물건을 저장하는 단순한 공간도 있지만, 호텔 스위트룸 처럼 다양한 데이터를 넣을 공간도 필요
  • 대표적으로 구조체, 구조체 안에는 멤버로 구성
  • 패딩을 이용해 메모리 정렬이 되지 않는 문제를 해결

단일 연결 리스트

  • 데이터 양이 정해져 있지 않는 경우 배열은 매우 취약함
  • 배열을 충분히 크게 만들지 않으면 데이터가 늘어났을 때 새로 더 큰 배열을 만들고 기존 배열의 내용을 새 배열로 복사해야 함
  • 필요 이상으로 배열을 크게 만들면 메모리 낭비가 심하다.

  • 목록에 들어갈 원소 개수를 모르는 경우 구조체를 사용해 연결 리스트를 만듬

  • next는 리스트의 다음 원소 주소를 저장하는 포인터
  • 맨 앞은 head, 마지막은 tail
  • 리스트와 배열의 가장 큰 차이는 배열은 각 원소는 메모리에서 연속적으로 위치, 리스틑 메모리의 아무 주소에 위치

  • 원소를 추가시 Head앞에 새 원소를 위치시켜 추가
  • 원소 삭제시 원소를 삭제 후 삭제한 리스트 원소의 바로 앞 원소의 next 포인터삭제된 next 포인터가 가리키는 원소를 가리키게 해야함

카테고리:

업데이트: