當前位置:首頁 » 半夜時分 » 入棧為什麼時間操作

入棧為什麼時間操作

發布時間: 2022-07-05 18:55:52

⑴ 數據結構 為什麼入棧和出棧的操作,這兩本書講的完全反的

本質是一樣的。。只要它做到的事相同,空間與時間復雜度相同,內部怎樣實現其實沒有什麼區別,(那裡也說了其他書會有不同規定)所以其實更准確的數據結構操作描述應當是偽代碼。
這些它給的代碼只是讓你不需要如此抽象理解,具體的可以看一下用於加深理解。
而實際更標準的數據結構實現應該看STL的,但是它的代碼比較難以理解就是了。
總結是,這本書的問題,書不夠權威,因此不夠准確。

⑵ 棧的入棧和出棧的順序規律是什麼

入棧的順序規律是排在前面的先進,排在後面的後進。

棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。

向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。


要搞清楚這個概念,首先要明白」棧「原來的意思,如此才能把握本質。棧,存儲貨物或供旅客住宿的地方,可引申為倉庫、中轉站,所以引入到計算機領域里,就是指數據暫時存儲的地方,所以才有進棧、出棧的說法。

首先系統或者數據結構棧中數據內容的讀取與插入(壓入push和 彈出pop)是兩回事!壓入是增加數據,彈出是刪除數據 ,這些操作只能從棧頂即最低地址作為約束的介面界面入手操作 ,但讀取棧中的數據是隨便的沒有介面約束之說。

很多人都誤解這個理念從而對棧產生困惑。而系統棧在計算機體系結構中又起到一個跨部件交互的媒介區域的作用 即 cpu 與內存的交流通道 ,cpu只從系統給我們自己編寫的應用程序所規定的棧入口線性地讀取執行指令, 用一個形象的詞來形容它就是pipeline(管道線、流水線)。cpu內部交互具體參見 EU與BIU的概念介紹。

⑶ 入棧操作的問題

這個 是 ++(--)的前置與後置的問題。
前置的話先用變數,然後再自增(減)
後置的話先自增(減)後用變數

所以
data[++top]=x的含義就是:
top=top+1; //top++
data[top]=x;
data[top++]=x的含義就是:
data[top]=x;
top=top+1; //top++
所以你用後一種就是 把 棧頂元素被 x 替換,丟失原先棧頂元素,然後棧頂又+1,其值為 賦,(隨機)

⑷ 對順序棧入棧時要進行什麼操作

什麼是棧棧實際上也是線性表,只不過是一種特殊的線性表。在這種特殊的線性表中,其插入與刪除運算都只在線性表的一端進行。即在這種線性表的結構中,一端是封閉的,不允許進行插入與刪除元素;另一端是開口的,允許插入與刪除元素。在順序存儲結構下,對這種類型線性表的插入與刪除運算是不需要移動表中其他數據元素的。這種線性表稱為棧。
線是限定在一端進行插入與刪除的線性表。
在棧中,允許插入與刪除的一端稱為棧頂,而不允許插入與刪除的另一端稱為棧底。棧頂元素總是最後被插入的元素,從而也是最先能被刪除的元素;棧底元素總是最先被插入的元素,從而也是最後才能被刪除的元素。即棧是按照「先進後出」或「後進先出」的原則組織數據的,因此,棧也被稱為「先進後出」表或「後進先出」表。由此可以看出,棧具有記憶作用。
通常用指針top來指示棧頂的位置,用指針bottom指向棧底。
往棧中插入一個元素稱為入棧運算,從棧中刪除一個元素(即刪除棧頂元素)稱為退棧運算。
棧的順序存儲及其運算
與一般的線性表一樣,在程序設計語言中,用一維數組S(1:m)作為棧的順序存儲空是,其中m為棧的最大容量。S(bottom)通常為棧底元素(在棧非空的情況下),s(top)為棧頂元素。Top-0表示棧空;top=m表示棧滿。
棧的基本運算有三種:入棧、退棧與讀棧頂元素。
入棧運算入棧運算是指在棧頂位置插入一個新元素。這個運算有兩個基本操作:道德將棧頂指針進一(即top加1),然後將新元素插入到棧頂指針指向的位置。
當棧頂指針已經指向存儲空間的最後一個位置時,說明棧空間已滿,不可能再進行入棧操作。這種情況稱為棧「上溢」錯誤。
退棧運算退棧運算是指取出棧頂元素並賦給一個指定的變數。這個運算有兩個基本操作:道德將棧頂元素(棧頂指針指向的元素)賦給一個指定的變數。然後將棧頂指針退一(即top減1)。
當棧頂指針為0時,說明棧空,不可能進行退棧操作。這種情況稱為棧「下溢」錯誤碼。
讀棧頂元素讀棧頂元素是指將棧頂元素賦給一個指定的變數。必須注意,這個運算不刪除棧頂元素,只是將的值賦給一個變數,因此,在這個運算中,棧頂指針不會改變。
當棧頂指針為0時,說明棧空,讀不到棧頂元素。

⑸ 請解釋一下入棧運算和退棧運算,最好用舉例子的方法,特別搞不懂棧頂指針的位置是怎麼回事

