linux中的pushd命令及棧原理 今天看了linux下面的pushd的命令:感覺不錯。我們可以將目錄pushd到目錄棧中,然後通過pushd進行切換目錄。但是這個命令多了一個功能 +n和-n。就將對棧中的元素進行移動,其實pushd不添加參數就是移動棧中元素的。這個是怎麼移動的哪,我看網上介紹不是很清楚,自己開啟資料結構,看了一下。棧是限定在表的一端進行元素的插入和刪除運算的線性表,將進行插入和刪除的這一端稱為棧頂,另一端稱為棧底。
棧的基本操作有下面幾類:(1)InitStack(S) 構造一個空棧S。(2)StackEmpty(S) 判棧空。若S為空白棧,則返回TRUE,否則返回FALSE。(3)StackFull(S) 判棧滿。若S為滿棧,則返回TRUE,否則返回FALSE。
注意:該運算只適用於棧的順序儲存結構。(4)Push(S,x) 進棧。若棧S不滿,則將元素x插入S的棧頂。(5)Pop(S) 退棧。若棧S非空,則將S的棧頂元素刪去,並返回該元素。(6)StackTop(S) 取棧頂元素。若棧S非空,則返回棧頂元素,但不改變棧的狀態。
對於棧的基本操作命令:1,操作1,2,3我們就不用考慮了,這三個命令在調用之前已經處理了,對我們使用者是透明的。2,操作4,進棧:pushd 目錄 就是這個操作3,操作5,退棧:popd 就是這個操作4,操作6,取棧頂元素,好像沒有這個操作,但其實用dirs查看這個棧中所有元素。加強的棧功能:1,對於沒有參數的pushd,其實就是將棧頂的第一個元素和第二元素交換位置。提示:這個操作的所有操作,目前的目錄顯示的有當前棧中第一個元素。2,push +n和-n是我主要解釋的。 www.2cto.com 這個命令中有隊列的影子的。棧中元素移動時,都是從棧頂移出,然後插入到棧底。(1)我們將棧按像數組一樣進行編號,從棧頂開始:0,1,2,3 ...pushd +n 不是將編號為n的移到棧頂,移出的0到n-1個元素依次插到棧底。例如:棧中的元素為a,b,c,dpushd +1後元素為b,c,d,apushd +2後元素為c,d,a,bpushd +0後元素沒有變化:a,b,c,d
(2)對於pushd -n命令和上面一樣,只是編號不一樣。這次編號從棧底從開始(假如有4個元素):-3,-2,-1,-0pushd -n,將編號為-n的移到棧頂,移出的從棧頂到-n+1的元素依次插到棧底。例如:棧中的元素為a,b,c,dpushd -1後元素為c,d,a,bpushd -2後元素為b,c,d,apushd -0後元素沒有變化:d,a,b,c(3)總結一下:假設有n個元素,那麼pushd -i 與pushd +(n-1-i) 是相同的。例如有4個元素的話:pushd -2與pushd +(4-1-2)是相同的。這樣就清楚這個命令對棧中元素是怎麼移動的了。 作者 kongweile