⑴ 棧的鏈式存儲結構是什麼
若是棧中元素的數目變化范圍較大或不清楚棧元素的數目,就應該考慮使用鏈式存儲結構。人們將用鏈式存儲結構表示的棧稱作「鏈棧」。鏈棧通常用一個無頭結點的單鏈表表示。由於棧的插入、刪除操作只能在一端進行,而對於單鏈表來說,在首端插入、刪除結點要比在尾端進行相對容易一些,所以將單鏈表的首端作為棧的頂端,即將單鏈表的頭指針作為棧頂指針。鏈棧如圖1所示。
圖1鏈棧的存儲示意
⑵ 給出棧的兩種存儲結構的形式名稱,在這兩種棧的存儲結構中如何判別棧空與棧滿
【解答】(1)順序棧 (top用來存放棧頂元素的下標)
判斷棧S空:如果S->top==-1表示棧空。
判斷棧S滿:如果S->top==Stack_Size-1表示棧滿。 (2) 鏈棧(top為棧頂指針,指向當前棧頂元素前面的頭結點) 判斷棧空:如果top->next==NULL表示棧空。
判斷棧滿:當系統沒有可用空間時,申請不到空間存放要進棧的元素,此時棧滿。
⑶ 棧的存儲結構
棧同順序表和鏈表一樣,棧也是用來存儲邏輯關系為 "一對一" 數據的線性存儲結構。
棧的具體實現
棧是一種 "特殊" 的線性存儲結構,因此棧的具體實現有以下兩種方式:
順序棧:採用順序存儲結構可以模擬棧存儲數據的特點,從而實現棧存儲結構;
鏈棧:採用鏈式存儲結構實現棧結構;
棧存儲結構與之前所學的線性存儲結構有所差異,這緣於棧對數據 "存" 和 "取" 的過程有特殊的要求:
棧只能從表的一端存取數據,另一端是封閉的;
在棧中,無論是存數據還是取數據,都必須遵循"先進後出"的原則,即最先進棧的元素最後出棧。
通常,棧的開口端被稱為棧頂;相應地,封口端被稱為棧底。因此,棧頂元素指的就是距離棧頂最近的元素。
⑷ 數據結構中的棧的存儲結構
(PASCAL)棧裡面通常用一維數組來表示:
const smaxsize={棧的最大容量}
type
selement=integer;
sposition=0..smaxsize;
stack=record
data:array[1..smaxsize] of selement;
top:sposition;
serror=(noerror,empty,stackoverflow,stackunderflow);
⑸ 棧結構通常採用的兩種儲存結構是和
順序存儲和鏈接存儲,通稱順序隊列和鏈隊列,
是計算機科學中一種特殊的串列形式的抽象數據類型,其特殊之處在於只能允許在鏈表或數組的一端(稱為堆棧頂端指針,英語:top)。
進行加入數據(英語:push)和輸出數據(英語:pop)的運算。另外堆棧也可以用一維數組或鏈表的形式來完成。堆棧的另外一個相對的操作方式稱為隊列。
由於堆棧數據結構只允許在一端進行操作,因而按照後進先出(LIFO, Last In First Out)的原理運作。
堆棧數據結構使用兩種基本操作:推入(壓棧,push)和彈出(彈棧,pop):
推入:將數據放入堆棧的頂端(數組形式或串列形式),堆棧頂端top指針加一。
彈出:將頂端數據數據輸出(回傳),堆棧頂端數據減一。
(5)棧的存儲空間結構擴展閱讀:
堆棧是一個特定的存儲區或寄存器,它的一端是固定的,另一端是浮動的。對這個存儲區存入的數據,是一種特殊的數據結構。所有的數據存入或取出,只能在浮動的一端(稱棧頂)進行,嚴格按照「後進先出」的原則存取,位於其中間的元素。
必須在其棧上部(後進棧者)諸元素逐個移出後才能取出。在內存儲器 (隨機存儲器) 中開辟一個區域作為堆棧,叫軟體堆棧; 用寄存器構成的堆棧,叫硬體堆棧。堆棧處理器就是一種硬體堆棧相對寄存器文件處理器來講。
它具有很多優點系統復雜度低;精簡的指令集;晶元面積小;定址方式簡單;代碼體積小;快速的中斷響應,子程序調用能力。這些優點使得堆棧處理器在工業控制領域和航空航天領域有著不可替代的地位。
⑹ 棧和隊列不是邏輯結構嗎,它們的順序和鏈式才是存儲結構,一題中說棧也是存儲結構,請解釋一下
棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
(6)棧的存儲空間結構擴展閱讀:
棧的順序存儲結構利用內存中的一片起始位置確定的連續存儲區域來存放棧中的所有元素,為了指示棧頂的准確位置,還需要引入一個棧頂指示變數top。設數組data[MAXSIZE]為棧的存儲空間,其中MAX-SIZE是一個預先設定的常數,為允許進棧結點的最大可能數目。
初始時棧空,top等於0。當top不等於0時,data[0]為棧底元素,即為當前停留在棧中時間最長的元素。而data[top-1]為最後入棧的元素。當top==MAXSIZE時,表示棧滿,如果此時再有結點進棧,將發生「上溢」的錯誤,而當top==0時再執行出棧操作,將發生「下溢」的錯誤。
⑺ C語言版的數據結構中,棧存儲結構是什麼
棧(stack)在計算機科學中是限定僅在表尾進行插入或刪除操作的線性表。 棧是一種數據結構 ,是只能在某一端插入和刪除的特殊線性表 。它按照後進先出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。
⑻ 棧的順序存儲結構
這是結果,需要的話給我個郵箱
/*
在vc++6.0中的輸出結果:
------------------------
初始化棧.....
創建一個包含5個不大於100的正整數值的棧(5個值由計算機隨機產生)...
棧中的元素從棧底到棧頂為:41 67 34 0 69
請輸入要插在棧頂的元素e = 100
棧中的元素從棧底到棧頂為:41 67 34 0 69 100
彈出的棧頂元素 e = 100
棧中的元素從棧底到棧頂為:41 67 34 0 69
棧中元素個數是5
輸出從棧頂到棧底的所有元素:69 0 34 67 41
Press any key to continue
------------------------------
*/
⑼ 鏈棧和順序棧兩種存儲結構有什麼不同
存儲結構不同:
鏈棧動態分配內存存儲數據,不浪費內存,存儲的數據不連續。
順序棧使用固定大小數組保存數據,數據量小時浪費內存,過多時出問題,存儲數據連續。
它們的具體區別如下:
順序棧的實現在於使用了數組這個基本數據結構,數組中的元素在內存中的存儲位置是連續的,且編譯器要求我們在編譯期就要確定數組的大小,這樣對內存的使用效率並不高,一來無法避免因數組空間用光而引起的溢出問題。在系統將內存分配給數組後,則這些內存對於其他任務就不可用。而對於鏈棧而言,使用了鏈表來實現棧,鏈表中的元素存儲在不連續的地址,由於是動態申請內存,所以我們可以以非常小的內存空間開始,另外當某個項不使用時也可將內存返還給系統。
⑽ 棧和隊列都是什麼結構
棧(操作系統):由編譯器自動分配釋放
,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧棧使用的是一級緩存,
他們通常都是被調用時處於存儲空間中,調用完畢立即釋放
隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空隊列。在隊列這種數據結構中,最先插入的元素將是最先被刪除的元素;反之最後插入的元素將是最後被刪除的元素,因此隊列又稱為「先進先出」(fifo—first
in
first
out)的線性表。