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