일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- @Transaction isolation
- Docker Desktop 쓰고싶다
- mock stub spy
- ECMAScript
- mock stub
- webpack
- Vue+Typescript
- TCP/IP
- frontend
- Mock vs Stub
- enum
- 자바스크립트
- DI
- Rancher Desktop설치
- 트랜잭션 격리
- docker desktop 대체
- vue store
- HTTP란
- Spock Mock
- TypeScript
- 타입스크립트
- Spock Stub
- Spock Mock Stub Spy
- nuxtjs/composition-api buildModules
- Javascript
- 공짜로 Docker Desktop같은거 쓰기
- 의존성주입
- @Transaction propagation
- Spock Spy
- docker desktop 유료화 정책
- Today
- Total
끄적끄적
자료구조 개념 정리 - 스택,큐,덱 알아보기 본문
우리가 프로그래밍을 하며 선형구조에서
제일 많이 사용하는 자료구조 중 하나라고 할 법한 스택,큐,덱에 대해 알아보려 합니다.
제일 보편적이고 제일 많이 질문이 오고가는 내용이며, 필수적으로 알아야 할 내용인데요.
사실 이미 다 알고 계실 내용일 수도 있어요.
그만큼 많이 사용하는 내용입니다.
스택(Stack)
스택은 (Last in FirstOut) 이라고 많이 배우죠.
기억나시나요? 줄여서 LIFO라는말 많이 들어 보셨을꺼에요. 스택을 가르키는 말입니다.
간단하게 이해하자면 말의 뜻처럼 쌓는다는걸 뜻 합니다.
코드로 이해해보죠.
function Stack() {
this.datas = new Array();
}
Stack.prototype.push = function(data) {
this.datas.push(data);
}
Stack.prototype.pop = function() {
return this.datas.pop();
}
const stack = new Stack();
stack.push(1);
stack.push(2);
console.log(stack.pop()); // 2
console.log(stack.datas); // [1]
위와 같이 코드를 작성하고 실행을 해보시면 첫번째 콘솔에 2가 찍히고 두번째 콘솔에 [1] 가 찍히실 꺼에요.
배열에 있는 데이터를 컨트롤 할때 많이 쓰는 코드이기에 친숙하신 분들도 있으실꺼에요.
이처럼 스택은 마지막에 들어와서 그 반대로 값이 첫번째로 빠져나가는 구조입니다.
위에 문법이 조금 생소하신 분들이 있으실지 모르니 다른 방식으로 예제를 하나 더 보시죠.
class Stack {
constructor() {
this.datas = new Array();
}
push(data) {
this.datas.push(data);
}
pop() {
return this.datas.pop();
}
}
const stack = new Stack();
stack.push(1);
stack.push(2);
console.log(stack.pop()); // 2
console.log(stack.datas); // [1]
결과는 같습니다.
중요하지 않은 것 같지만 중요한 개념입니다.
큐(Queue)
큐는 FIFO(First in First Out)으로 처음 들어온 노드가 첫번째로 나간다는 뜻입니다.
백문이 불여일견 코드로 이해하죠.
오리지널을 주력으로 하시는 분들을 위해 마찬가지로 프로토타입으로 먼저 작성하죠.
function Queue() {
this.datas = new Array();
}
Queue.prototype.enqueue = function(data) {
this.datas.push(data);
}
Queue.prototype.dequeue = function() {
return this.datas.shift();
}
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
console.log(queue.dequeue()); // 1
console.log(queue.datas); // [2]
아까와는 다른 값이 나왔죠?
그리고 데이터를 넣었던 순서와 결과 값을 자세히 봅시다.
처음 넣었던 값이 shift를 통해 먼저 없어집니다. 그리고 [2]가 찍힙니다. 이게 큐라는 자료구조입니다.
클래스 문법으로 한번 다시 보죠
class Queue {
constructor() {
this.datas = new Array();
}
enqueue(data) {
this.datas.push(data);
}
dequeue() {
return this.datas.shift();
}
}
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
console.log(queue.dequeue()); // 1
console.log(queue.datas); // [2]
위와 결과는 같습니다.
굉장히 많이 쓰는 개념 중 하나이기에 숙지 하시면 도움이 될 꺼에요.
덱(Deque)
덱은 스택과 큐의 개념이 합해진 것이라 보면 이해하기 쉽습니다.
양쪽 끝에서 데이터를 넣고 뺄 수 있는 구조로 코드로 보는게 더 이해하기 편하시겠죠?
코드로 봅시다.
function Deque() {
this.datas = new Array();
}
Deque.prototype.push = function(data) {
this.datas.push(data);
}
Deque.prototype.pop = function() {
return this.datas.pop();
}
Deque.prototype.shift = function() {
return this.datas.shift();
}
Deque.prototype.unshift = function(data) {
this.datas.unshift(data);
}
const deque = new Deque();
deque.push(1);
deque.push(2);
console.log(deque.shift()); // 2
deque.unshift(3);
console.log(deque.pop()); // 1
이런식으로 스택과 큐의 개념을 합쳐서 사용하는 것을 데크형태라고 합니다.
위와같이 자바스크립트 내장 메서드에 이미 사용하기 쉽게 제공이 되어 있어 개념과 내용 숙지만 잘 되어 있어도 많은 도움이 될꺼에요.
마지막으로 클래스형태의 코드를 짜고 끝내도록 하죠.
class Deque {
constructor() {
this.datas = new Array();
}
push(data) {
this.datas.push(data);
}
pop() {
return this.datas.pop();
}
shift() {
return this.datas.shift();
}
unshift(data) {
this.datas.unshift(data);
}
}
const deque = new Deque();
deque.push(1);
deque.push(2);
console.log(deque.shift()); // 2
deque.unshift(3);
console.log(deque.pop()); // 1
자료구조의 선형구조에서 가장 기본적인 자료구조형태의 스택과 큐,데크에 대해 알아보았습니다.
우리가 익히 사용하는 것들이라 이론적으로 그리고 이러한 메서드 및 개념으로 조금 더 유연한 개발을 하시길 바랍니다.
' Computer Science > DataStructure' 카테고리의 다른 글
자료구조 개념 정리 - 트리 개념 및 기초 (0) | 2019.06.19 |
---|---|
자료구조 개념 정리 - 개념 및 종류 이해 (0) | 2019.06.15 |