C 程式中關於堆疊程式的簡單理解

2021-08-14 12:34:07 字數 814 閱讀 6354

#include "stack.h"

stack::stack()    // create an empty stack

bool stack::isempty() const

bool stack::isfull() const

bool stack::push(const item & item)

else

return false;

}bool stack::pop(item & item)

else

return false;

}首先想說的是push程式,push程式主函式中的s.pop(a)呼叫push函式,通過引用將a傳遞給引用變數item,這個如果看了原版的普拉達的書應該知道item 就是宣告的無符號長整型變數,所以是可以劃等號的,items[top++] = item;入棧存資料相信大家都能看懂吧,就是將進來的資料傳遞給儲存的陣列,然後top變數加1,也就相當於指標,指向下乙個陣列元素,所以對大部分1人來說,入棧是很好理解的,但是出棧很多人包括我,迷惑了好久。我硬是把pop函式作用理解偏了。item = items[--top];我先來解釋一下這個時候,為什麼選擇top是先減一,然後再執行陣列元素。因為此時,因為入棧以後,我們已經把top處理為指向為將要儲存下乙個陣列元素的位址了,也就是它現在此時是待存狀態,還沒有存。但是我們已經處理了top++了,所以,當我們出棧的時候,首先必須將top先減1,然後我們再作賦值。item = items[--top];,將其以前儲存的元素賦值給引用變數item。然後將資料出棧,返回到主函式中,通過呼叫就完成了資料的出棧工作。

可能理解的有偏差的地方,寫給自己以後翻閱的。不喜勿噴,

程式中關於堆疊大小的劃定

昨天在做 小豬登山 的題目碰到了陣列容量太大的問題,今天做乙個總結。首先,參考了slyar的文章 c語言 全域性變數和區域性變數的大小限制 直接貼上。include int main 編譯執行後發現溢位錯誤。include int a 1000000 全域性變數 int main 編譯執行後正常。在...

關於C 中的堆 棧

乙個c 程式設計占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配 釋放,存放函式的引數值,區域性變數值。操作方式類似資料結構中的stack。2 堆區 heap 一般由程式設計師分配 釋放。如果程式設計師未釋放,一般由os在程式結束時 同資料結構中的堆不同,分配方式類似鍊錶。3 靜...

關於陣列的簡單C程式的錯誤

如下 code include array01 接受輸入的乙個字元,並計算此字元到小寫a的距離,作為輸出陣列元素的第一維引數 array02 接受輸入作為輸出陣列元素的第二維引數 inputth 顯示陣列元素 int mat1,mat2 mat1 array01 mat2 array02 print...