原文1
原文2
什麼是棧
棧相對於陣列結構做了一些限制。在使用陣列結構的時候,我們可以任意的取出陣列內的任何元素,也可以隨意在指定位置插入元素,而棧卻對元素的獲取與插入做了一些限制。**實現棧只允許訪問乙個資料項:即最後插入的資料。移除這個資料項後才能訪問倒數第二個插入的資料項。它是一種後進先出的資料結構。就好像打手槍,你的子彈夾,先裝進彈夾的子彈,最後被打出來(左輪另說)。
只對棧最基本的操作:出棧、入棧等操作進行了簡單實現,沒有對可能的異常進行處理。
public
class
stack
public
stack
(int size)
//入棧並返回入棧元素,棧頂下標加1,棧內元素加1
public e push
(e element)
//出棧並返回棧頂元素,棧頂下標減1,棧內元素減1
public e pop()
//返回棧頂元素
public e peek()
//判斷棧是否為空
public
boolean
isempty()
//返回棧內元素個數
public
intsize()
//tostring方法
@override
public string tostring()
stringbuilder sb =
newstringbuilder()
; sb.
('[');
//當棧內不為空時,拼接
for(
int i =
0; i < elementnum; i++
) sb.
(',');
}return null;
}}
實戰應用
實戰一:十進位制轉換二進位制
我們都知道,十進位制轉二進位制是將乙個數每次都除以2,一直到無法再除以2以後,倒著將每次除以2後獲得的餘數連線起來,就是正確的二進位制數,如下圖所以,我們可以看到,最先獲得的餘數是最後才被取走的,這是乙個很典型的棧結構的例子。每次除得的餘數,就對其進行入棧操作,最後再進行多次出棧操作就可以實現十進位制轉二進位制的功能了。**實現實戰二:分隔符匹配public
static string d2b
(integer number)
while
(!stack.
empty()
)return result;
}
如果我們寫的**中如果多了乙個「」,或者括號的順序錯亂,都會報錯。接下來我們就用棧來模擬這種分隔符匹配。所讀字元思路:當讀取一段程式時,如果發現它是左分隔符(),彈出棧頂元素,並且檢視它是否和該右分隔符匹配。如果它們不匹配,則程式報錯。如果到最後一直存在著沒有被匹配的分隔符,程式也報錯。
我們來看下面這個正確的字串:
a
,在棧中的變化過程:棧中內容a空
空**實現
public
class
brecketchecker
//檢查分隔符匹配的方法
public string check()
stack stack =
newstack()
;char
chars = input.
tochararray()
;for
(int i=
0;i:if
(!stack.
isempty()
)'))
return
"**有誤;位置:"
+ i +
";**:"
+ achar;
//不為三種正確情況,出錯
}else
default
:break;}
}if(stack.
isempty()
)return
"**有誤;有括號沒有關閉";}
}
資料結構 棧 棧
可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...
資料結構 棧
例子 棧是一種被限制在只能在表的一端進行插入和刪除運算的線性表。區域性變數是用棧來儲存的 可以進行插入和刪除的一端稱為 棧頂 top 另一端稱為 棧底 bottom 當表中沒有元素時 表長為0的棧 稱為 空棧。棧的修改是按 後進先出的原則進行,因此棧被稱為後進先出 last in first out...
資料結構 棧
1.棧stack 是限定僅在表尾進行刪除和插入操作的線性表。允許插入刪除的一端叫做棧頂top,另外一端叫做棧底bottom。棧又稱為後進先出 lifo 的線性表。即表尾是指棧頂。2.順序棧 定義 top指向可存入元素的位置。typedef struct stacktypestacktype 插入 進...