1.堆疊結構
-
是一種受限的線性結構,
-
特點:先進后出
2.使用TS實作
1 //封裝一個堆疊 使用泛型類 2 class ArrayStack<T=any>{//給一個默認值為any型別 3 //定義一個陣列,用于存盤元素 4 private data:T[]=[] 5 //push:將元素壓入堆疊中 6 push(e:T):void{ 7 this.data.push(e) 8 } 9 //pop方法:將堆疊頂的元素彈出堆疊(回傳出去并從堆疊頂移除) 10 pop():T|undefined{ 11 return this.data.pop()//pop回傳的是洗掉的元素 12 } 13 //peek方法:看一眼堆疊頂元素 14 peek():T|undefined{ 15 return this.data[this.data.length-1] 16 } 17 //isEmpty 18 isEmpty():boolean{ 19 return this.data.length===0 20 } 21 size():number{ 22 return this.data.length 23 } 24 }
3.使用JS實作
1 // 堆疊類 2 function Stack() { 3 // 堆疊中的屬性 4 var items = [] 5 6 // 堆疊相關的方法 7 // 壓堆疊操作 8 this.push = function (element) { 9 items.push(element) 10 } 11 // 出堆疊操作 12 this.pop = function () { 13 return items.pop() 14 } 15 // peek操作 16 this.peek = function () { 17 return items[items.length - 1] 18 } 19 // 判斷堆疊中的元素是否為空 20 this.isEmpty = function () { 21 return items.length == 0 22 } 23 // 獲取堆疊中元素的個數 24 this.size = function () { 25 return items.length 26 } 27 }
4.相關題目
4.1 十進制轉二進制
1 function decToBinary(decimal:number):string{ 2 let stack=new ArrayStack<number>() 3 4 //while:不知道回圈次數,知道回圈終止條件,for:知道回圈次數 5 while(decimal>0){ 6 let result=decimal%2 7 stack.push(result) 8 decimal=Math.floor(decimal/2) 9 } 10 let str='' 11 while(!stack.isEmpty()){ 12 str+=stack.pop() 13 } 14 return str 15 }
4.2有效的括號
1 function isVaild(str:string):boolean{ 2 //創建一個堆疊結構 用于把存放右括號 3 let stack=new ArrayStack() 4 //遍歷字串中每一個字符,當遇到一個左括號就往堆疊里面添加對應的右括號,當遇到右括號時,就能讓它與堆疊彈出的元素(剛添加進去的)比較,如果不相等,就說明沒有成對出現,重要的就是一一對應(相應的左括號對應相應的右括號), 5 for(let i=0;i<str.length;i++){ 6 let item=str[i] 7 switch(item){ 8 case '(': 9 stack.push(')') 10 break; 11 case '{': 12 stack.push('}') 13 break; 14 case '[': 15 stack.push(']') 16 break; 17 default: 18 if(item!==stack.pop())return false 19 break; 20 } 21 } 22 //只有堆疊為空的時候,表明括號既一一對應又是雙數 23 return stack.isEmpty() 24 25 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/550334.html
標籤:其他
上一篇:在國內如何輕松用上GPT4介面?
下一篇:學會提示-AI時代職場必修課
