연결 리스트

JS는 토이프로젝트 해야 하는데 뭐 또 생각나면 만들겠음… 솔직히 프론트엔드가 쓸 일은 없겠지만 알아서 나쁠거 없잖아요? 아무튼.


배열은 만들 때 메모리 공간의 연속된 공간을 할당받는다. 그리고 이 특징때문에 인덱싱(리스트[0] 이런 식으로 픽하는거)이 가능하다. 이 공간의 크기는 마치 포켓몬의 종족값 같아서 한 번 정해지면 바꿀 수가 없다. …그럼 대체 첨삭은 어떻게 하는거임??? (동공지진) 그리고 배열에 뭘 넣을 때 공간 확보도 문제지만 배열에서 뭘 뺐을 때 남는 공간도 문제가 된다. 아니 이 공간을 뭐 어따쓸겨 걍 낭비하는거지…

아무튼… 연결 리스트는 이 충격과 공포의 사태를 막기 위해 노드들을 줄줄이 엮어서 배열로 만든다. 각 노드들은 데이터와 포인터로 이루어져 있는데, 데이터는 말 그대로 배열에 들어있는 데이터고 포인터는 다음 노드의 위치를 가리키는 일종의 표지판같은거다. 그러면 여기에 노드 몇 개를 끼워넣으려면? 그냥 포인터만 바꾸면 장땡이다. 삭제하거나 순서를 바꿀 때도 마찬가지.

대신 연결 리스트는 인덱싱이 불가능하고 일일이 노드를 찾아가는 삽질이 필요하다. 원래 인생은 일장일단, 등가교환이니라. 전에 리스트뷰 vs 그리드뷰 할 때도 그리드뷰의 단점을 리스트뷰가 커버하고, 리스트뷰의 단점을 그리드뷰가 커버했듯이 말이다.