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