Introducing. List.
본 스터디는 열혈강의 자료구조 - 프리렉이란 교재로 진행된다. 더욱 자세한 내용은 해당 책을 참고하기 바란다. 정말 괜찮은 책이다.
Introducing. List.
리스트 자료구조.
리스트 : 가장 단순한 자료구조지만 가장 널리 사용되고 기초적인 자료구조. 스택, 큐, 트리, 그래프 등 다른 여러 자료구조 구현에도 사용됨.
리스트는 자료가 Sequential하게 연결된 선형구조
를 의미.
배열은 가장 쉬운 리스트 자료구조이다.
자료의 제거.
예를 들어 배열(Array)에 자료가 순서대로 정리되어 있다 생각해 보자.
|A|B|C|D|E|
여기에서 내가 C
를 제거하게되면, 그 자리가 비게되고, 그걸 매꾸기위해 뒤에서부터 차례대로 한칸씩 앞으로 밀어줘야한다.
|A|B| |D|E| => |A|B|D|E| |
3번째 C
자리게 계속 그냥 비어있어도 되지 않을까?
그런데 그렇게 되면 문제가 생긴다. 배열상에 공간이 있지만 그 공간이 비어있는지를 확인할 수 없어 그 자리에 자료를 추가하기가 힘들어진다.
자료의 추가.
마찬가지 예시를 보며 확인해 보자.
|A|B|C|D|E|
여기에 X
를 추가하고 싶다고 하자. 하필 추가하고 싶은 곳이 C
와 D
사이라면 어떨까?
|A|B|C|D|E| |
|A|B|C| |D|E|
|A|B|C|X|D|E|
먼저 한칸씩 D
와 E
를 밀어서 자리를 확보한다. 물론 이때 배열에 여유 공간이 있어야 한다. 없다면 추가가 불가능하다. 그리고 삽입하면 끝.
리스트 자료구조의 포인터를 이용한 구현.
리스트 자료구조는 아래 모식도와 같이 포인터를 이용하여 구현도 가능하다. 포인터로 구현시 배열과 달리 고정된 사이즈가 아니므로, 동적으로 할당하여 제한 없이 자료를 저장할 수 있다. 뿐만 아니라 중간에 있는 자료를 제거하거나 추가할 때, 포인터만 재설정하면 되므로 배열 리스트에서 처럼 중간 공백을 없애기 위한 자료의 이동도 불필요하다.
리스트의 추상 자료형.
Operation | 입력(input) | 출력(Output) | |
---|---|---|---|
리스트 생성 | createList() | 최대 원소 개수 n | 리스트 l |
리스트 삭제 | deleteList() | 리스트 l | N/A |
원소 추가 가능 여부 | isFull() | 리스트 l | T/F |
원소 추가 | addElement() | 리스트 l, 원소 위치 p, 원소 e | 성공 or 실패 여부(T/F) |
원소 제거 | removeElement() | 리스트 l, 원소 위치 p | 성공 or 실패 여부(T/F) |
리스트 초기화 | clearList() | 리스트 l | N/A |
원소 갯수 | getListLength() | 리스트 l | 원소의 개수 |
원소 반환 | getElement() | 리스트 l, 원소 위치 p | 원소 e |
책 저자가 객체 지향 프로그래머라 그 스타일을 쓰려고 하는지, 굳이 동적으로 배열을 할당하고 해제한다. 깊이 담긴 이유는 모르겠다. 그냥 미리 선언된 배열로 해도 되는데.
인덱스는 0번부터 시작(0-based-index
)하는게 원칙이다. 따라서 원소 위치 p
는 0번부터 시작해야한다.
그리고 디버깅 용도로 사용할 전체 원소를 보여주는 displayList()
등이 필요할 수도 있다.
'Engineering' 카테고리의 다른 글
Introducing. Stack. / 스택 자료구조 (0) | 2014.11.07 |
---|---|
TF-IDF(Term Frequency - Inverse Document Frequency) / 단어 빈도와 역문서 빈도. (0) | 2014.11.07 |
자료구조란? / 알고리즘이란? / 시간복잡도(Time complexity) / 빅오 표기법 (0) | 2014.10.29 |
RSS 피드 표준의 구조 ( 채널, 아이탬등 ) (0) | 2014.08.19 |
리눅스 디바이스 드라이버 Linux device driver / 읽기 read() / 쓰기 write() / 열기 open() / 닫기 close() - 1 (1) | 2014.05.29 |
Core network와 Access network (0) | 2014.03.18 |
인터넷이란 무엇인가?(구성,서비스), 프로토콜이란 무엇인가? (0) | 2014.03.18 |
SIC/XE의 구조(Architecture), SIC과 어떻게 다른가?, Special symbols (0) | 2014.03.06 |
SIC(Simplified Instructional Computer)의 구조(Architecture), 명령어 포멧(Instruction formats), 주소 형식(Addressing modes) (1) | 2014.03.06 |
시스템 소프트웨어란?(응용 소프트웨어와 시스템 소프트웨어의 차이) (0) | 2014.03.03 |