[자료구조] 스택(Stack)
2021. 2. 22. 15:12ㆍFront-end/자료구조
728x90
반응형
스택(Stack)
- LIFO(Last In, First Out) 나중에 들어온 데이터가 먼저 나가는 형식의 자료구조
- 입구와 출구가 동일한 형태로 스택을 시각화할 수 있음.
- 대표적인 예시 : 박스 쌓기, 햄버거놀이, 실행취소(ctrl+z)
- 스택의 구현 방법
- 1차원배열: 구현이 상대적으로 쉬우나 인풋 사이즈를 미리 알아야 함
- 리스트: 구현이 상대적으로 어려우나 제한된 사이즈로부터 자유로움
주요 함수 및 프로퍼티
1) push : 데이터를 집어넣는 작업(뒤에서 부터 넣음)
2) pop : 데이터를 꺼내는 작업(뒤에서 부터 꺼냄)
3) peek : 맨 나중에 집어넣은 데이터를 확인 peek
4) top : 맨 나중에 집어넣은 데이터의 위치를 확인
5) size : 총 스택의 사이즈를 확인
6) clear : 스택을 비우기
7) isEmpty: 스택이 비었나 안비었나 확인 , 비었으면 true 리턴
8) print : 스택의 요소들을 문자열로 print
스택 만들기
스택을 나타내는 클래스를 직접 작성할 것이다. (※ 직접 작성한 것이므로 많이 부족할 수 있습니다)
class Stack{
constructor(){
this.arr = [];
}
push(item){
this.arr.push(item);
}
pop(){
// 배열의 길이가 0일 때(배열에 아무것도 없을 때) pop을 시도하면 false를 리턴
if(this.arr.length == 0)
return false;
return this.arr.pop();
}
top(){
return this.arr.length-1;
}
peek(){
return this.arr[this.arr.lenth-1];
}
size(){
return this.arr.length;
}
clear(){
this.arr = [];
}
isEmpty(){
return this.arr.length == 0;
}
print(){
console.log(this.arr.toString());
}
}
예제 1) 10진수->2진수 함수만들기
function convertToBinary(decNumber){ //decNumber(10진수 숫자)를 2진수로 바꿔주는 converToBinary 함수 작성
let binaryStack = new Stack(); //일단 stack 생성
let rem ; // rem은 나머지
let binaryString = '';
while(decNumber > 0){
rem = Math.floor(decNumber % 2);
binaryStack.push(rem);
decNumber = Math.floor(decNumber / 2);
}
while(!binaryStack.isEmpty()){
binaryString += binaryStack.pop().toString();
}
return binaryString;
}
console.log(convertToBinary(13));
예제2. 10진수 -> n진수
function decimalConverter2(decNumber, baseNumber){ //예: decimalConverter(100345, 8) 100345를 8진법으로 변환하기
let remStack = new Stack();
let rem;
let convertString = '';
digits = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];
while(decNumber > 0){
rem = Math.floor(decNumber % baseNumber);
remStack.push(rem);
decNumber = Math.floor(decNumber / baseNumber);
}
while(!remStack.isEmpty()) //remStack.isEmpty()가 false이면 비어있지 않은 배열이니까 이것은 비어있는 순간 !true = false가 되면서 멈춤
{
convertString += digits[remStack.pop()];
}
return convertString;
}
console.log(decimalConverter2(100345,16));
728x90
반응형
'Front-end > 자료구조' 카테고리의 다른 글
[자료구조] 집합 (0) | 2021.03.03 |
---|---|
[자료구조] 연결 리스트 - (2) doubly linked list (0) | 2021.03.03 |
[자료구조] 연결 리스트 - (1) Single Linked List (0) | 2021.03.02 |
재귀함수 (0) | 2021.02.24 |
[자료구조] 큐(Queue) (0) | 2021.02.23 |