JavaScrpt/자료구조

JavaScript Stack - 배열 객체의 메서드로 스택 만들기, Stack(Array - push,pop), Data Structures

carrotweb 2022. 4. 17. 18:10
728x90
반응형

JavaScript에서 Array 객체의 push() 메서드와 pop() 메서드를 사용하여 스택(Stack)처럼 사용할 수 있습니다.

 

 

스택(Stack)

스택(Stack)이란, 데이터를 쌓아 올리는 구조입니다.

스택의 모양을 컵이나 바닥이 막혀있는 기둥을 생각하시면 됩니다.

그래서 데이터를 추가하면 맨 위에 쌓이고 데이터를 가져가면 맨 위에 쌓인 데이터를 가져가게 됩니다.

즉, 가장 마지막에 추가한 데이터가 가장 먼저 나오는 것을 LIFO(last in first out)라고 합니다.

 

Array 객체의 push() 메서드를 사용하여 스택(Stack)에 데이터 넣기

var stack = [];

console.log(stack);
--> []
console.log(stack.length);
--> 0

// 데이터 넣기
stack.push("Data 1");

console.log(stack);
--> ['Data 1']
console.log(stack.length);
--> 1

// 데이터 넣기
stack.push("Data 2");

console.log(stack);
--> (2) ['Data 1', 'Data 2']
console.log(stack.length);
--> 2

 

Array 객체의 pop() 메서드를 사용하여 스택(Stack)에서 데이터 가져오기

// 데이터 가져오기
var popData = stack.pop();

console.log(popData);
--> Data 2
console.log(stack);
--> ['Data 1']
console.log(stack.length);
--> 1

 

 

 

스택(Stack) 객체 생성하기

JavaScript에서 객체 생성하는 방법은 "JavaScript Object - 객체 생성"(https://carrotweb.tistory.com/184)를 참고하시기 바랍니다.

JavaScript의 Array 객체로 만들기 때문에 크기에 제한 없이 사용할 수 있습니다. 그래서 데이터를 계속 넣어도 스택(Stack)의 오버플로(Overflow)가 발생하지 않습니다. 다음에 크기를 제한해서 만들어 보겠습니다.

function()으로 Stack 객체를 선언하겠습니다.

var Stack = function() {
	// Array 객체 생성
	this.stack = [];
	// Push 함수 - 데이터 넣기
	this.push = function(data) {
		this.stack.push(data);
	}
	// Pop 함수 - 데이터 가져오기
	this.pop = function() {
		return this.stack.pop();
	}
	// Length 함수 - 스택 크기 가져오기
	this.length = function() {
		return this.stack.length;
	}
}

 

function()으로 선언된 스택(Stack)을 생성(new) 하겠습니다.

var stack = new Stack();

console.log(stack);
--> Stack {stack: Array(0), push: ƒ, pop: ƒ, length: ƒ}
console.log(typeof stack);
--> object
console.log(stack instanceof Object);
--> true
console.log(stack instanceof Stack);
--> true

생성된 스택(Stack)은 function()으로 생성되었기 때문에 console.log()로 출력하면 Array처럼 배열이 나오지 않고 함수가 나옵니다. 그래서 별도로 함수를 만들어야 합니다.

stack 객체의 프로토타입 체인(Prototype Chain)은 다음과 같습니다.

stack > Stack > Object

 

생성된 스택(Stack)에 데이터를 넣고 가져오겠습니다.

// 데이터 넣기
stack.push("Data 1");

console.log(stack.length());
--> 1

// 데이터 넣기
stack.push("Data 2");

console.log(stack.length());
--> 2

// 데이터 가져오기
var popData = stack.pop();

console.log(popData);
--> Data 2
console.log(stack.length());
--> 1

 

 

getData 함수를 생성하여 지정된 인덱스에 있는 데이터를 가져오게 하겠습니다.

Stack 선언에 getData 함수를 추가합니다.

// GetData 함수 - 지정된 인덱스에 있는 데이터 가져오기
this.getData = function(index) {
	return this.stack[index];
}
var stack = new Stack();

// 데이터 넣기
stack.push("Data 1");
// 데이터 넣기
stack.push("Data 2");

// 스택 데이터 가져오기
for (var index = 0; index < stack.length(); index++) {
	var stackData = stack.getData(index);
	console.log(stackData);
}

--> Data 1
--> Data 2

 

Stack 선언에 다양한 함수를 추가하여 사용해 보시기 바랍니다.

728x90
반응형