(자료구조) 5-1 연결 자료구조

업데이트:
1 분 소요

자료 구조 - 연결 자료구조

1. 순차 자료구조의 문제점

1) 순차자료구조 특징

  • 원소들간의 논리적인 순서와 메모리에 저장하는 물리적인 순서가 같은 구조로 되어있음.
  • 논리적인 순서대로 연속적으로 저장
  • 원소의 위치를 찾아 액세스하기 용이
  • 삽입 연산이나 삭제 연산 이후에 연속적인 물리적 위치를 유지하기 위하여 원소들을 이동시키는
    추가적인 작업과 시간이 소요

2) 순차자료구조의 문제점의 경우

  • 원소들의 개수가 많고 삽입,삭제 연산이 많이 발생하는 경우에는
    원소들의 이동 작업으로 인한 오버헤드가 많이발생
  • 순차자료구조가 배열을 이용하여 구현하기 때문에 배열이 갖고 있는 메모리 사용의 비효율성 문제 발생

예) 희소 다항식이나 희소 행렬 저장시

  • 문제점이 개선된 표현방법으로 연결자료구조 또는 비순차 자료구조

2. 연결 리스트의 노드

1) 연결 자료 구조

  • 원소의 논리적인 순서와 물리적인 순서가 일치할 필요가 없음
  • 연속한 물리주소에 의해 원소의 순서를 표현한 것이 아니라
    각 원소에 저장되어 있는 다음 원소의 주소에 의하여 순서가 연결되는 방식
  • 여러개의 작은 공간을 연결하여 하나의 전체 자료구조를 표현
    • 크기 변경이 유연하고 좀 더 효율적으로 메모리 사용 가능

2) 연결 리스트

  • 리스트를 연결 자료구조로 표현한 구조
  • 연결 방식에 따라 구분
    • 단순 연결 리스트, 원형 연결 리스트, 이중 연결 리스트, 이중 원형 리스트 등

3) 연결 리스트의 노드

  • 연결 자료구조에서 하나의 원소를 표현하기 위한 단위 구조
  • <원소,주소> 단위로 저장

alt

(1) 데이터 필드(Data Field)

  • 원소의 값을 저장, 원소의 형태에 따라 하나 이상의 필드로 구성
  • 다음 노드의 주소를 저장, 포인터 변수를 사용하여 주소값을 저장, 포인터 또는 링크, 참조

(3) 노드 연결 방법 - 기차놀이

  • 이름표 뽑기

alt

(4) 자기가 뽑은 이름표의 사람 찾아 연결하기

  • X표를 뽑은 사람은 마지막 기차 칸
  • 이름표를 들고 있는 방향으로 움직임

alt

(5) 기차놀이와 연결리스트

  • 기차놀이 하는 아이들 : 연결 리스트의 노드
  • 이름표 : 노드의 링크 필드

alt

3. 선형 리스트와 연결 리스트

1) 사례 비교

  • 리스트 week = (월,화,수,목,금,토,일)

(1) week에 대한 선형 리스트

alt

(2) week에 대한 연결 리스트

alt

  • 각 노드의 필드에 저장한 값은 포인터의 점 연산자를 사용하여 액세스
  • week.data : 포인터 week가 가리키는 노드의 데이터 필드 값 “월”
  • week.link : 포인터 link가 가리키는 노드의 링크 필드에 저장된 주소값 “120”

alt

  • week.link.link.data = 수
(2-1) 리스트 이름 week
  • 연결 리스트의 시작을 가르키는 포인터 변수
  • 포인터 변수 week는 연결 리스트의 첫 번째 노드를 가리키는 동시에 리스트 전체를 의미
(2-2) 연결 리스트의 마지막 노드의 링크필드
  • 노드의 끝을 표시하기 위해 null(널) 저장
(2-3) 공백 연결 리스트
  • 포인터 변수 week에 null을 저장 (널 포인터)
(2-4) 리스트 week의 노드에 대한 C프로그램 구조체 정의
  typedef struct Node{
    char data[4];
    struct Node *link;
  };

댓글남기기