Stack & Queue

조양권·2021년 5월 18일
0

JS

목록 보기
10/17

자료구조

우리가 코드를 작성할때 고려해야 할것은 너무 많지만 그중에서도 가장 고려해야 할것은 데이터의 입/출력 형태를 파악하거나 결정해야 한다. 그리고 입력 => 출력 사이의 어떤 로직이 필요한지를 결정해야 한다. 이런 과정들이 연쇄적으로 연결,확장 되면서 우리가 말하는 프로그래밍이 되어간다.

또한 시간복잡도(Time Complexity)와 공간복잡도(Space Complextity)를 고려하지 않을 수 없다. 아무리 주요 자료구조와 알고리즘이 라이브러리로 존재한다 하더라도 단순한 반복문이 1시간이 넘어서야 HTTP요청에 응답할 수 있다면 해당 로직은 사용할 수 없다.

자료구조를 이해하는 것은 적절한 동작시간 안에 적절한 메모리로 데이터를 처리할 수 있다는 것을 의미한다. 최적 코드는 아니더라도 허용 가능한 성능을 갖는 코드를 짜는 능력은 매우 주요하다. 자료구조와 알고리즘은 시간복잡도와 공간복잡도를 계산하는 방법을 알려주고 가장 많이 쓰이는 자료구조와 알고리즘을 통해 복잡도를 계산하는 방법을 이해시키는 것이다.

Stack

stack이란 한쪽 끝에서만 자료를 넣고 뺄 수 있는, 제한적인 입출구조가 있는 LIFO(Last In Frist Out) 자료구조 이다.

stack은 제일 마지막에 stack된 요소부터 동작하는 구조를 지니고 있다. 이러한 원리로 undo, redo와 같은 동작을 구현할 때 사용된다.

method

js에서는 array와 그 메소드를 활용해서 간단하게 stack을 구현할 수 있다.

  • push() : 가장 마지막에 데이터를 넣어줌
  • pop() : 가장 마지막의 데이터를 꺼냄(제거후 반환)
  • peek() : 가장 마지막의 데이터를 보여줌
class stack(){
 constructor(){
  this._arr = [];
 }
 push(item){
  this._arr.push(item)
 }
 pop(){
  return this._arr.pop()
 }
 peek(){
  return this._arr[this._arr.length - 1]
 }
}
const stack = new stack()

스택은 서로 관계가 있는 여러 작업을 연달아 수행하면서 이전의 작업내용을 저장하는데에 사용할 수 있다.

Queue

queue는 데이터를 집어넣을수 있는 선형적인 자료구조이다. 먼저 집어넣은 데이터가 먼저 나오며 이러한 특징을 FIFO(First In First Out)라고 부른다.

method

queue의 메소드는 데이터를 집어넣는 enqueue, 데이터를 추출하는 dequeue가 있다.

class Queue(){
 constructor(){
  this._arr = []
 }
 enqueue(item){
  this._arr.push(item)
 }
 dequeue(){
  return this._arr.shift()
 }
}
const queue = new Queue()

큐는 순서대로 처리해아할 작업을 임시로 저장해두는 버퍼로서 많이 사용된다.

profile
할 수 있는 것이 늘어나는 즐거움

0개의 댓글