㈠ c++的「棧」是什麼啊
一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。
棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧!
以上定義是在經典計算機科學中的解釋。
在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。
棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。堆棧幀一般包含如下幾方面的信息:
1.函數的返回地址和參數
2.臨時變數:包括函數的非靜態局部變數以及編譯器自動生成的其他臨時變數。
㈡ 棧和隊列的作用是什麼它們主要可以應用在哪些方面
棧和隊列都屬於一位鏈表,棧是後進先出,進和出都是在同一端進行,就好像一筒羽毛球,只有把上面拿出來,下面的才能拿出來;隊列是先進先出的,進和出分別在不同的端進行,比如排隊的人,排在前面的人先到櫃台辦理業務,後面來的人後得到服務。
棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底。
最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
(2)在函數調用時棧中保留了哪些信息擴展閱讀:
在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。
棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。
㈢ 什麼情況下會用到棧
棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧!
首先 系統或者數據結構棧中數據內容的讀取 與 (壓入push和 彈出pop) 是兩回事! 插入是增加數據 彈出 是刪除數據 ,這些操作只能從棧頂即最低地址作為約束的介面界面入手操作 ,但讀取棧中的數據 是隨便的 沒有介面約束之說。很多人都誤解這個理念從而對棧產生困惑。[1]而系統棧在計算機體系結構中 又起到一個跨部件交互的媒介區域的作用 即 cpu 與內存的交流通道 ,cpu只從系統給我們自己編寫的應用程序所規定的棧入口線性地讀取執行指令, 用一個形象的詞來形容它就是pipeline(管道線、流水線)。cpu內部交互具體參見 EU與BIU的概念介紹。
棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。
棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧!
以上定義是在經典計算機科學中的解釋。
在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。
棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。堆棧幀一般包含如下幾方面的信息:
1.函數的返回地址和參數
2. 臨時變數:包括函數的非靜態局部變數以及編譯器自動生成的其他臨時變數。
㈣ 結合棧的特點,講一講在進行函數調用時,為什麼要用棧來保存調用函數的信息
一層的調用不明顯,但是你考慮一下多層的調用就容易明白了。
比如說,我在函數A中還要調用其他函數,那麼這個時候先要把函數A一些變數的信息記錄下來,就是存在棧中,然後再調用新的函數(也可以是自身)。等A調用的函數運行完獲得返回值時,會回到最初調用它的函數(也就是A),這個時候函數A可能還要繼續運行,也可能直接就return了,無論哪種情況都需要把之前存在棧中的信息pop出來,否則一調用其他函數,A自己原先的變數數據就無法跟蹤記錄了。
㈤ 棧只能順序存儲,這句話對嗎,為什麼
棧只能順序存儲,這句話不對。棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom)。
一個新元素只能從棧頂一端進入,刪除時,只能刪除棧頂的元素,即剛剛被插入的元素。所以棧也稱為後進先出表。線性表可以順序存儲,也可以鏈式存儲,因此棧也可以採用鏈式存儲結構。
(5)在函數調用時棧中保留了哪些信息擴展閱讀:
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。
在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。
棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。堆棧幀一般包含如下幾方面的信息:
1、函數的返回地址和參數。
2、臨時變數:包括函數的非靜態局部變數以及編譯器自動生成的其他臨時變數。
鏈式存儲結構的特點:
1、比順序存儲結構的存儲密度小(鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,相比順序存儲結構增加了存儲空間)。
2、邏輯上相鄰的節點物理上不必相鄰。
3、插入、刪除靈活 (不必移動節點,只要改變節點中的指針)。
4、查找節點時鏈式存儲要比順序存儲慢。
5、每個節點是由數據域和指針域組成。
6、由於簇是隨機分配的,這也使數據刪除後覆蓋幾率降低,恢復可能提高。
順序存儲結構的主要優點是節省存儲空間,因為分配給數據的存儲單元全用存放結點的數據(不考慮c/c++語言中數組需指定大小的情況),結點之間的邏輯關系沒有佔用額外的存儲空間。
採用這種方法時,可實現對結點的隨機存取,即每一個結點對應一個序號,由該序號可以直接計算出來結點的存儲地址。但順序存儲方法的主要缺點是不便於修改,對結點的插入、刪除運算時,可能要移動一系列的結點。
參考資料:網路-棧
參考資料:網路-鏈式存儲結構
參考資料:網路-順序存儲結構
㈥ C語言函數調用時棧中內存的變化
這是執行到g裡面的i=5這條語句之時的堆棧
㈦ C語言 函數調用時的內存存儲
1、我想問主函數的執行過程以及調用到子函數時內存除了存儲了子函數的返回地址,還存了什麼=====》還「保存」了參數,確切的說,是把子函數需要用到的參數
壓入到內存棧裡面,供子函數調用的時候取
2、子函數的內存里按照內存地址順序分別存了什麼?
===》籠統的講,裡面的變數等
更詳細的信息,你可以網路
「函數調用過程詳解」
來作深入研究
㈧ 函數調用時,棧中為何要保留主調函數局部變數的值
主調函數局部變數的空間沒有被釋放。主調函數函數沒有執行完,被調用函數執行完後還會順著返回鏈跳到主調函數繼續執行,所以主調函數的局部變數不能釋放
㈨ 百度百科中說棧可以在函數調用時存儲斷點,那麼存儲斷點是什麼意思啊棧怎麼用呢
你可以把斷點理解為程序跳轉前的地址。我們知道一個可執行程序有他自己的代碼段、數據段,代碼段存放程序的一條一條指令,當操作系統載入程序時,會將執行指針指向程序代碼段的第一條指令的地址,然後順序執行。當遇到函數調用的時候,操作系統會保存當前指令的地址(把該地址存到一個叫做「棧」的數據結構中),然後當調用函數運行結束後,操作系統會從「棧」中取出保存的指令地址,再順序執行。
保存斷點的「棧」是由操作系統自己分配的,用戶是感覺不到的。你如果想了解棧的話,建議你看看數據結構相關的書籍。
㈩ 計算機里棧是什麼意思啊
分析如下:
棧是一種數據結構。
1、棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
2、棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。
3、棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧。
拓展資料:
1、棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
2、棧是限定僅在表頭進行插入和刪除操作的線性表。要搞清楚這個概念,首先要明白」棧「原來的意思,如此才能把握本質。"棧「者,存儲貨物或供旅客住宿的地方,可引申為倉庫、中轉站,所以引入到計算機領域里,就是指數據暫時存儲的地方,所以才有進棧、出棧的說法。
(資料來源:網路:棧)