스택,큐에 대해서

박찬섭·2023년 5월 18일
0

알고리즘

목록 보기
1/15

스택(stack)

스택은 데이터가 쌓이는걸 처리하는 하나의 알고리즘 방식이다.

쉽게 생각하면 다음 그림과 같이 박스를 쌓고 꺼낼 때는 맨 위 에서 부터 꺼내듯

후입선출(Last In First Out : LIFO)의 방식이다. 예를 들어 우리가 페이지 뒤로 가기 버튼과 같은 기능들 또한 스택과 같은 형식으로 쌓이다가 뒤로 가기 버튼을 누르면 맨 마지막으로 봤던 페이지가 나오게 된다.

큐(queue)

큐는 데이터가 쌓일 때 맨 처음으로 들어온 녀석이 맨 처음으로 빠져나가는 방식이다.

쉽게 생각하면 우리가 버스를 기다릴 때 맨 처음부터 기다린 사람이 맨 처음 버스를 타듯이

선입선출(First In First Out : FIFO)의 방식이다. 예를 들어 자바스크립트에서 이벤트 함수와 같은 비동기 함수들은 WEP API가 처리하고 그 결과나 콜백 함수를 태스트 큐 자료구조에 넘겨주어 먼저 처리된 함수부터 다시 콜 스택으로 넘겨주는 방식이다.

스택구조 LIFO (JAVASCRIPT) 배열로 구현

function stack (){
	let item = [];

	this.push = function (a) {   //아이템의 맨뒤에 요소추가
		item.push(a);
	}
	
	this.pop = function (){      //아이템의 맨뒤에 요소제거 후 제거한 값 리턴
		let last = item[item.length-1]
		item.pop();
		return last;
	}

	this.peek = function () {    //아이템의 가장 마지막 요소 리턴
		return item[item.length-1];
	}

	this.isempty = function () {  //아이템이 비어있으면 true반환 아니면 false반환
		return item[0] == undefined ? true : false
	}

	this.showstack = function () { //아이템 전체리턴
		return item;
	}
}

const new_stack = new stack();
new_stack.push(5);
new_stack.push(3);
new_stack.push(2);
new_stack.push(7);
new_stack.push(9);
console.log(new_stack.peek()); //9;
console.log(new_stack.pop());  //9;
console.log(new_stack.pop());  //7;
console.log(new_stack.showstack()) //[5,3,2];

큐구조 FIFO (JAVASCRIPT) 배열로 구현

function queue (){
	let item = [];

	this.enqueue = function (a) {   //아이템의 맨뒤에 요소추가
		item.push(a);
	}
	
	this.dequeue = function (){      //아이템의 맨뒤에 요소제거 후 제거한 값 리턴
		let first = item[0]
		item.shift();
		return first;
	}

	this.first = function () {     //아이템의 맨처음 요소 리턴
		return item[0];
	}

	this.isempty = function () {  //아이템이 비어있으면 true반환 아니면 false반환
		return item[0] == undefined ? true : false
	}

	this.showqueue = function () {  //아이템 전체리턴
		return item;
	}
}

const new_queue = new queue();
new_queue.enqueue(5);
new_queue.enqueue(3);
new_queue.enqueue(2);
new_queue.enqueue(7);
new_queue.enqueue(9);
console.log(new_queue.first()); //5;
console.log(new_queue.dequeue());  //5;
console.log(new_queue.dequeue());  //3;
console.log(new_queue.showqueue()) //[2,7,9];

스택,큐 자료구조 프로그래머스 문제들

https://school.programmers.co.kr/learn/courses/30/parts/12081

profile
백엔드 개발자를 희망하는

0개의 댓글