'배열 리스트'에 해당되는 글 2건

  1. 2012.12.25 배열 기반 리스트의 장점과 단점
  2. 2012.12.25 배열기반의 리스트 구현

배열 기반 리스트의 단점

- 배열의 길이가 초기에 결정되어야 한다. 변경이 불가능하다.

- 삭제의 과정에서 데이터의 이동(복사)가 매우 빈번히 일어난다.


배열 기반 리스트의 장점

- 데이터의 참조가 쉽다. 인덱스 값을 기준으로 어디든 한 번에 참조가 가능하다.


위의 장점 및 단점은 '연결 기반 리스트' 를 대상으로 비교한 결과이다.


보통 '리스트'라고 하면 '연결 기반 리스트' 를 떠올리고 혹자는 '배열 기반 리스트' 는 불필요하다고까지 말하는 경우가 있다. 하지만 이는 잘못된 것이다.

배열 기반 리스트도 나름의 장점이 있다. 그리고 그 장점은 연결 기반 리스트에는 없는 장점이다.


"배열 기반 리스트도 각종 자료구조의 구현에 중요한 도구이고, 그 자체로도 훌륭한 자료구조이다."





배열 기반 리스트의 활용(주소 값을 저장)


ArrayList.c

ArrayList.h


리스트를 활용하는 것이라 ArrayList.h, ArrayList.c 를 포함시켜야 한다.

이 중에서 헤더파일인 ArrayList.h의 typedef 선언은 다음과 같이 변경해야 한다.

typedef int LData;        (typedef 선언 변경)     →        typedef NameCard * LData;


그리고 NameCard라는 이름의 인식을 위해서 ArrayList.h에 다음 문장도 포함시켜야 한다.

#include "NameCard.h"





Posted by scii
:

헤더파일의 정의


어떠한 자료구조이건 간에 '자료구조의 구현''구현된 자료구조의 활용' 은 완전히 구분되도록 ADT를 정의해야 함을 기억해야 한다.


배열을 이용하는 방법.


리스트에 다양한 종류의 데이터를 저장할 수 있게 하기 위한 typedef 선언이 존재한다.


typedef int LData;                    // 리스트에 int형 데이터의 저장을 위한 선언


typedef ArrayList List;            // List는 배열 기반 리스트이다.

이렇듯 ArrayList에 List라는 이름을 별도로 부여한 것이 당장에는 큰 의미가 없어 보인다. 하지만 ArrayList라는 이름에도 typedef 선언을 해 놓으면, 다음과 같이 List에 다른 이름을 부여하는 것만으로도 사용하는 리스트의 종류를 바꿀 수 있다.


typedef LinkedList List;    // List는 연결 기반 리스트이다.

그래서 main 함수에서도 ArrayList가 아닌 List라는 이름을 이용하여 예제를 작성한 것이다.




함수의 정의


curPosition 변수는 저장된 값을 통해서 LFirst 함수와 LNext 함수가 참조해야 할 배열의 위치를 알려주는 변수이다. 그래서 curPosition은 0이 아닌 -1로 초기화한 것이며, 여기에는 아직 데이터의 차모가 진행되지 않았다는 의미가 담겨있다.


"어떠한 라이브러리를 사용하건 저장된 데이터의 조회를 위한, LFirst 함수의 호출과 같은 별도의 과정은 거치기 마련이다."



Posted by scii
: