『壹』 棧的順序存儲空間我在一個題里看到是,一個棧的順序存儲空間s(1:m),這表示什麼意思啊ԅ
棧的順序存儲空間為S(1:50),初始狀態為top=0。現經過一系列入棧與退棧運算後,top=20,則棧頂-棧底=20-0=20個元素。
『貳』 二級公共基礎裡面棧的定義和特點是什麼
1.棧的基本概念 棧是限定只在一端進行插入與刪除的線性表,通常稱插入、刪除的這一端為棧頂,另一端為棧底。當表中沒有元素時稱為空棧。棧頂元素總是後被插入的元素,從而也是最先被刪除的元素;棧底元素總是最先被插入的元素,從而也是最後才能被刪除的元素。棧是按照"先進後出"或"後進先出"的原則組織數據的。 2.棧的順序存儲及其運算 用一維數組S(1∶m)作為棧的順序存儲空間,其中m為最大容量。 在棧的順序存儲空間S(1∶m)中,S(bottom)為棧底元素,S(top)為棧頂元素。top=0表示棧空;top=m表示棧滿。 棧的基本運算有三種:入棧、退棧與讀棧頂元素。 (1)入棧運算:入棧運算是指在棧頂位置插入一個新元素。首先將棧頂指針加一(即top加1),然後將新元素插入到棧頂指針指向的位置。當棧頂指針已經指向存儲空間的最後一個位置時,說明棧空間已滿,不可能再進行入棧操作。這種情況稱為棧"上溢"錯誤。 (2)退棧運算:退棧是指取出棧頂元素並賦給一個指定的變數。首先將棧頂元素(棧頂指針指向的元素)賦給一個指定的變數,然後將棧頂指針減一(即top減1)。當棧頂指針為0時,說明棧空,不可進行退棧操作。這種情況稱為棧的"下溢"錯誤。 (3)讀棧頂元素:讀棧頂元素是指將棧頂元素賦給一個指定的變數。這個運算不刪除棧頂元素,只是將它賦給一個變數,因此棧頂指針不會改變。當棧頂指針為0時,說明棧空,讀不到棧頂元素。
麻煩採納,謝謝!
『叄』 棧的存儲空間:1—m,top=1,不就是在棧頂嗎,插入一個,top=2,這樣理解哪裡不對
棧是先進後出的嘛,棧頂一開始是m+1,那麼入站一個元素後,棧頂將變成m,相當於減1。如果你不好想像,我舉個例子。如果你把一個杯子打上刻度,杯口是1,杯底是10,杯子的大小剛好能放進一個橘子,如果我們認為一開始杯底是棧頂,也就是10,那麼放一個橘子之後,杯底就變成9了,因為你不能再把東西放到比9大的地方,同理,8、7、6,如果你往外拿一個橘子,也是先拿上面的,這就是先進後出,後進先出。
『肆』 設棧的存儲空間為S(1:m),初始狀態為top=m+1 怎麼理解
m+1 。
這個棧是從棧頂向棧底壓的,一般平時是從棧底向棧頂壓,這道題目中是倒過來的。
若TOP≥n時,則給出溢出信息,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢出);置TOP=TOP+1(棧指針加1,指向進棧地址);S(TOP)=X,結束(X為新進棧的元素)。
若TOP≤0,則給出下溢信息:
作出錯處理(退棧前先檢查是否已為空棧, 空則下溢);X=S(TOP),(退棧後的元素賦給X):TOP=TOP-1,結束(棧指針減1,指向棧頂)。
定義stack的簡單代碼:
stack<int> sta。
入棧:sta.push(x)。
出棧:sta.pop()。
判斷棧的大小: sta.size()。
判斷棧是否為空:sta.empty()。
『伍』 棧的順序存儲空間s(1:m)是什麼意思
根據題意,棧空間如圖所示:
也就是說,棧是向上增長的,每次壓入一個元素,棧的TOP指針向上移動一位。
當壓入第一個元素時,TOP指針指向m+1-1 = m
當壓入第二個元素時,TOP指針指向m+1-2 = m-1
......
以此類推,
當壓入第N個元素時,TOP指針指向m+1-N = 20
則N = m+1-20 = m-19
選C。
『陸』 棧的順序存儲是什麼
由於棧是運算受限的線性表,因此線性表的存儲結構對棧也適用,而線性表有順序存儲和鏈式存儲兩種,所以棧也有順序存儲和鏈式存儲兩種。
1.棧的順序存儲棧的順序存儲是利用一組地址連續的存儲單元依次存放從棧底到棧頂的數據元素,並附設指針top指示棧頂。
2.棧的順序存儲類型定義1)用內存動態分配方式定義棧的順序存儲(1)棧的順序存儲表示。
順序棧本質上是順序表的簡化,由於棧底位置是固定不變的,所以可以將棧底位置設置在存儲空間的基地址上,棧頂位置是隨著進棧和退棧操作而變化的,故用top來指示當前棧頂元素的下一個位置,通常稱top為棧頂指針。
『柒』 棧和隊列不是邏輯結構嗎,它們的順序和鏈式才是存儲結構,一題中說棧也是存儲結構,請解釋一下
棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
(7)棧的存儲空間是指擴展閱讀:
棧的順序存儲結構利用內存中的一片起始位置確定的連續存儲區域來存放棧中的所有元素,為了指示棧頂的准確位置,還需要引入一個棧頂指示變數top。設數組data[MAXSIZE]為棧的存儲空間,其中MAX-SIZE是一個預先設定的常數,為允許進棧結點的最大可能數目。
初始時棧空,top等於0。當top不等於0時,data[0]為棧底元素,即為當前停留在棧中時間最長的元素。而data[top-1]為最後入棧的元素。當top==MAXSIZE時,表示棧滿,如果此時再有結點進棧,將發生「上溢」的錯誤,而當top==0時再執行出棧操作,將發生「下溢」的錯誤。
『捌』 內存分配中堆和棧的區各是指什麼
簡單地說,棧是屬於進程管理的,大小相對固定,規模較小,一旦操作系統為程序分配了棧後就不管了,操作系統將其看做進程的一部分,棧的性質是先進後出,後進先出;堆屬於系統維護的,進程可以申請的額外內存空間,訪問方式是自由的(相對於棧的先進後出)。稍微深入點說,棧是由系統在載入程序時給進程分配的一塊區域,提供存放棧數據,一般定義的變數都會存在棧區,函數調用以及數據傳遞和返回、遞歸、嵌套循環,文件夾等樹狀層次結構的遍歷、表達式的解析都會用到棧區。棧的大小由編譯器決定,也可以在IDE(集成開發環境,比如VC,VS,VB或任何編程工具)中設定,編譯好的程序包含了棧空間大小的參數,當被操作系統載入時由操作系統一起分配給程序。當程序結束時棧區與進程空間一起被回收釋放。所以,如果定義的數據超過棧的空間程序就會發生溢出而崩潰,編譯器不負責檢查,因此大容量數據不要分配在棧上。在C++中,應該使用new關鍵詞,用new分配的對象或內存都是在堆上,堆是系統維護的內存空間,也可理解為操作系統中看到的未使用的空間,當執行new的時候就是程序向操作系統申請額外空間,因此new也叫動態分配內存。系統會根據需求大小從未使用的空間中劃一塊給程序使用,並對該空間進行注冊管理,以便當程序結束時釋放該空間(假如程序沒有主動申請釋放)。所以用new創建的空間在使用完了後要及時申請釋放(delete關鍵詞),如果不釋放,在程序運行期間如果不斷的new大內存,最終也會將整個可用內存用完,導致系統崩潰,當然,如今的操作系統比以前強壯得多,當發生內存用完導致崩潰時,操作系統會干預,直接down掉程序禁止運行下去並回收所有所佔空間。
『玖』 什麼是棧區
定義棧時會申請一段地址,這段地址就是棧的存儲區,用來存儲棧的數據的。
『拾』 java中棧內存是什麼意思
堆內存:保存對象的真正數據,都是每一個對象的屬性內容
棧內存:保存的是一塊堆內存的空間地址,可以把它想像成一個int型變數(每一個int型變數只能存放一個數值)所以每一塊保留一塊堆內存地址,但是為了方便理解,可以簡單的講棧內存之中保存的數據理解為對象的名稱(Person
per,保存的是per)