進出棧演算法
⑴ 棧的入棧和出棧的順序規律是什麼
入棧的順序規律是排在前面的先進,排在後面的後進。
棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。
向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
任何出棧元素後面的元素必須滿足兩條規則
1、在原序列(也就是入棧序列)中順序比出棧元素小的,必須是逆序。
2、在原序列(也就是入棧序列)中順序核畝比出棧元素大的,順序無所謂。
3、出棧元素表示的是出棧後面的所有元素。
很多人都誤解這個理念從而對棧產生困惑。而系統棧在計算機體系結構中又起到一個跨部件交互的媒介區域的作用 即 cpu 與內存的交流通道 ,cpu只從系統給我們自己編寫的應用程序所規定的棧入口線性地讀取執行指令, 用一個形象的詞來形改閉森容態旁它就是pipeline(管道線、流水線)。cpu內部交互具體參見 EU與BIU的概念介紹。
⑵ 棧的運算遵循什麼原則
棧的運算遵循(先進後出、後進先出)的原則。
例如從輸入序列ABCDE中,先將A入棧, 然後接下來是要想辦法讓E先入棧。
首先,將B、C、D、E依次入棧, 這時候棧的輸出序列數E、D、C、B、A,然後將E、D、C、B依次出棧, 現在輸入的序列就是E、D、C、B (這里利用了棧的特點: 輸入的序列經過了入棧出棧後,序列的攜鄭次序會顛倒), 最後E、D、C、B依次入棧, 這時候,輸出序列就是B、C、D、E、A。
(2)進出棧演算法擴展閱讀:
基本演算法
進棧(PUSH)演算法
1、若TOP≥n時,則給出溢出信息,作出錯處理(進棧前首襲伍先檢查棧是否已滿,滿則溢出;不滿則作2)
2、置TOP=TOP+1(棧指針加1,指向進棧地址)
3、S(TOP)=X,結束(X為新進棧的元素)
退棧(POP)演算法
1、若TOP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作2)
2、X=S(TOP),(退棧後拍隱或的元素賦給X)
3、TOP=TOP-1,結束(棧指針減1,指向棧頂)
⑶ 1,2,3,4依次進棧,出棧隨時,寫一演算法求出所有可能出棧序列
代碼如下:
#define N 4
int m=0,a=0,b=N;/*m表示種數,a表示棧中元素個數,b表示外面還有需要進棧的個數*/
main()
{
inS(a,b);/*首先入棧*/
printf("%d",m);
getch();
}
int inS(int a,int b)/*入棧*/
{
a++;b--;/*入棧棧中元素+1,棧外元素-1 */
if(b>0)/*若棧外有元素,可以入棧*/
inS(a,b);
if(a>0)/*若棧中有元素,可以出棧*/
outS(a,b);
}
int outS(int a,int b)/*出棧*/
{
a--;/*出棧棧中元素-1*/
if(a==0&&b==0)/*若棧中元素和棧外元素都為0個*/
{
m++;/*則此種情況的序列滿足條件,種數+1*/
return;
}
if(b>0)
inS(a,b);
if(a>0)
outS(a,b);
}
(3)進出棧演算法擴展閱讀
棧的相關知識點:
順序棧內容包含數據和棧頂指針(int),因此採用結構體。
注意:
1、初始時,top指向-1;
2、入棧讓敏橡時,先判斷順序棧是否已滿(判斷條件:top=maxsize-1);如果沒滿,則top++,並將元素值賦給s.top;
3、出棧時,先判斷順序棧是否已拿圓空(判斷條件:top=-1);如果沒空,則先返回棧頂元素,再top- -。
共享棧
兩個順序棧共坦旁享一個一維數組空間,而棧底位置相對不變,兩個棧底分別設為一維數組的兩端。
note:
(1)棧空:top1==-1&&top2==maxsize;
(2)棧滿:top2-top1= 1(此時兩個棧頂指針相鄰);
(3)入棧:S.data[++top1]=x或S.data[–top2]=x;
(4)出棧:x=S.data[top1–]或x=S.data[top2++];
(5)共享棧可以更好的利用存儲空間,整個存儲空間被占滿時發生上溢。
⑷ 簡述51單片機堆棧進棧和出棧操作規則
1.堆棧用於響應中斷或調用子程序時保護斷點地址,也可通過棧操作指令(push
和凳鍵啟pop保護和恢復現棗如場)其中入棧時先SP+1再將內容壓入當前SP所指示的堆棧單元
中,出棧則先將SP所指示的內部ram單元中內容送入直接地址定址的單元中,再將
SP減1.
2.中斷允許寄存器的功能是控制CPU對中斷的開放和屏蔽以及每個中斷源是否允許
中斷結構包括EA(CPU中斷總允許位),ES(串列口中斷允許位)ET1(定時器1中
斷允許位)EX1(外部中斷1中斷允許位)ET0(定時器0中斷允許位)EX0(外部中
斷0中斷允許位)
3.T機=12/fosc=12/亮判(6*E6)=2us
X=2*E13-T/T機=8192-200/2=8092=1F9CH=1111 1100 1110 0B
因為TL1的高3位未用, 修正後X=1111 1100 0001 1100B=FC1CH
4.LJMP為長轉移指令,可轉向64KB程序存儲器的任一單元;SJMP為相對轉移指令
,偏移范圍-128~+127共259位元組;AJMP為絕對轉移指令,轉移目的在指令後一個
存儲單位所在2K區間內。
5.按鍵抖動:在觸點抖動期間檢測按鍵的通與斷狀態,可能導致判斷出錯,即按
鍵一次按下或釋放被錯誤認為是多次操作。
6.汽車的溫控系統,測控系統,防盜報警等多項系統中應用單片機。汽車電子中
涉及A/D和D/A轉換的模塊基本都會有單片機的存在。以下以汽車倒車雷達為例,
雷達控制部分由89C51單片機構成,前端數據採集由超聲波測距,系統由發射和接
收裝置來獲取數據,根據所測得的距離來判斷是否調用聲音報警程序,距離小於
預置點時,調用報警模塊。
⑸ n個元素進棧,有幾種出棧方式
我們把n個元素的出棧個數的記為f(n), 那麼對於1,2,3, 我們很容易得出:
f(1) = 1 //即 1
f(2) = 2 //即 12、21
f(3) = 5 //即 123、132、213、321、231
然後我們來考慮f(4), 我們給4個元素編號為a,b,c,d, 那麼考慮:元素a只可能出現在1號位置,2號位置,3號位置和4號位置(很容易理解,一共就4個位置,比如abcd,元素a就在1號位置)。
分析:
1) 如果元素a在1號位置,那麼只可能a進棧,馬上出棧,此時還剩元素b、c、d等裂頌運待操作,就是子問題f(3);
2) 如果元素a在2號位置,那麼一定有一個元素比a先出棧,即有f(1)種可能順序(只能是b),還剩c、d,即f(2), 根據乘法原理,一共的順序個數為f(1) * f(2);
3) 如果元素a在3號位置,那麼一定有兩個元素比1先出棧,即有f(2)種可能順序(只能是b、c),還剩d,即f(1),
根據乘法原肆梁理,一共的順序個數為f(2) * f(1);
4) 如果元素a在4號位置,那麼一定是a先進棧,最後出棧,那麼元素b、c、d的出棧順序即是此小問題的解,櫻散即 f(3);
結合所有情況,即f(4) = f(3) + f(2) * f(1) + f(1) * f(2) + f(3);
為了規整化,我們定義f(0) = 1;於是f(4)可以重新寫為:
f(4) = f(0)*f(3) + f(1)*f(2) + f(2) * f(1) + f(3)*f(0)
然後我們推廣到n,推廣思路和n=4時完全一樣,於是我們可以得到:
f(n) = f(0)*f(n-1) + f(1)*f(n-2) + ... + f(n-1)*f(0)
即
⑹ 貨物出棧進棧演算法
進棧出棧滿足先進後漏森出順序,所世搜渣以進棧要先進搜悄生產日期後進,分別用兩個函數程序編寫,主程序滿足進棧出棧就可以了
⑺ 為什麼先進棧,再入隊,最後出棧
因為它說了依次輪搏納流入棧和入隊= =,所以就是A放棧,B放隊,C放棧,D放隊。
棧是先進後出,a在輸出的第一個,那麼肯定是在b進入前出來的,後面的bc也是同樣情況,所以前六個是進a,出a,進b,出b,進c,出c,此時棧為空,後面輸出序列為e,d,鋒芹均在f之前,同理說明ed在f入棧之前出來的;
次序是 進d,進e,出e,出d,此時棧又空了,出棧為f,g,次序和輸入一樣,就是和a,b的一樣,所以是進f,出f,進g,出g
全部過程:進a,出a,進b,出b,進c,出c,進d,進e,出e,出d,進f,出f,進g,出g。
(7)進出棧演算法擴展閱讀;
棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一基基沒個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。
1、進棧(PUSH)演算法
①若TOP≥n時,則給出溢出信息,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢出;不滿則作②);
②置TOP=TOP+1(棧指針加1,指向進棧地址);
③S(TOP)=X,結束(X為新進棧的元素);
2、退棧(POP)演算法
①若TOP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作②);
②X=S(TOP),(退棧後的元素賦給X):
③TOP=TOP-1,結束(棧指針減1,指向棧頂)。
⑻ 棧的入棧和出棧的順序規律是什麼
入棧的順序規律是排在前面的先進,排在後面的後進。
棧中的數據只有一種方式出棧,即先進後出,所以出棧的可能數目跟入棧的可能排列數目是一致的。a的出入有2中可能,b的出入有2種可能,c的出入有2種可能,d只需要關系入,只有一種可能。所以可能的出棧方式數為2*2*2*1=8種。
入棧順序:a、b、c、d。出棧順序可以是:d、c、b、a;a、b、c、d;b、a、c、d很多,但要把棧想像成一個沒蓋子的紙箱,取出東西時只能從最上層取,放進東西也只能放在最上層,所以棧是一個「後進先出」或「先進後出」的順序存儲結構。
相關介紹:
棧又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。
向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
⑼ 入棧出棧題目怎麼做
棧的原則是先進後出,進棧序列為el,e2,e3,e4,芹信不是說一次性進入的,而是先進了el,e2,這時候出棧的話一定出e2,e3,e4又進棧,這時候出棧順序就是e4,e3,el 了,總的出棧順序就是e2,e4,e3,渣州el 了。
棧的特點是先進後出,即:進去的早,出來的晚。
54321進棧,5在棧底,1在棧頂!
出一次棧,則棧頂的1先出來,2成為新的棧頂。
ABCD入棧,D成為新的棧頂。
全部出棧:D C B A 2 3 4 5
綜上,所有元素退棧順序為:1 D C B A 2 3 4 5
進棧(PUSH)演算法
①若TOP≥n時,則給出溢出信息,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢出;不滿則作②);
②置TOP=TOP+1(棧指針加1,指向進棧地址);
③S(TOP)=X,結束(X為新進棧的元素);
退棧(POP)演算法
①若TOP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作嫌梁輪②);
②X=S(TOP),(退棧後的元素賦給X):
③TOP=TOP-1,結束(棧指針減1,指向棧頂)。
以上內容參考:網路-棧
⑽ 入棧和出棧的順序規律是什麼
入棧的順序規律是排在前面的先進,排在後面的後進。
①若TOP≥n時,則給出溢出信息,作出錯處理(進絕耐棧前首先檢查棧是否已滿,滿則溢出;不滿則作②);
②置TOP=TOP+1(棧指針加1,指向進棧地址豎租);
③S(TOP)=X,結束(X為新進棧的元素);
出棧的順序規律是排在前面的先出,排在後面的後出。
①若TOP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作②);
②X=S(TOP),(退棧後的元素賦給X):
③TOP=TOP-1,結束(余宏兆棧指針減1,指向棧頂)。
(10)進出棧演算法擴展閱讀:
棧允許在同一端進行插入和刪除操作。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。
棧在程序的運行中有著舉足輕重的作用。棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。