-
[자료구조] 연결리스트 : 도입Stage/Computer Science 2021. 6. 1. 23:25
학습 목표
연결 리스트의 정의를 설명할 수 있다.1. 데이터 구조
기본적인 포인터 구조만 이용해서 메모리를 관리하기에는 다소 번거로울 때가 많다.
데이터 구조는 컴퓨터 메모리를 더 효율적으로 관리하기 위해 새로 정의하는 구조체이다.쉽게 기억하기 위해, 일종의 메모리 레이아웃 또는 메모리 지도라고 생각하자.
2. 연결 리스트
배열에서는 각 인덱스의 값이 메모리상에서 연이어 저장되어 있다.
하지만 다음 인덱스의 값이 메모리상에서 멀리 떨어져 있다면 안되는 걸까?각 인덱스 값이 메모리상에 여러 군데 나뉘어져 있다고해도 자기 바로 뒤에 오는 값의
메모리 주소만 기억하고 있다면 그 값을 연이어서 읽어들일 수 있다.이것을
연결 리스트라고 한다.
- 크기가 3인 연결 리스트 이다.
- 이 연결리스트는 각 인덱스가 메모리 주소에서
자기 값이랑 함께바로 다음에 오는 값의 주소(포인터)를 저장한다. - 연결 리스트의 첫 번째 값인 1은 2의 메모리 주소를 저장하고 있고, 두 번째 값인 2는 3의 메모리 주소를 저장하고 있다.
- 3은 다음에 오는 값이 없기 때문에 NULL을 주소 값으로 저장한다.
2.1 구조체
typedef struct node { int number; struct node *next; } node;- node라는 이름의 구조체에는 number와 *next 필드가 정의되어 있다.
- number는 각 node가 가지는 값, 위의 그림에 나온 크기가 3인 연결리스트에서 1, 2, 3을 말하고, *next는 다음 node를 가리키는 포인터이다.
3. 배열과 비교했을 때
- 연결리스트는 다음 값의 주소를 저장하기 때문에 배열과 달리 메모리 상에서 서로 물리적으로 떨어져 있어도 연결이 가능하다.
- 배열은 고정된 갯수만 저장할 수 있는데, 연결 리스트는 필요할 때마다 데이터를 추가, 삭제할 수 있다.
- 연결리스트는 위치를 나타낼 때 인덱스 사용이 불가능하다.
- 원하는 값을 찾을 때까지 포인터를 통해서 노드를 탐색해 나가야하기 때문에 시간이 오래 걸린다.
'Stage > Computer Science' 카테고리의 다른 글
[자료구조] 연결리스트 : 트리 (0) 2021.06.02 [자료구조] 연결 리스트 : 코딩 그리고 시연 (0) 2021.06.01 [자료구조] 배열의 크기 조정 (0) 2021.06.01 [자료구조] malloc과 포인터 복습 (0) 2021.06.01 [메모리] 파일 읽기 (0) 2021.06.01