當前位置:首頁 » 服務存儲 » 用棧存儲信息
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用棧存儲信息

發布時間: 2022-07-15 09:17:21

Ⅰ 什麼是棧存儲

在C++中,內存分成4個區,他們分別是堆,棧,靜態存儲區和常量存儲區

1、棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的存
儲區.裡面的變數通常是局部變數,函數參數等.

2、堆,又叫自由存儲區,它是在程序執行的過程中動態分配的,它最大的特性就是動.
態性.由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,
一般一個new就要對應一個delete.如果程序員沒有釋放掉,那麼在程序結束後,
操作系統會自動回收.如果分配了堆對象,卻忘記了釋放,就會產生內存泄漏.而
如果已釋放了對象,卻沒有將相應的指針置為NULL,該指針就是"懸掛指針".

3、靜態存儲區.所有的靜態對象,全局對象都於靜態存儲區分配.

4、常量存儲區,這是一塊比較特殊的存儲區,他們裡面存放的是常量,不允許修改
(當然,你要通過非正當手段也可以修改,而且方法很多)
常量字元串都存放在靜態存儲區,返回的是常量字元串的首地址.

Ⅱ 棧和隊列可不可以使用散列存儲

棧和隊列都屬於一位鏈表,棧是後進先出,進和出都是在同一端進行,就好像一筒羽毛球,只有把上面拿出來,下面的才能拿出來;隊列是先進先出的,進和出分別在不同的端進行,比如排隊的人,排在前面的人先到櫃台辦理業務,後面來的人後得到服務。

棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底。

最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。



(2)用棧存儲信息擴展閱讀:

在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。

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

Ⅲ 結合棧的特點,講一講在進行函數調用時,為什麼要用棧來保存調用函數的信息

一層的調用不明顯,但是你考慮一下多層的調用就容易明白了。
比如說,我在函數A中還要調用其他函數,那麼這個時候先要把函數A一些變數的信息記錄下來,就是存在棧中,然後再調用新的函數(也可以是自身)。等A調用的函數運行完獲得返回值時,會回到最初調用它的函數(也就是A),這個時候函數A可能還要繼續運行,也可能直接就return了,無論哪種情況都需要把之前存在棧中的信息pop出來,否則一調用其他函數,A自己原先的變數數據就無法跟蹤記錄了。

Ⅳ 為什麼棧里要存放數據呢

肯思考就好,但是你的理解明顯有誤區。
棧的表層意思很多人都會說但是具體實現的細節要很深,我說說我的理解吧。
首先棧的實現不是物理實現,沒有電腦設計會專門設計一個棧,電腦只需要提供什麼呢?內存。
從電腦設計者來說他們給電腦一個內存,這個你應該知道,2GB 4GB 或者8GB 每個內存有一個地址。
然後要知道如果你沒有接觸硬體,你平時接觸的地址都是物理地址,比如你有一個指針,指向地址0x12345,不要以為就是對應內存中的這個地址,實際上這個地址只是虛擬地址,至於這個地址究竟實際對應哪裡呢,那就是操作系統的事了,操作系統的內存管理單元負責內存映射,比如操作系統知道實際內存 0x23456空閑,就把你的0x12345對應成0x23456這叫做內存的映射。
然後你要知道,操作系統為了軟體的 內存不沖突對每個運行的進程一個獨立的4GB內存,不管你實際內存是2GB 8GB 這就是抽象和物理的脫離。每個軟體只需要知道我可以用1-4GB的內存地址,至於在物理上對應什麼就是操作系統的事了,操作系統保證不會獨立,這個實現是很簡單的。
理解了上面那些就可以說棧了。棧就是一段內存,但是他的實現不是你理解的那樣,我這么說你看能聽懂不,到了匯編代碼這一層,已經不是你理解的那種邏輯了,也許在你想來只是一步但是匯編代碼要好多指令,電腦里有這么幾個寄存器(你知道是什麼吧) esp 表示棧頂的地址 ebp 表示棧底的地址。兩條指令 push 表示入棧 也就是esp的值-4 pop 表示出棧esp+4 每一個函數有自己的棧,比如開始的main是一個棧,然後裡面調用了一個function1函數又是一個棧,但是這些棧並不是分散的,他們實際是一段連續的地址,只需要在每個程序的棧起始位置記錄下來就把它們區分開了。當這個函數結束了他的棧正好被用完,然後就會使調用者的棧(棧的演算法可以實現這一點)。
但是棧的地址到底是什麼呢,其實棧只需要一個起始地址,然後當需要的時候地址值逐漸減小,需要多少有多少,如果你需要的太多那就會出現棧被耗盡的錯誤。
那麼棧究竟是被誰創建的呢,這個你要知道PE文件你要知道載入器,雙擊一個.exe文件你會發現他被運行了,為什麼呢?首先要操作系統為他分配4GB的內存以及一些其他的初始化,在這個過程中棧被建立了。這些都是載入器做的。
至於什麼是載入器呢,這個我真不知道,我沒有見過一個程序的名字叫什麼load.exe,所以載入器應該是通過動態鏈接實現的,並沒有具體的程序。
最後給你個意見,沒有必要一下子走這么深,如果沒有基礎,你看這些也覺得一頭霧水,最好是從頭看起,看看操作系統的工作原理。
PS我說的是windows下的。

