線性結構_棧結構
阿新 • • 發佈:2020-09-12
棧結構
1.棧(Stack)一種受限的線性結構
1.特點:
1.只有一個口
2.先進後出,後進先出
3.元素按照進棧順序從棧底排到棧頂
2.函式呼叫棧:
假如函式A呼叫函式B,函式B呼叫函式C
則在執行的過程中,先將A壓入棧,由於A沒有執行完,所以不會彈出棧,
然後A中呼叫了B函式,B函式也被壓入棧,由於B沒有執行完,所以不會彈出棧
然後A中呼叫了C函式,C函式也被壓入棧,並且在棧頂,
隨後C執行結束,C函式被彈出棧,
緊接著B函式執行結束,B函式被彈出棧
緊接,A函式執行結束,A函式彈出棧
遞迴壓棧(容易棧溢位)
2.棧相關的面試題
1.有六個元素654321順序進棧,則下列不合法的出棧順序為:()
A:543612B:453216
C:346521D:234156
答案為C,注意身審題,棧中大數在下,小數在上,並且並不是說一次性全部進棧
3.棧結構的實現
1.棧結構的實現有兩種方式(即儲存資料的方法)
基於陣列
基於連結串列
2.棧常見的操作方法
1.push()新增一個新的元素到棧頂
2.pop()從棧頂移除一個元素,並且將該元素返回
3.peek()返回棧頂元素,此時棧沒有被修改
4.isEmpty()棧是都為空,為空返回true,不為空返回false
5.size()返回棧的長度,即棧中元素的個數
6.toString()將棧結構中的內容以字元形式返回
4. 棧結構的函式封裝
1 // 1. 封裝棧類 2 function Stack(){ 3 // 棧的屬性 4 // 1. 初始化儲存棧的陣列 5 this.items = []; 6 7 // 2. 棧的簡介 8 /*************************************************/ 9 // 棧的相關操作方法 10 // 1. 將元素壓入棧 11 Stack.prototype.enStack = function(element){ 12 thisView Code.items.push(element); 13 } 14 15 // 2. 從棧中取出元素 16 Stack.prototype.deStack = function(){ 17 return this.items.pop(); 18 } 19 20 // 3. 檢視棧頂元素 21 Stack.prototype.peek = function(){ 22 return this.items[this.items.length - 1]; 23 } 24 25 // 4. 檢視棧是否為空 26 Stack.prototype.isEmpty = function(){ 27 return this.items.length == 0; 28 } 29 30 // 5. 檢視棧的元素個數 31 Stack.prototype.size = function(){ 32 return this.items.length; 33 } 34 35 // 6. 將棧中的內容以字元的形式返回 36 Stack.prototype.toString = function(){ 37 // [1, 6, 4, 8, 9, 4] => "1 6 4 8 9 4" 38 var res = "" 39 for(var i = 0; i < this.items.lenght; i++){ 40 res += this.items[i] + " "; 41 } 42 return res; 43 } 44 }