title: 数据结构 JavaScript实现 栈
date: 2021-6-9 22:55:53
author: Xilong88
tags: 数据结构
基于JavaScript类的栈
/**
* @description :Stack based on JavaScript Class
* @method : push(element);
* pop();
* peek();
* isEmpty();
* clear();
* size();
* print();
*/
class Stack {
constructor() {
this._items = {};
this._count = 0;
}
push(element) {
this._items[this._count] = element;
this._count++;
}
pop() {
if (this.isEmpty()) return undefined;
this._count--;
const res = this._items[this._count];
delete this._items[this._count];
return res;
}
size(){
return this._count;
}
isEmpty(){
return this._count === 0;
}
peek(){
return this._items[this._count-1];
}
clear(){
this._items = {};
this._count = 0;
}
print(){
let res = " ";
for(let i = 0 ; i<this._count;i++){
res+=this._items[i]+" ";
}
console.log("["+res+"]");
}
}
module.exports = Stack;
console.log("stack.js loaded success")
基于数组的栈
/**
* @description:Stack based on Array.
* @methds : push(element);
* pop();
* peek();
* isEmpty();
* clear();
* size();
* print();
*/
class StackArray {
constructor() {
this._items = [];
}
push(element) {
this._items.push(element);
}
pop() {
this._items.pop();
}
peek() {
return this._items[this._items.length - 1];
}
isEmpty() {
return this._items.length === 0;
}
clear() {
this._items = [];
}
size() {
return this._items.length;
}
print() {
console.log(this._items);
}
}
module.exports = StackArray;
console.log("stack-array.js loaded success")
测试数组栈
let StackArray = require('./stack-array');
console.log(StackArray);
// push(element(s));
// pop();
// peek();
// isEmpty();
// clear();
// size();
let myStackArray = new StackArray();
myStackArray.push(1);
myStackArray.print();
myStackArray.push(2);
myStackArray.print();
myStackArray.pop();
myStackArray.print();
console.log(myStackArray.peek());
myStackArray.pop();
console.log(myStackArray.isEmpty());
myStackArray.push(1);
myStackArray.print();
myStackArray.clear();
console.log(myStackArray.size());
console.log('Test Over')
测试类栈
let Stack = require('./stack');
console.log(Stack);
let myStack = new Stack();
myStack.push(1);
myStack.print();
myStack.push(2);
myStack.print();
console.log(myStack.peek());
myStack.pop();
myStack.print();
myStack.clear();
myStack.print();
console.log(myStack.isEmpty());
栈的应用实例,进制转化,第一个是二进制转化,后面可以自定义进制,最高35进制
let Stack = require('./stack');
console.log(Stack);
function decimalToBinary(decNumber){
const remStack = new Stack();
let number = decNumber;
let rem;
let binaryString = '';
while(number > 0 ){
rem = Math.floor(number % 2);
remStack.push(rem);
number = Math.floor(number / 2);
}
while(!remStack.isEmpty()){
binaryString += remStack.pop().toString();
}
return binaryString;
}
function baseConverter(decNumber,base){
const remStack = new Stack();
const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let number = decNumber;
let rem;
let binaryString = '';
if(!(base>=2 && base <=36)){
return '';
}
while(number > 0 ){
rem = Math.floor(number % base);
remStack.push(rem);
number = Math.floor(number / base);
}
while(!remStack.isEmpty()){
binaryString += digits[remStack.pop()];
}
return binaryString;
}
console.log(baseConverter(100345,35))