자료구조 정리 1편
Stack
- LIFO(Last In First Out) 자료구조이다.
- 가장 최근에 일어난 일을 신경쓰고 빨리 처리하는 점에서 인간의 의식과도 닮아있다. 이때 처리되지 못하고 못한 오래된 ‘A’같은 일은 의식 바닥에 깔려있게 된다.
- 그 대신 ‘D’나 ‘C’같은 같은 최근 작업은 반응속도를 보장한다는 장점이 있다. 이런 자료구조를 다루기 위해서는 일을 넣는 push, 일을 빼는 pop 그리고 전체적으로 쌓여있는 양을 측정할 peek 같은 메서드가 필요하다.
- 미로문제를 풀때 가장 최근에 지나온길을 순서대로 기억하고 있는 점을 활용할 수 있다. 인간친화적 아니 물리친화적인 자료구조.
class Stack {
constructor() {
this.stack = [];
}
push(item) {
this.stack.push(item)
}
pop() {
return this.stack.pop();
}
peek() {
return this.stack.length + 1;
}
}
var stack = new Stack();
stack.push(1);
stack.push(2);
stack.pop(); // 2
stack.peek(); // 2
Queue
- FIFO (First In First Out)의 원칙으로 처리하는 자료구조이다. 은행의 대기열과 비슷하다. 대기열이 짧으면 바로 일을 처리하는 기적도 있을 수 있지만 대개는 줄을 서야한다.
- 그런 단점이 있지만 모든 작업이 공평하게 처리된다는 점에서 극단적인 대기시간을 가지는 문제는 없다는 장점을 가진다.
- 이런 Queue를 처리하기 위해선 가장 오래기다린 일, 즉 일들 중 가장 먼저 온 일을 처리하는 Dequeue. 새로 운 일을 대기열에 추가하는 enqueue. 대기열을 측정하는 Qlength가 필요하다.
class Queue {
constructor() {
this.queue = [];
}
dequeue(item) {
this.queue.push(item)
}
enqueue(item) {
return this.queue.shift();
}
qLength(){
return this.queue.length;
}
}
var myQueue = new Queue();
myQueue.dequeue("A"); // A
myQueue.dequeue("B"); // A B
console.log(myQueue.enqueue()); // A;
console.log(myQueue.qLength()); // 1;
Linked List
- Linked List는 Array같은 단일구조체와 대비되는 자료구조이다.
- Data, Next Adress로 구성되고 next가 다음 데이터를 가르킨다. 각 정보가 분리되어 있지만 정보를 찾아낼 연락망은 다 갖추어진 구조이다.
- 배열이 순차적인 페이지번호가 쓰여진 질서정연한 인명기록부라면 Linked List는 단일인명정보다. 대신 일련된 페이지 번호대신 다음 인명정보가 어디있는지 기록되어있다.
- 새로운 정보를 기입할 일이 생기면 Array는 전체 페이지번호를 하나하나 변경해야하는 반면 Linked List는 종이 한 장에 있는 Next Adress를 새 Linked List로 고치는 정도로 변경이 끝난다. 그래서 출입력에는 강점을 가진다.
- 대신 탐색에는 시간이 오래걸린다. 원하는 사람을 찾기 위해서 처음부터 하나하나를 순서대로 다 들춰봐야하기 때문이다.
class LinkedList {
data;
nextNode;
find ( num ){
return dListAddressfinde
}
input (item, 넣고 싶은 인덱스){
// NewList = new LinkedList
// PrevList = find(넣고 싶은 인덱스)
// NewList.nextnode = PrevList.nextnode
// PrevList.nextnode = NewList
}
delete (item){
}
}
Leave a comment