qhrrkfl2   7년 전

윤성우 아저씨의 자료구조책으로 공부하고잇는데요

리스트라는 자료구조는 왜 순차적으로 돌면서 자료를 확인하는 형태를 지녔나요?(배열기반리스트)

그것이 가져다주는 이점은 무엇인가여? 또는 그렇게밖에 할수없는 구조적인 형태를 띄고 있기때문인가여?

질문드려욤

shashack   7년 전

어떻게 구현하냐에 따라 다르겠지만

리스트의 목적??은 데이터의 추가와 삭제가 빈번할 경우 많이? 사용됩니다.


예를 들어 볼게요

도서관 프로그램이고 이 프로그램은  배열로 학생들을 관리해요

(**그리고 이 도서관 프로그램의 관리자는 메모리가 낭비되는 꼴을 못보는 사람입니다.)

학생들의 이름을 담는 배열 a[5]가 있고

a[0] = 갑순이, a[1] = 갑돌이, a[2] = 철수. a[3] = 영희, a[4] = 뽀로로

요렇게  저장 되었다고 할 때!

제 6의 학생이 새로 도서관에 가입신청을 했어요..


어떻게 해야하죠??

어쩔 수 없죠 배열 사이즈를 늘려야죠 b[6]을 할당하고 저기로 모두 옮겨야겠죠?


이게 문제죠 지금 이상황에선 6명만 옮기면 되지만... 이런 경우가 빈번하게 발생하고 학생수가 어마어마하게 많다면요?

계속 제할당 하고 계속 옮기실 건가요?


그래서 요때 리스트를 사용하는 것입니다.

학생들을 리스트 자료구조로 관리를 한다면

학생수가 늘어나도 그냥 맨마지막 학생뒤에 메모리를 필요한만큼 할당해주고 뒤에 이어붙이면 되니까요..

학생이 졸업을 해도 그학생만 지워주고 그 학생의 앞뒤를 연결해주는 학생들을 연결해주면 되니까요.


하지만 기서 trade-off가 발생하죠..

배열기반 일경우 a[2]이런 식으로 접근이 가능하지만

리스트는 그럴수가 없어서 맨 앞쪽부터 니가 뽀로로가 맞니? 하면서 순차적으로 확인을 해야하죠..


사실 문제를 풀 때 리스트를 쓰는 경우는 거의없습니다.

왜냐하면 문제를 풀 때 위에서 언급한 깐깐한 관리자가 없기 때문이죠 ㅎㅎ

그냥 배열을 백만단위 사이즈로 퐉 잡아놓고 사용해도 무방하기 때문에..



더 공부하시다 보면 어레이 더블링 이라던지 하면서 vector가 어떻게 구현됐는지 더 깊게 공부하시게 되겠지만

지금은 리스트와 어레이의 차이에 대해서 이정도만 아시면 될 것 같습니다 ㅎㅎ



qhrrkfl2   7년 전

그걸 물어본건 아니지만... 답변 감사합니다

 좀더 공부하니 왜 그런지 알았어요 노드가 연결되어있으니 순차적으로 불러올수밖에 없는 구조로 되어있더군요

댓글을 작성하려면 로그인해야 합니다.