一道C 關於「棧」的問題

2021-08-17 10:58:58 字數 702 閱讀 1683

void test_find()

問題是:

上述**的執行結果是,兩次顯示 ntempa的結果為123;

通過實現test_find函式中的**,讓第二次的ntempa結果為456;

知識點一:

棧:乙個程序中的棧空間大小在windows上預設為1m,當然可以通過visualstudio配置;

棧的應用範圍是相對於執行緒;

進棧的方式是,先進入棧的最大位址(windows,別的系統或環境需要驗證),然後後依次向小的位址入棧;

棧中元素不一定是緊緊相挨著,有可能中間空著幾個位元組,但是理論上元素是依次的,只是中間有可能有位元組間隔;

棧的空間是連續的;

堆:是從小位址向大位址建立建立;

堆的空間方式更像是動態鍊錶;

每乙個執行緒都有乙個棧,但是每乙個應用程式通常都只有乙個堆

解析:如果看到文章題目,當然就有思路了;

這裡普及兩個基本知識點;

簡單解答**:

void test_find()

i++;

}但是上述**實現還是有一點點問題,就是假定了連續元素間的空格距離為4個位元組,所以不夠嚴謹;

解析**2:

void test_find1()

i++;

}這段**完美的解決了上述問題;

沒有看過別人怎麼做,這只是乙個簡單實現;

關於堆,棧,可以參考:

關於C 的一道題

閱讀下面程式,然後請寫出輸出結果 cpp view plaincopy include using namespace std int main void 輸出結果如下圖 分析 為什麼會這樣的結果呢?首先我們先分析一下程式,首先我們先看看第一組a和b,那麼a和b是什麼呢?根據我們所學,我們知道a和b...

一道關於迷宮的佇列問題

include include define max n 10 define max m 10 using namespace std const int inf 100000000 使用typedef會更加方便一點 typedef pairp 輸入 char maze max n max m 1 ...

一道單調棧的題目

今天偶然遇到一道單調棧的題目,順便複習下閒置已久的演算法知識,題目的意思大致就是給你乙個區間,找到子段和 k的乙個最小子段。子段問題的關鍵是字首和,先求一下 int sum 50005 for int i 0 i sum i 1 sum i a i 緊接著,關鍵就是維持乙個單調棧,下面解釋一下什麼是...