본문 바로가기

그 외 대학 공부/자료 구조

자료 구조_1-1, List의 이해

리스트 - 자료를 순서대로 저장하는 자료구조.

-> 여러 개의 자료가 일직선으로 서로 연결된(Sequential) 선형 구조를 갖는 자료 구조의 통칭


ex) 폴더 이름 저장


1. 리스트의 종류


1) 배열 (list의 가장 직관적인 방법)

- 일반적인 배열과 같음. container의 크기를 일정하게 설정하여야 함.

- list의 중간에 자료를 지울 때, 자료를 지운 index의 뒷 부분부터 앞으로 한 칸씩 미뤄야 함.

- 반대로 자료를 추가할 때는 해당 index의 원소부터 오른쪽으로 한 칸씩 미룬 뒤 해당 index에 원소를 추가해     야 함.

2) 포인터를 이용한 list

- linked list라고 함.

- 각각의 원소에는 다음 index를 나타내는 pointer값이 있음.(양방향 linked list의 경우 이전 index의 pointer까지도 가지고 있음.)

- 때문에 자료의 크기는 유동적이고 메모리가 허용하는 내에서 추가를 계속 할 수 있음.

- 자료를 삭제하거나 추가할 때 앞 뒤 원소가 갖고 있는 pointer 값만 변경하면 되므로 위의 배열보다 쉽고, cost가 적음.


2. 리스트의 개념

리스트의 예를 통해서 리스트의 개념을 이해한다.


1) 문자 리스트


-> 여러 개의 문자를 차례로 저장.

2) 문자열 리스트


-> 무자열의 끝에는 \0이 추가가 됨. 이는 문자열의 끝을 표시하는 것임.

3) 행렬

아 이거 그리기 너무 힘드네요. 안그릴래 젠장 ㅋㅋㅋ


3*1 행렬 - 1개의 열로 이루어지고 이 열은 모두 3 개의 정수 자료를 저장

4*4 행렬 - 4개의 열로 이루어지고 이 열은 모두 4 개의 정수 자료를 각각 저장.


행렬의 경우 자료를 저장하고 있는 index가 적을 수 있다. 예를 들어 4*4 행렬에서 0이 아닌 값을 갖고 있는 index가 ( 1 , 1 ), ( 2 , 2 ), ( 4 , 4 ) 인 경우

행렬 전체를 저장하는 것 보다 위의 index번호와 해당 원소의 값을 저장하는 것이 memory 효율에 좋다.



4) 다항식의 저장


의 경우 각각의 배열에

4-0-2-1-#-#

을 저장.

 # 참고 : 위의 다항식에서는 의 계수가 0 이다. 보통의 경우 계수가 0 이면 표현하지 않지만, 프로그램에서는 저장이 필요하다.


여기 까지가 list의 개념 부분입니다.


list는 그렇게 어렵지 않은데 이유는 자료 구조를 배우는 입장에서는 배열을 많이 접해보았고, list의 종류중 한 가지가 배열이기 때문일 것입니다.


물론, 쉽게 array[] 로 만드는 것은 아니지만,,,,, (memory allocation 을 사용해서 만드는데 조금만 이해하면 그리 어려운 부분은 아닙니다.)


만들고 free 해주는 것만 하면, 나머지는 다른 배열 사용법과 같으니,,,, 직접 코딩을 하는 것도 그리 어렵지 않습니다.

자료구조_1-2부터 몇 chapter에서는 일단 array list 부분을 살펴보겠습니다. 내용이 꽤 많아서 언제쯤 linked list가 나올지 잘 모르겠네요 ㅎㅎㅎㅎ


?여러분의 댓글은 제게 매우 큰 힘이 됩니다!!!!?