연결 리스트

Download Report

Transcript 연결 리스트

연결 리스트(Linked List)
What is Linked List?
각 항목의 데이터와 그 인접항목의
포인터를 갖고 있는 리스트
연결 리스트(Linked List)

동적할당을 사용하기 때문에 메모리 사용에있어 효
율이 높다.

같은 양의 데이터를 저장 할 경우 배열보다 메모리
를 많이 사용한다.

포인터를 사용하기 때문에 엑세스 시간이 느리다

직렬인 배열과 달리 자료구조를 여러 형태로 구현
할수 있다.
연결 리스트(Linked List)
• 배열 구조 : 삽입/삭제가 비효율적
• 리스트 구조 : 포인터 개념을 이용하여 삽입/삭제
•
연산을 효율적으로 수행
리스트의 구성 : data field & link
• data field : 실제 자료가 저장
• link field : 다음 노드에 대한 포인터가 저장
data
data
data
data
link
link
link
link
배열 & 연결 리스트
• Int a[7]
• 3,4 삽입
a[0]
1
a[0]
1
a[0]
1
a[1]
2
a[1]
2
a[1]
2
a[2]
5
a[2]
a[2]
3
a[3]
6
a[3]
a[3]
4
a[4]
a[4]
5
a[4]
5
a[5]
a[5]
6
a[5]
6
a[6]
a[6]
a[6]
배열 & 연결 리스트
 3추가
1
1
1
4
4
4
2
2
2
3
3
포인터(Pointer)

주소를 저장하기위한 공간
• 선언 : 객체형 * 변수명;
• 예제 : int * ptr; int a;
• 선언시 “*변수명” 의 의미 => 주소저장공간
• 객체사용
• & : 주소연산자
• * : 역참조(간접지시) 연산자
• 예제
• ptr = &a;
• ptr = a;
• *ptr = a;
포인터(Pointer)
1000
a1
1002
a2
1000
a1
1002
1002
a2
10
int *a1;
int a2 = 10;
a1 = &a2
*a1 = a2;
포인터(Pointer)

포인터 사용시 주의할 점
• 포인터는 항상 어떤 대상을 가리키고 있어야 함
• 어떤 대상도 가리키고 있지 않는 포인터는 항상
NULL로 초기화
단순연결 리스트(Singly Linked List)
bat
• 노드들은 순차적 위치에 존재
vat
하지 않는다
• 노드들의 위치는 실행시마다
바뀔수 있다
cat
sat
ptr
bat
cat
sat
vat \n
단순연결 리스트(Singly Linked List)

연결 리스트 구성을 위한 기능
• 노드의 구조 정의 : struct
• 노드 생성 방법 : new
• 노드 삭제 방법 : delete
ptr
bat
cat
sat
vat \n
단순연결 리스트(Singly Linked List)

생성
new 연산자
bat
cat
bat
cat
연결
단순연결 리스트(Singly Linked List)

검색
ptr
이동
bat
cat
sat
vat \n
단순연결 리스트(Singly Linked List)

삽입
ptr
bat
cat
sat
vat \n
2
1
vat
단순연결 리스트(Singly Linked List)

삭제
delete
2
ptr
bat
cat
sat
1
vat \n