스택 자료구조로 구현된 것들
- 웹 브라우저의 방문기록 : 가장 나중에 열린 페이지부터 보여준다.
- 역순 문자열 만들기 : 가장 나중에 입력된 문자부터 출력한다.
- 실행 취소 : 가장 나중에 실행된 것부터 실행을 취소한다.
이처럼 평소에 우리가 자주 쓰는 기능들 중 스택 자료구조를 이용하는 것들이 꽤나 많다. 그래서 오늘은 스택 자료구조를 직접 구현해볼 것이다.
상태 표시
- top ( ) : 스택의 마지막 요소가 나타내준다.
- empty ( ) : 스택이 비었다면 1을 반환하고 그렇지 않다면 0을 반환한다.
필요한 메소드
- pop ( ) : 스택 가장 마지막 요소를 뺀다.
- push ( ) : 가장 마지막에 요소를 추가한다.
배열 기반으로 구현하기
console.log("손쉬운 방법으로 스택 자료구조를 구현해봅시다.");
function Stack(){
this.top = -1;
this.data = [];
}
Stack.prototype.push = function(input) {
this.top++;
this.data.push(input);
return this.data[this.top];
}
Stack.prototype.pop = function(){
this.top--;
return this.data.pop();
}
Stack.prototype.size = function(){
return this.top+1;
}
const testStack = new Stack();
console.log("push "+testStack.push(3));
console.log("push "+testStack.push(3));
console.log("push "+testStack.push(3));
console.log("pop "+testStack.pop());
console.log("pop "+testStack.pop());
console.log("pop "+testStack.pop());
console.log("size "+testStack.size());
링크드리스트 기반으로 구현하기
console.log("안보고 다시 구현해봅시다");
// 일단 스택 객체를 만들자. 이 안에는 스택 전체의 정보들을 가지고 있어야 한다. 스택의 중요한 정보는 사이즈와 top에 있는 Node이다.
function Stack(){
this.top = null;
this.size = 0;
}
// 링크드리스트 기반으로 구현할 것이므로, Node 객체를 따로 만들어줘야 한다. 노드는 다음 객체를 지정하는 header 부분과 data 부분이다.
function Node(data){
this.next = null;
this.data = data;
}
// push의 주요 동작은 '주어진 정보를 넘기는 것'이며, this.size를 반환해준다. 또한 push된 값은 stack의 top이 되도록 지정해주고, Node의 next를 지정해줘야 한다.
Stack.prototype.push = function (data){
let newNode = new Node(data);
// console.log("newNode : "+newNode);
let temp = newNode.data;
// console.log("temp : "+temp);
// console.log("this.top : "+this.top);
newNode.next = this.top;
this.top = newNode;
// console.log("this.top : "+this.top);
return ++this.size;
}
// pop의 주요 동작은 가장 위에 있는 데이터를 스택에서 뺴는 것이며, 뺀 요소를 반환해준다. 또한 this.top을 재설정해주고, this.size를 줄여야한다.
Stack.prototype.pop = function() {
let popNode = this.top;
// console.log("this.top : "+this.top);
if(!this.top){
return false;
}
// this.top.data = null;
this.top = this.top.next;
this.size--;
return popNode;
}
const testStack = new Stack();
console.log(testStack.push(3));
console.log(testStack.pop());
반응형
'CS > 알고리즘' 카테고리의 다른 글
[DataStructure] 자바스크립트로 구현하는 '트리' 자료구조 (1) 이진트리 (0) | 2020.12.02 |
---|---|
[DataStructure] 자바스크립트로 구현하는 '연결리스트(Linkedlist)' 자료구조 (0) | 2020.11.24 |
자바스크립트로 구현하는 버블정렬(BubbleSort) (0) | 2020.10.22 |
자바스크립트로 구현하는 선택정렬(SelectionSort) (0) | 2020.10.22 |
댓글