1. 程式人生 > 實用技巧 >線性結構_棧結構

線性結構_棧結構

棧結構

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             this
.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 }
View Code