棧是限制插入和刪除只能在乙個位置上進行的表,該位置是表的末端,也叫做棧頂。對棧的操作有進棧和出棧,進棧也叫做插入,出棧也就是刪除最後插入的元素。因此棧也被稱作lifo(後進先出)表。棧通常有兩種實現方式,陣列實現和鍊錶實現。
下面是棧的兩個小應用demo
字串逆序
由於棧後進先出的特性,所以棧可以用於字串的逆序。
public void reversestr(string str)
stringbuilder stringbuilder =new stringbuilder()
; while(!stack.isempty())
system.out.println
(stringbuilder.tostring()
);}
檔案資料字元平衡
乙個檔案中可能有幾兆的大小,檔案中可能會出現些許括號出現遺漏掉的情況,這時乙個有用的工具就是檢驗檔案中每個符號是否是成對出現。
/**
* @author l
* 棧的小demo,字元平衡,判斷檔案資料是否合法。
*/public boolean isvalid(file file) throws ioexception');
map.put
('《','》');
reader fd =new filereader
(file)
; stringbuilder str=new stringbuilder()
; int len;
while((len=fd.read()) !=-1)
stackstack=new stack<>();
for(int i=0;itostring
().length()
;i++)
else if(map.values().contains(cha))
else}}
//如果最後棧為空,則說明字元匹配正確,若棧中存在元素,則匹配不正確。
return stack.isempty()
;}
測試public static void main(string args)
catch (ioexception e)
}
測試結果hdbhd87654321
true
結語
不積跬步,無以至千里。充實自己,提公升自己。
資料結構 棧應用
一 算術表示式的中綴表示 把運算子放在參與運算的兩個運算元中間的算術表示式稱為中綴表示式。例如 2 3 4 6 9 算術表示式中包含了算術運算子和算術量 常量 變數 函式 而運算子之間又存在著優先順序,不能簡單地進行從左到右運算,編譯程式在求值時,不能簡單從左到右運算,必須先算運算級別高的,再算運算...
資料結構 棧的應用
要求 首先將運算元棧opnd設為空棧,而將 作為運算子棧opter的棧底元素,這樣的目的是判斷表示式是否求值完畢 2 依次讀入表示式的每個字元,表示式須以 結尾,若是運算元則入棧opnd,若是運算子,則將此運算子c與opter的棧頂元素top比較優先順序後執行相應的操作,具體操作如下 i 若top的...
資料結構 棧的應用
stack.h include include typedef char elemtype typedef struct stackstack,stackptr 初始化棧 void initstack stackptr s 判空 bool stackempty stackptr s 入棧 void ...