웹 개발 메모장
[자바스크립트] List 리스트 클래스 본문
리스트 클래스 구현
자바스크립트에서 다음과 같은 스펙을 가지는 리스트를 구현해봅시다.
변수 | 설명 |
listSize |
리스트의 길이를 저장하는 변수 |
pos |
리스트 탐색 관련 기능을 위해 위치를 나타내는 변수 |
dataStore |
실제 값을 저장하는 배열 |
함수 |
설명 |
append | 리스트 뒤에 요소를 추가하는 함수 |
insert(element, after) | 요소를 원하는 위치에 추가하고 그 결과를 boolean 으로 반환하는 함수 |
find(element) | 값을 통해 리스트의 요소를 찾아 index를 반환하는 함수 |
get(position) | index를 통해 리스트의 요소를 찾아 반환하는 함수 |
remove(element) |
값을 통해 리스트의 요소를 삭제하고 그 결과를 boolean 으로 반환하는 함수 |
clear() |
리스트 내용을 전부 삭제하여 초기화 시키는 함수 |
contains(element) |
리스트에 특정 요소가 있는지 그 결과를 boolean 으로 반환하는 함수 |
length() |
리스트의 길이를 반환하는 함수 |
front() |
리스트 탐색 관련 기능을 위한 pos 가 맨 앞을 보게 하는 함수 |
end() |
리스트 탐색 관련 기능을 위한 pos 가 맨 뒤를 보게 하는 함수 |
prev() | 리스트 탐색 관련 기능을 위한 pos 가 이전 위치를 보게 하는 함수 |
next() | 리스트 탐색 관련 기능을 위한 pos 가 다음 위치를 보게 하는 함수 |
currPos() | 리스트 탐색 관련 기능을 위한 pos 가 보고 있는 현재 위치를 반환 하는 함수 |
moveTo(position) | 리스트 탐색 관련 기능을 위한 pos 가 특정 위치를 보게 하는 함수 |
toString() |
리스트 요소들을 문자열로 반환하는 함수 |
리스트 구현 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | function List() { this.listSize = 0; this.pos = 0; this.dataStore = []; this.clear = clear; this.find = find; this.toString = toString; this.insert = insert; this.append = append; this.remove = remove; this.front = front; this.end = end; this.prev = prev; this.next = next; this.length = length; this.currPos = currPos; this.moveTo = moveTo; this.getElement = getElement; this.length = length; this.contains = contains; this.get = get; } // 배열 뒤에 요소 추가하는 함수 function append(element) { this.dataStore[this.listSize++] = element; } // 요소의 index를 구하는 함수 (존재하지 않는 경우 -1 반환) function find(element) { for(var i=0; i<this.dataStore.length; i++) { if(this.dataStore[i] == element) { return i; } } return -1; } // 요소를 삭제하고 그 결과를 boolean 으로 반환하는 함수 function remove(element){ var foundAt = this.find(element); if(foundAt > -1) { this.dataStore.splice(foundAt, 1); --this.listSize; return true; } return false; } // 리스트의 길이를 반환하는 함수 function length(){ return this.listSize; } // 리스트 요소를 확인하는 함수 function toString() { return "["+this.dataStore+"]"; } // 요소를 원하는 위치에 추가하고 그 결과를 boolean 으로 반환하는 함수 function insert(element, after){ var insertPos = this.find(after); if(insertPos > -1) { this.dataStore.splice(insertPos+1, 0, element); ++this.listSize; return true; } return false; } // 리스트의 모든 요소를 삭제하는 함수 function clear() { delete this.dataStore; this.dataStore.length = 0; this.listSize = 0; } // 리스트에 특정 요소가 있는지 그 결과를 boolean 으로 반환하는 함수 function contains(element) { for(var i=0;i<this.dataStore.length;i++) { if(this.dataStore[i] == element) { return true; } } return false; } // 리스트 탐색 관련 기능을 위한 pos 가 맨 앞을 보게 한다. function front() { this.pos = 0; } // 리스트 탐색 관련 기능을 위한 pos 가 맨 뒤를 보게 한다. function end() { this.pos = this.listSize-1; } // 리스트 탐색 관련 기능을 위한 pos 가 이전 위치를 보게 한다. function prev() { if(this.pos > 0) --this.pos; } // 리스트 탐색 관련 기능을 위한 pos 가 다음 위치를 보게 한다. function next() { if(this.pos < this.listSize-1) { ++this.pos; } } // 리스트 탐색 관련 기능을 위한 pos 가 보고 있는 현재 위치를 반환 한다. function currPos() { return this.pos; } // 리스트 탐색 관련 기능을 위한 pos 가 특정 위치를 보게 한다. function moveTo(position) { this.pos = position; } // pos 가 보고 있는 현재 위치의 값을 반환 한다. function getElement(){ return this.dataStore[this.pos]; } // index 로 요소를 반환하는 함수 function get(position){ return this.dataStore[position]; } | cs |
리스트 사용 예제
1 2 3 4 5 6 7 8 | var names = new List(); names.append("A"); names.append("B"); names.append("C"); names.append("E"); names.insert("D", "C"); alert(names.toString()); | cs |
|
'옛날.. > 자료구조' 카테고리의 다른 글
[자바스크립트] 이중 연결 리스트 (doubly Linked List) 클래스 (0) | 2018.02.09 |
---|---|
[자바스크립트] LinkedList 연결 리스트 클래스 (1) | 2018.02.09 |
[자바스크립트] Queue 큐 클래스 (0) | 2018.02.09 |
[자바스크립트] Stack 스택 클래스 (0) | 2018.02.09 |