방통대 2019-2학기 수강내용 정리 <자료구조>
한 학기를 마친 지금, 시험에 목 메지 않고 나의 실력 향상을 위해 학교를 다니자고 다짐한 내 결심을 이행하기 위해 한 학기동안 배운 내용을 정리하고자 한다. 1. 배열 - 여기서 말하는 배열이란 순수한 동적크기의 배열이다. 배열의 모든 원소들은 메모리에 다닥다닥 붙어서 올라간다. 어렵게 이야기 하자면, 메모리에 적재되는 물리적인 위치가 연속적이다 라고 하는 것이다. 이는 공간적 지역성의 원리라고도 한다. 공간적 지역성이란 방금 접근한 메모리 주소에 또 접근할 가능성이 높고 그에 인접한 원소들도 접근할 가능성도 높음을 의미한다. 배열의 공간적 지역성은 탐색을 할 때 그 빛을 발한다. 배열 a=[1,2,3,4,5]를 저장한다고 하면 a의 각 원소들은 모두 메모리 주소에 차곡차곡 순서대로 저장된다. 따라서 배열에 있는 값들은 순회하며 꺼내려 한다면 처음 1을 찾은 메모리 주소에서부터 더 멀리 찾을 필요도 없이 순서대로 꺼내기만 하면 되므로 탐색이 쉽다. 하지만 단점은 데이터의 삽입과 삭제가 일어날 때이다. 만약 배열에 원소를 5개 넣고 싶고 각 원소는 메모리 주소를 1칸씩 차지하면, 우리는 최소한 메모리가 5칸이 되는 곳을 찾아서 그곳에 저장해야한다. 메모리 중간중간에 3칸, 4칸이 비어있어도 이를 활용할 수가 없다는 단점이 있다. 또한 이미 원소가 4개인 배열이 있을때 이 배열의 중간에 값을 추가하고 싶다면 이를 위해 배열 전체를 다른 메모리주소로 옮겨야한다. 그렇지 않으면 배열의 특징인 공간적 지역성이 유효하지 않기 때문이다. 이 때문에 배열에 값이 많아질수록 삽입과 삭제는 부담스러운 연산이 되며 성능 또한 좋지 않게 된다. 2. 연결리스트 - 배열과 가장 잘 비교 되는 자료구조일 것이다. (사실 배열과 연결리스트는 어느 자료구조 커리큘럼이나 가장 초반부에 설명하고 있기 때문에 꽤 많이 봐와서 방통대 강의보다는 그 내용을 바탕으로 이 글을 쓰게 되는게 아닌가 싶다.) 연결리스트는 배열과 달리, 원소들이 메모리에 적재되는 물리...