一道js程式設計題:用js實現棧的出棧,入棧等操作
阿新 • • 發佈:2019-01-11
這是4月份快手前端實習筆試的一道程式設計題,要求是實現:
入棧:NumberStack.push(num) 、出棧:NumberStack.pop() 、找出棧中第n大的數:NumberStack.max(n)
//下面是我的版本
function NumberStack() {
this.stack = []; //棧的定義
}
NumberStack.prototype.push = function (num) {
if (typeof num != "number") return false;
this.stack.push(num);
};
NumberStack.prototype.pop = function () {
if(this.stack.length>0){
let last = this.stack.pop();
return last;
}
};
NumberStack.prototype.max = function (n) {
let newArr = [].concat(this.stack);
return newArr.sort()[n-1];
};
另外下面是在牛客網上另一個朋友寫的,我覺得比我得要好一些
function NumberStack(){
this.stack=[];//儲存棧
this.maxStack=[];//輔助棧,從小到大的排序
}
NumberStack.prototype.push=function(num){
if(Object.prototype.toString.call(num)!="object Number") return false;
this.stack.push(num);
if(!this.maxStack.length){
this.maxStack.push(num);
}else{
let len=his.maxStack.length;
for(let i=0;i<len;i++){
if (num<this.maxStack[i]){
this.maxStack.splice(i,0,num);//將num插入maxStack到合適的位置
break;
}
}
}
}
NumberStack.prototype.pop=function(){
let num=this.stack.pop();
this.maxStack.splice(this.maxStack.indexOf(num),1);//將num從maxStack中刪除
return num;
}
NumberStack.prototype.max=function(n){
if(n<1||n>this.maxStack.length) return false;
return this.maxStack[this.maxStack.length-n];
}