1. 程式人生 > >一道js程式設計題:用js實現棧的出棧,入棧等操作

一道js程式設計題:用js實現棧的出棧,入棧等操作

這是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]; }