Week 9-1. (자료구조 관련) 연결리스트 [Download]

Download Report

Transcript Week 9-1. (자료구조 관련) 연결리스트 [Download]

Linked List
2003. 4. 29.
포인터

순차적 표현
– 원소들의 저장 순서가 리스트에 표현된 순서와 동일 =>
배열
– 단점
• 임의 원소에 대한 삽입, 삭제 연산이 불편 (비용이 비쌈)
– 예) 순서리스트 (bat, cat, sat, vat)에서 ‘mat’를 삽입, 또는
‘cat’를 삭제
• 크기가 가변적인 순서 리스트인 경우, 최대 크기를 하나의
배열로 유지하게 되어 기억장소를 낭비할 수도

포인터의 사용 (linked list)
– 원소들의 저장순서가 리스트의 표현순서와 다를 수 있음.
– 삽입, 삭제 용이
– 메모리 동적할당
2
동적 할당

프로그램 수행도중 새로운 저장공간 확보
– 메모리 할당 : malloc()
• 요청한 메모리 영역에 대한 첫번째 주소값을 리턴
• 타입변환 필요 ( void* => char * , int*, . . .)
– 메모리 반환 : free()
3
Linked List (연결리스트)

정의
– 하나의 노드에서 다음 노드를 가리키는 포인터를 이용하여
여러개의 노드들을 연결하는 자료구조
– 노드(node)라고 불리는 기억 단위의 집합들로 구성되고, 각
노드는 자료값과 포인터(pointer)로 구성

예) 알파벳순서로 정렬된 전화번호 목록
Acme, Sam
(201) 898-2392
Dolan, Edith
(213) 682-3104
Mening, Stephanie
(914) 382-7070
Zemann, Harold
(718) 219-9912
Lanfrank, John
(415) 718-4581
4
배열로 레코드의 리스트 구현
struct person {
char name[20];
char telnum[20];
};
삽입과 삭제
시 문제점
발생
struct person H[10];
Acme, Sam
(201) 898-2392
H[0]
Dolan, Edith
(213) 682-3104
H[1]
Lanfrank, John Mening, Stephanie
(415) 718-4581 (914) 382-7070
H[2]
H[3]
Zemann, Harold
(718) 219-9912
H[4]
5
Linked List (연결리스트)
Dolan, Edith
Lanfrank, John
(213) 682-3104
(415) 718-4581
Lanfrank
구조체 주소
Mening
구조체주소
구조체 포인터
6
Linked List

삽입
7
Linked List
데이타
링크(포인터)
노드
8
2-node linked list
9
List Insertion
10
List Printing
11
과제

연결리스트 구현
– 전화번호부 리스트: 성명, 전화번호, 주소
– 적당한 개수의 레코드 삽입
– 리스트내용 출력
• 각 노드의 내용
• 노드의 수
12