Ⅳ 如何用堆棧隊列知識,存儲信息java

程序=數據結構+演算法
隊列和堆棧就是一種數據結構了,其他的還有鏈表、樹等,是一種存儲數據的形式。
堆棧就是實現先進後出的數據結構,比如一端開口一端有底瓶子里,你把餅干(數據)從左端放入瓶子中,拿餅干也要從左端拿,而先放入的餅干最後才能取出。
隊列就是實現先進先出的數據結構,比如一個兩端都開口的瓶子,你把餅干從左端放入瓶子,拿餅干可以從右端拿出,先放入的餅干最先取出

Ⅵ 在什麼情況下可以用棧來存儲數據

棧:特點就是一個先進後出的結構。
棧的應用:非常廣泛,在CPU內部就有提供棧這個機制。主要用途:函數調用和返回,數字轉字元,表達式求值,走迷宮等等。
在CPU內部棧主要是用來進行子程序調用和返回,中斷時數據保存和返回。在編程語言中:主要用來進行函數的調用和返回。
可以說在計算機中,只要數據的保存滿足先進後出的原理,都優先考慮使用棧,所以棧是計算機中不可缺的機制。

Ⅶ 棧的存儲結構

棧同順序表和鏈表一樣,棧也是用來存儲邏輯關系為 "一對一" 數據的線性存儲結構。

棧的具體實現
棧是一種 "特殊" 的線性存儲結構,因此棧的具體實現有以下兩種方式:
順序棧:採用順序存儲結構可以模擬棧存儲數據的特點,從而實現棧存儲結構;
鏈棧:採用鏈式存儲結構實現棧結構;

棧存儲結構與之前所學的線性存儲結構有所差異,這緣於棧對數據 "存" 和 "取" 的過程有特殊的要求:
棧只能從表的一端存取數據,另一端是封閉的;
在棧中,無論是存數據還是取數據,都必須遵循"先進後出"的原則,即最先進棧的元素最後出棧。

通常,棧的開口端被稱為棧頂;相應地,封口端被稱為棧底。因此,棧頂元素指的就是距離棧頂最近的元素。

Ⅷ 棧的順序存儲是什麼

由於棧是運算受限的線性表,因此線性表的存儲結構對棧也適用,而線性表有順序存儲和鏈式存儲兩種,所以棧也有順序存儲和鏈式存儲兩種。

1.棧的順序存儲棧的順序存儲是利用一組地址連續的存儲單元依次存放從棧底到棧頂的數據元素,並附設指針top指示棧頂。

2.棧的順序存儲類型定義1)用內存動態分配方式定義棧的順序存儲(1)棧的順序存儲表示。

順序棧本質上是順序表的簡化,由於棧底位置是固定不變的,所以可以將棧底位置設置在存儲空間的基地址上,棧頂位置是隨著進棧和退棧操作而變化的,故用top來指示當前棧頂元素的下一個位置,通常稱top為棧頂指針。

Ⅸ 棧只能順序存儲,這句話對嗎,為什麼

棧只能順序存儲,這句話不對。棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom)。

一個新元素只能從棧頂一端進入,刪除時,只能刪除棧頂的元素,即剛剛被插入的元素。所以棧也稱為後進先出表。線性表可以順序存儲,也可以鏈式存儲,因此棧也可以採用鏈式存儲結構。



(9)用棧存儲信息擴展閱讀:

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

在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。

棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。堆棧幀一般包含如下幾方面的信息:

1、函數的返回地址和參數。

2、臨時變數:包括函數的非靜態局部變數以及編譯器自動生成的其他臨時變數。

鏈式存儲結構的特點:

1、比順序存儲結構的存儲密度小(鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,相比順序存儲結構增加了存儲空間)。

2、邏輯上相鄰的節點物理上不必相鄰。

3、插入、刪除靈活 (不必移動節點,只要改變節點中的指針)。

4、查找節點時鏈式存儲要比順序存儲慢。

5、每個節點是由數據域和指針域組成。

6、由於簇是隨機分配的,這也使數據刪除後覆蓋幾率降低,恢復可能提高。

順序存儲結構的主要優點是節省存儲空間,因為分配給數據的存儲單元全用存放結點的數據(不考慮c/c++語言中數組需指定大小的情況),結點之間的邏輯關系沒有佔用額外的存儲空間。

採用這種方法時,可實現對結點的隨機存取,即每一個結點對應一個序號,由該序號可以直接計算出來結點的存儲地址。但順序存儲方法的主要缺點是不便於修改,對結點的插入、刪除運算時,可能要移動一系列的結點。

參考資料:網路-棧

參考資料:網路-鏈式存儲結構

參考資料:網路-順序存儲結構