棧(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。
棧是一種數據結構,它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。
棧是只能在某一端插入和刪除的特殊線性表。用桶堆積物品,先堆進來的壓在底下,隨後一件一件往堆。取走時,只能從上面一件一件取。堆和取都在頂部進行,底部一般是不動的。
棧就是一種類似桶堆積物品的數據結構,進行刪除和插入的一端稱棧頂,另一堆稱棧底。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。 棧也稱為後進先出表(LIFO表)。

例如:有一個數列(23,45,3,7,3,945)
我們先對其進行進棧操作,則進棧順序為:23,45,3,7,3,945
我們在對其進行出棧操作,則出棧順序為:945,3,7,3,45,23

進棧出棧就像只有一個口的長筒,先把數據一個個放入筒內,而拿出的時候只有先拿走上邊的,才能拿走下邊的。

⑹ 入棧和出棧的順序規律是什麼

入棧的順序規律是排在前面的先進,排在後面的後進。

①若TOP≥n時,則給出溢出信息,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢出;不滿則作②);

②置TOP=TOP+1(棧指針加1,指向進棧地址);

③S(TOP)=X,結束(X為新進棧的元素);

出棧的順序規律是排在前面的先出,排在後面的後出。

①若TOP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作②);

②X=S(TOP),(退棧後的元素賦給X):

③TOP=TOP-1,結束(棧指針減1,指向棧頂)。

(6)入棧為什麼時間操作擴展閱讀:

棧允許在同一端進行插入和刪除操作。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。

棧在程序的運行中有著舉足輕重的作用。棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。

⑺ 關於入棧,出棧指針和數據操作順序的疑問

樓主,堆棧是一個抽象數據類型,規定的兩項必備的基本操作分別為入棧和出棧。這個抽象數據類型並沒規定入棧與出棧具體要怎麼實現。你問的問題已經在實現這一層面上,所以按照堆棧這種抽象數據類型的規定看,「先修改指針,然後插入數據,出棧時剛好相反」並不是必須的,這取決於你的操作的具體實現。

如果你的堆棧的實現是往上長的(就是說往頂的方向長,其實質是你的棧底是定死的不能動,入棧的東西只能不斷往上疊,這就像你在書桌上放書一樣,桌底是定死的,所以你的書只能一本一本地往上堆,往上長),計算機內部的堆棧的實現採取的就是這種模式,所以就得像你說的那樣,「先修改指針,然後插入數據,出棧時剛好相反」,因為你堆棧指針指向的總是棧頂元素,棧底不能動,所以數據入棧前要先修改指針使它指向新的空餘空間然後再把數據存進去,出棧的時候自然相反,你聯系我上面舉的放書的例子仔細想想。

然而,如果你的堆棧的實現是往下長的(就是說你每壓一個元素入棧,棧底就自動下移一個元素的位置,其實質就是這種堆棧模型是一個「無底洞」型),這個時候,你的棧頂就變成了定死的,你就可以先壓入元素,然後再修改指針。因為你的棧底是無限的,你壓入一個元素,新的元素就取代先前的棧頂元素占據棧頂的位置,那麼你先前的指向棧頂元素的指針這個時候就該修改讓它指向這個新的棧頂元素了。

下面的就是對「無底洞」型堆棧的一種實現的描述:
壓棧(入棧):將對象或者數據壓入棧中,更新棧頂指針,使其指向最後入棧的對象或數據。
彈棧(出棧):返回棧頂指向的對象或數據,並從棧中刪除該對象或數據,更新棧頂。

話說回來,計算機內部肯定選第一種模型,不會選第二種,因為第二種模型,每壓入一個新的元素,都需要把之前堆棧里的所有元素整體下移動一個元素的位置,騰出棧頂元素的位置讓新的元素進來,這種平移可是一筆不小的開銷啊!但是並不是說「無底洞」模型就沒辦法實現了,其實它可以通過第一種模型來模擬的,每需要壓入一個新的元素的時候,就先開辟一個空間,數據存入這個空間,然後再修改棧頂元素指針使其指向這個新的棧頂元素。

換句話說,用鏈表的話,只要有足夠的空間可開辟出來作為一個節點,那麼兩種堆棧模型都能實現(當然「無底洞」型還是如我上面說的那樣用第一種模擬出來的,否則平移的工作量相當可觀),如果用數組,由於數組在內存中是連續分配出來的空間,用第一種模型更自然一些。

⑻ 詳細說明堆棧的功能及操作原理,及堆棧操作時如何入棧和出棧.

看數據結構啊。後進先出。

熱點內容
為什麼北極參這么便宜 發布:2024-05-19 07:55:56 瀏覽:469
為什麼最近孩子食慾不好 發布:2024-05-19 07:50:11 瀏覽:150
為什麼狗生孩子顏色有深有淺 發布:2024-05-19 07:46:08 瀏覽:764
為什麼手機拍視頻畫面突然變暗 發布:2024-05-19 07:37:38 瀏覽:421
小米平板5pro為什麼老自動滅屏 發布:2024-05-19 07:37:35 瀏覽:910
女的為什麼不吃東西 發布:2024-05-19 07:36:53 瀏覽:585
為什麼這么多人喜歡微信錢包 發布:2024-05-19 07:27:18 瀏覽:640
電腦硬體沒問題為什麼死機 發布:2024-05-19 07:26:35 瀏覽:395
德國啤酒為什麼比國產啤酒便宜 發布:2024-05-19 07:13:02 瀏覽:250
淘寶免單名單15天後公布為什麼 發布:2024-05-19 06:59:50 瀏覽:875