程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 數據結構 棧 Stack,

C# 數據結構 棧 Stack,

編輯:C#入門知識

C# 數據結構 棧 Stack,


 

棧和隊列是非常重要的兩種數據結構,棧和隊列也是線性結構,線性表、棧和隊列這三種數據結構的數據元素和元素的邏輯關系也相同

差別在於:線性表的操作不受限制,棧和隊列操作受限制(遵循一定的原則),因此棧和隊列也稱為受限制的線性表。

 

棧的定義:操作在表的尾端進行的線性表,棧頂:TOP,棧底:Bottom。棧中沒有數據:空棧Empty Stack

表示方法:S=(a1,a2,a3,a4……..an)a1為棧底的元素,an為棧頂的元素.這N個數據按照先後順序插入到棧內,找出棧內數據則相反

遵循的原則(Last In First Out 即 LIFO) 或者 (First In Last Out 即 FILO)

 

 

       image

image

 

 

現實生活中也有很多列子:洗盤子,用盤子

 

C#2.0 以下版本只提供了非泛型的 Stack 類,該類繼承了 ICollection、 IEnumerable 和 ICloneable 接口。 C#2.0 提供了泛型的

Stack<T>類,該類繼承 了 IEnumerable<T>、ICollection 和 IEnumerable 接口。

 

 

棧的存儲和實現

 

1.順序棧 :用一塊連續存儲的空間來存儲棧中的元素,連續的空間就是數組表示了。

2.鏈棧:在線性鏈表的基礎上進行操作的,也就說存儲結構采用的是鏈表的形式而操作采用的是FILO方式。

image

 

 

生活中的實例

 

除了洗盤子是不是還有其他的使用方式呢?

 

1.數值轉換 是將非負數的十進制轉換成其他進制的數,一般的解決方法是輾轉相除法,例如:十進制5142轉

成八進制:

 

image

 

有圖我們可以看出 (5142)10=(12026)8

轉換思想:

 

1.判斷N不為0 N%8壓入到棧中

2.判斷N不為0 N%8壓入到棧中

最後N為0 停止,從而棧中的數據全部一個一個的POP得到八進制數值。

 

2.程序設計中常用的問題:括號匹配問題,簡化起見,只有兩種括號匹配即:()和[] 嵌套的順序是任意的

([]()) 匹配 [()[()][]] 匹配 [(]) 不匹配,加入有一堆這樣的匹配的符號怎麼判斷呢?

 

思想:1.如果棧為空,則PUSH

2.如果括號和棧頂的括號匹配,則將棧頂的括號POP

3.如果括號和棧棧頂的括號不匹配,則將括號PUSH

4.最後結束時候判斷棧是否為空,為空則匹配,不為空則不匹配

 

3.常用的算術表達式…..可以自己思考一下……

 

 

未完待續………

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved