前幾次講了關於近期比賽的題目,我才疏學淺,只能講前2題。大家::>>諒解啊哈
今天我們來講一講關於c++中資料結構中線性表——棧。
首先,我們來總結一下棧的最大特點。
棧先進後出&後進先出
這兩個的概念似乎很難理解哈?我不知道對於讀者來說容易理解嗎?不過,我今天就來剖解「先進後出」和「後進先出」這八個字。
要想理解很簡單,畫圖就是最好的辦法。
首先,我們有乙個字元a。我們把它「壓」進棧裡。
靈魂畫師登場!!!這,便是乙個非常簡單的棧模型。
a被壓在了棧底。
標註a是第乙個壓進棧裡的
其次,我們壓進去字元b。
如圖:
壓進去了之後觀察現象。先出來的是誰呢?a出的來嗎?好像只有b出的來。這,證明了後進先出的特點。
彈出b:
最後,彈出a,證明先進後出。
很簡單吧?
接下來,我們講一講資料結構最重要的進與出的運算。
首先,棧可以定義為乙個陣列s。
在設乙個指標top指向棧頂。
進棧便是將某一數「壓」進棧內。
出棧便是抬出來(手指伸得進去嗎?)
於是,我們就得到了進棧出棧的演算法。
進棧演算法(push)
1、判斷溢位(即top>=陣列長度) 如溢位,做出錯處理。
2、top++;
3、s[top]=x(x是進棧數字)
出棧(退棧)演算法(pop)
1、判斷下溢(top<=0)
2、(可有可無)將出棧資訊傳遞給x:x=s[top]
2、top–;
實現程式:
進棧&出棧
上面演算法出現的判斷非常重要,判斷下溢可以作為程式的轉移點,而上溢會導致程式卡停,無法執行,記憶體區域混亂,有嚴重的後果,要設法避免。int n=
101;
//即陣列長度
int s[n]
;bool
push
(int
*top,
int*x)
//給兩個位址,可間接賦值 學過指標嗎?.......
(*top)++;
s[*top]
=*x;
return1;
}bool
pop(
int*x,
int top)
//此處*x為調回值
*y=s[
*top]
;//儲存處理
(*top)--;
}
下次發文章將會講到關於棧的實際應用,將會有很好玩的應用哦!!記得關注!
讓人窒息的一天
昨晚快十點了才下班回家 其實應該叫住所,叫狗窩我更樂意 本來還有點東西要改的,可是不知不覺地的睡著了。沒洗澡,沒刷牙就睡著了,是有點困了,白天在條條家吃午飯的時候就覺得困了,更不用談在車上晃悠了乙個小時全是昏迷著睡著的了。還有去加班了將近6個小時。今天中午11點多才回來,是在夢中醒來的,我好像好久都...
讓人困惑的IFRAME
今天在做網頁時,用到了iframe,竟碰到了很怪的問題。若 為document.all.iframe1.document.getelementsbytagname div 返回的是包含 iframe本身頁面裡所有的div元素,若 為document.frames iframe1 document.g...
讓人壓抑的生活
這日子過得真的好累!沒結婚的時候就想公婆年紀大點也沒關係,不能帶小孩我可以自己帶!窮也不是問題,只要勤奮什麼都是可以有的。是那時候的自己太天真,還是現在的自己太現實!現在看著別人剛結婚的公婆至少還能幫稱著兩年!可是我呢?什麼都沒有,小孩兒要自己帶!我好擔心以後不能給我女兒好點的生活!每天都過得好壓抑...