개발 초보 2022. 5. 30. 20:35

지난 글: [알고리즘] - 데이터 구조란?

 

리스트(list)는 데이터 구조의 하나로, 데이터를 일직선으로 나열한 형태를 가지고 있다. 데이터 추가나 삭제는 쉽지만, 원하는 데이터에 접근하려면 시간이 많이 걸린다.

 

1

Blue -> Yellow -> Red // -> = 포인터

이것이 리스트의 개념도이다. 세 개의 문자열 "Blue", "Yellow", "Red"가 데이터로 저장되어 있다. 각 데이터에는 '포인터(pointer)가 있으며, 다음 데이터의 메모리 위치를 가리킨다. "Red"는 마지막 데이터이므로 "Red"의 포인터는 아무것도 가리키지 않는다.

 

2

리스트에서는 데이터가 메모리상의 연속된 위치에 저장되지 않아도 되며 일반적으로 떨어진 영역에 흩어져서 저장된다.

 

3

흩어져 저장돼 있으므로 포인터를 처음부터 순서대로 따라가야만 원하는 데이터에 접근할 수 있다. 이것을 순차 접근 또는 시퀀셜 액세스(sequential access)라고 한다. 예를 들어 "Red"에 접근하고 싶으면 우선 "Blue"에 접근해야 한다.

 

4

그 다음은 "Yellow"를 가야만 "Red"에 접근할 수 있다.

 

5

데이터 추가는 추가할 위치의 앞뒤 포인터를 변경만 하면 되므로 간단하다고 볼 수 있다. 예를 들어 "Blue"와 "Yellow"사이에 "Green"을 추가한다 하자.

 

6

"Blue"의 포인터를 "Green"을 가리키도록, "Green"의 포인터를 "Yellow"를 가리키도록 하면 데이터 추가가 완료된다.

 

7

데이터 삭제도 같은 방식이다. 포인터의 방향을 바꾸면 된다. 예로 "Yellow"를 삭제한다 하자.

 

8

이때는 "Green"의 포인터를 "Yellow"가 아닌 "Red"를 가리키도록 변경하면 삭제가 완료된다. "Yellow"는 메모리에는 남지만 어디에서도 접근할 수 없으므로 일부러 삭제할 필요는 없다. 이후에 이 영역이 사용될 때 덮어쓰기가 되어 다시 사용할 수 있게 된다.

 

오늘은 쉽다!

 

참고 서적: