好的,我可以給你一個壓棧出棧的例子。假設(shè)我們有一個棧,里面存放著不同面值的硬幣。當我們需要取錢時,可以將硬幣按照面值大小壓入棧中,這樣棧頂?shù)挠矌啪褪俏覀冏钕热〕龅挠矌?。當我們?nèi)⊥赍X后,可以將硬幣從棧中彈出,這樣棧頂?shù)挠矌啪褪俏覀冏詈笕〕龅挠矌拧@纾僭O(shè)我們有一個包含1元、5角、1角、5分、1分的棧,我們需要取2元5角錢。我們可以先將1元和5角壓入棧中,然后將1角和5分壓入棧中,最后將1分壓入棧中。這樣棧頂?shù)挠矌啪褪?分,我們將其彈出,再將1角和5分彈出,最后將1元和5角彈出。這樣就得到了我們需要的2元5角錢。
入棧是指將前面的電路塊的結(jié)果存入臨時寄存器,需要與后面的電路共同作用時用讀棧指令,最后輸出用出棧指令,雖然都要是并聯(lián)輸出,但讀棧與出棧指令都有相關(guān)的元件或電路塊與前面的臨時結(jié)果共同作用再產(chǎn)生輸出
棧是一種具有特殊訪問形式的存儲空間,特殊性在于數(shù)據(jù)后進先出。
8086提供入棧(PUSH)和出棧(POP)指令:比如push ax表示將AX寄存器中數(shù)據(jù)送入棧中,pop ax表示將棧頂取出數(shù)據(jù)送入AX寄存器中(數(shù)據(jù)的存取按小端存放的規(guī)則)
有關(guān)棧存儲空間的位置,8086提供了ss(段寄存器):sp(偏移地址
棧的操作都是以字為單位的
push是入棧。
Stack棧,一種運算受限的線性表。限定僅在表尾進行插入和操作的線性表。這一棧就成為棧點。把一個元素加入到棧里,就叫做進棧,也叫做入棧,或壓棧,英文名字叫做push。
入棧(PUSH)就是將一個數(shù)據(jù)存入SP指向的當前堆棧地址,然后SP指向堆棧內(nèi)的下一個存儲空間;出棧(POP)就是讓SP返回前一個存儲空間,然后讀出這個地址內(nèi)存儲的數(shù)據(jù)。
舉一個例子吧。
入棧順序:a、b、c、d 出棧順序可以是:d、c、b、a;a、b、c、d;b、a、c、d很多啦, 但要把棧想像成一個沒蓋子的紙箱,取出東西時只能從最上層取,放進東西也只能放在最上層,所以棧是一個“后進先出”或“先進后出”的順序存儲結(jié)構(gòu)。PLC編程時出入棧說明:
入棧是指將前面的電路塊的結(jié)果存入臨時寄存器,需要與后面的電路共同作用時用讀棧指令,最后輸出用出棧指令,雖然都要是并聯(lián)輸出,但讀棧與出棧指令都有相關(guān)的元件或電路塊與前面的臨時結(jié)果共同作用再產(chǎn)生輸出
棧作為一種數(shù)據(jù)結(jié)構(gòu),是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進后出的原則存儲數(shù)據(jù),先進入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時候從棧頂開始彈出數(shù)據(jù)(最后一個數(shù)據(jù)被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
退棧就是指把一個數(shù)據(jù)從棧里刪除,也就是從棧頂取出一個元素(該數(shù)據(jù)不用保存,如果出棧操作則該數(shù)據(jù)要保存)同時棧頂指針減一。
出棧多用于計算機,與其相對應(yīng)的是進棧;進棧、出棧是按照一定順序的。
來補充吧,其實進棧出棧是可以同時進行的.第一個先出的為D 則必須為DCBA2、BACD、BADC,并不一定要全部進去再出來,可以先進一步分再出來,所以關(guān)鍵是從那個開始先出1、同理第一個為B時可以為 BCDA、BDCA.第一個出來的是C則可為 CDBA (ABC依次進然后C出來D進去再出來然后BA出來) 也可為CBAD 也可為CBDA(CB出來D進 、出,A出) 就是C之前的AB必須先B再A 因為是A先進而B是后進(注意是沒有出去)3、BCAD(BDAC是不行的因為要D排第二必須C進去而沒有出來也就是說C必須先A而出)
棧中的數(shù)據(jù)只有一種方式出棧,即先進后出,所以出棧的可能數(shù)目跟你入棧的可能排列數(shù)目是一致的。
a的出入有2中可能,b的出入有2種可能,c的出入有2種可能,d只需要關(guān)系入,只有一種可能 所以可能的出棧方式數(shù)為2*2*2*1=8種
進棧是54321,棧的操作規(guī)則是先入后出的,5最先出來,那就是5最后進去的??梢园褩O胂蟪梢豢诰?,半徑只能容納一個球,你往里面扔了5個數(shù),想拿出來,只能是最后扔的先拿,第一個扔進去的后出來