是一種運算受限的線性表,其限制是僅允許在表的一端進行插入和刪除運算。人們把此端稱為棧頂,棧頂的第乙個元素被稱為棧頂元素,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱為進棧或入棧,它是把該元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱為出棧或退棧,它是把棧頂元素刪除掉,使其下面的相鄰元素成為新的棧頂元素。
在日常生活中,有許多類似棧的例子,如刷洗盤子時,依次把每個洗淨的盤子放到洗好的盤子上,相當於進棧;取用盤子時,從一摞盤子上乙個接乙個地向下拿,相當於出棧。又如向槍枝彈夾裡裝子彈時,子彈被乙個接乙個地壓入,則為進棧;射擊時子彈總是從頂部乙個接乙個地被射出,此為子彈出棧。
理解:1.棧的訪問時受限的,只能方位到站定的元素2.棧是一種抽象的資料結構,可以通過鍊錶陣列等實現
a.棧的實現
public
class
stackx
//入棧操作
public
void
pushtostackx(int data) else
}//出棧操作
public
intpopfromstackx()else
return topdata;
}//檢視棧操作
public
intpeepstackx()else
} //檢查棧是否為空
public
boolean
stackxisempty()
//檢查棧是否滿
public
boolean
stackxisfull()
}
b.測試棧的各項操作:
public
static
void
main(string args)
system.out.println("stackxtop=" + stackx.peepstackx());
system.out.println("stackxisempty=" + stackx.stackxisempty());
for (int i = 0; i < 10; i++)
system.out.print("stackxisempty="+stackx.stackxisempty());
}
結果顯示:
stackxtop=9
stackxisempty=false
stackxisempty=true
注意:1.棧操作中的問題,棧溢位,因此在棧的實現過程中,需要向使用者丟擲棧溢位****exception;
a.應用例項:
在控制台,輸入一下字串,檢查其中分隔符是否匹配
b.編寫**:
//輸入字串
public
static
void
getstringfromconsole()else
} catch (ioexception e)
}//檢查字串是否合法
public
static boolean checkstringsparatoisill(string str)
if(strtrimed.charat(i)==codeseparator.codeseparator_3)
if(strtrimed.charat(i)==codeseparator.codeseparator_5)
if(strtrimed.charat(i)==codeseparator.codeseparator_2)
if(strtrimed.charat(i)==codeseparator.codeseparator_4)
if(strtrimed.charat(i)==codeseparator.codeseparator_6)
}result=stackx.stackxisempty();
}else
return result;
}
codeseparator
public
inte***ce codeseparator ';
}
呼叫:
public
static
void
main(string args)
測試結果:
1請輸入乙個字串:
()resultstring={}()
輸入正確
3請輸入乙個字串:
aresultstring=a
輸入正確
理解:
此例,展示了,棧在**語法檢查中的應用。可以看到的是,棧,每次,只暴漏給我們乙個元素,適當的運用棧來編寫演算法,會解決很多問題。思考下,如果,現在你不知道棧,這種資料結構工具,上面的這個檢查語法案例,直接不從下手,只能是想到了,正規表示式,根據匹配,將所有的分隔符,從字串中剔除,結果字串沒有,分隔符,則語法正確,但,仔細想來,其中還是有棧的思想在裡面;
資料結構 3 棧和佇列
棧和佇列也算是 資料型別。以為都是在首位操作,棧和佇列 克服了 線性表新增刪除需要移動大量元素的弱點。棧僅在尾部進行插入和刪除,尾部叫做棧頂,表頭叫做棧底。後進先出。last in first out lifo 空棧。插入叫入棧,刪除元素叫出棧。順序棧,的順序儲存結構是利用一組 位址連續的儲存單元,...
《資料結構》 3棧和佇列
堆疊是限定插入和刪除操作都在表的同一端進行的線性表。特點為lifo 後進先出 堆疊的順序表示.c includetypedef struct 堆疊結構體定義 void create stack s,int msize 建立乙個能容納msize個單元的空堆疊 void destroy stack s ...
資料結構之棧和佇列
棧 stack 是限定僅在表尾進行插入和刪除操作的線性表。我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出 last in first out 的線性表,簡稱lifo結構。棧的插入操作,叫做進棧,也稱壓棧 入棧。類似子彈入彈夾。...