使用js實(shí)現(xiàn)stack
棧的性質(zhì):先進(jìn)后出森篷,只能在棧頂插入和刪除
function Stack() {
this.stackData = []; //保存棧內(nèi)元素兼吓,初始化為一個(gè)空數(shù)組陶因;
this.top = 0;//棧頂位置步绸,初始為0;
this.push = push;//入棧
this.pop = pop;//出棧
this.peek = peek;//查看棧頂元素
this.clear = clear;//清空棧
this.length = length;//棧內(nèi)存放的元素個(gè)數(shù)
}
function push(element){
this.stackData[this.top++] = element;
}
function pop(){
return this.stackData[--this.top];
}
function length(){
return this.top;
}
function peek(){
return this.stackData[this.top-1];
}
function clear(){
this.top = 0;
}
/*測試stack的實(shí)現(xiàn) */
var s = new Stack();
s.push("aa");
s.push("bb");
s.push("cc");
console.log(s.length());//3
console.log(s.peek());//cc
var popped = s.pop();
console.log(popped);//cc
console.log(s.peek());//bb
之前有道某雷的前端筆試題就是需要用到j(luò)s實(shí)現(xiàn)棧來處理問題
題目大概就是:給你一個(gè)括號(hào)字符串显拜,字符串中含有()[]{},然后判斷該字符串中的括號(hào)是否合法匹配衡奥。
樣例輸入:
( [ { ] } )
輸出:不合法
樣例輸入:
( [ ] { ( ) } )
輸出:合法
function MatchBracket(BracketString){//函數(shù)名:匹配括號(hào),參數(shù):括號(hào)字符串
var s = new Stack();
var bs = Array.from(BracketString);
for(var i=0;i<bs.length-1;i++){
switch(bs[i]){
case '{':
case '[':
case '(':
s.push(bs[i]);//凡是左括號(hào)通通入棧
break;
case ')':
case ']':
case '}':
var topEle = s.pop();
if((topEle=="(" && bs[i]==")") || (topEle=="[" && bs[i]=="]") || (topEle=="{" && bs[i]=="}")){
break;
//判斷左括號(hào)與右括號(hào)是否能匹配上
}else{
console.log("不合法");
return;
}
}
}
if(s.top==0){
return "合法";
}else{
return "不合法";
}
}
完整代碼見Github: