C語言強化(二)設計可以求最小元素的棧

2021-12-30 05:35:31 字數 1949 閱讀 2200

如何使用棧「先進後出的特性如何巧妙地借助輔助棧如何在結構體中定義可共享的靜態成員變數題目

看似很簡單的求最小值函式,思路有很多很多。筆者首先想到每次push入棧都進行一次排序,使這個棧的棧頂永遠是最小元素,然後就發現這是乙個很蠢很蠢的想法,第一這樣做會改變了棧的結構,第二不滿足題目對時間複雜度的要求。 愚蠢歸愚蠢,還是有點用的。既然不能改變原來棧的結構,那為何不弄倆棧呢?輔助棧的想法由此而出。 接下來是時間複雜度的問題,顯然每次都進行排序是不可行的了,那麼是否可以記錄儲存每個最小值的下乙個最小值呢,也就是說,當我當前這個最小值被pop出去後,我要知道下乙個最小值是哪個。這時棧的【先進後出】特性就派上用場了。頭腦風暴到此結束。下面是具體思路牢牢把握住棧【先進後出】的特性,模擬各種實際情況,得出演算法

輔助棧:棧結構體中新增乙個輔助棧,這裡稱為【最小值棧】,儲存最小值的歷史記錄,所以該最小值棧的棧頂即為當前棧的最小元素

演算法實現:--push 當push進來的元素值大於、等於最小值棧的棧頂,最小值棧不變,因為根據棧的特性,只有當前最小值元素上面的所有元素都出去的時候,該最小值元素才能pop出去,否則該最小值元素用於是最小值。

反之,當push進來的元素值小於最小值棧的棧頂,則將該元素放進最小值棧。

--pop 當pop出去的元素不是最小值棧棧頂,則最小值棧不變

如果pop出去的值為當前最小值,則最小值棧也pop出乙個元素,此時最小值棧的棧頂就是下乙個最小值元素

源**

#include

#include

#include

using namespace std;

/**題目:

定義棧的資料結構 要求新增乙個min函式,找出棧的最小元素

要求min、push、pop函式的時間複雜度都為o(1)

思路牢牢把握住棧【先進後出】的特性,模擬各種實際情況,得出演算法

棧結構體中新增乙個輔助棧,這裡稱為【最小值棧】,儲存最小值的歷史記錄

所以該最小值棧的棧頂即為當前棧的最小元素

當push進來的元素值大於、等於最小值棧的棧頂,最小值棧不變

因為根據棧的特性,只有當前最小值元素上面的所有元素都出去的時候,該最小值元素才能pop出去

反之,則將該元素放進最小值棧

當pop出去的元素不是最小值棧棧頂,則最小值棧不變

反之,最小值棧pop出棧頂

這樣如果pop出去的值為當前最小值,則最小值棧也pop出乙個元素

此時最小值棧的棧頂就是下乙個最小值元素

*//*

建立棧結點結構體

value 值

nextnode 下乙個結點

push() 入棧函式

pop() 出棧函式

min() 求最小值函式

push2() 入棧並且求最小值

pop2() 出棧並且求最小值

*/struct stacknodeelse

coutvalue

} else

}else

}else

} if(null!=minnode)

coutvalue

this->min(true,value);

return node;

} //pop+min

stacknode* pop2()

};//結構體靜態變數初始化!

stacknode * stacknode::minnode = null;

stacknode * stack;

void main()

system(pause);

}效果圖

總結,所有與棧有關的題目,都記住這四個字——」先進後出「

C語言強化(五)輸出一串數中最小的 k 個

有時候題目看似很簡單,似乎非常容易實現,但是,你考慮過效率了嗎?通過這道題,你可以掌握 題目 輸入 n 個整數,輸出其中最小的 k 個。例如輸入 1,2,3,4,5,6,7 和 8 這 8 個數字,則最小的 4 個數字為 1,2,3 和 4。看到此題,第一反應就是對這串數字進行排序,然後遍歷角標0 ...

最小二乘法擬合二次曲線 C語言

題目x 21 y 21 利用最小二乘法將上面資料所標示的曲線擬合為二次曲線,使用c語言程式設計求解函式係數 最小二乘法原理 原理不再贅述,主要是解法採用偏微分求出來的係數公式a,b,c 就是這個公式,對應了二次方程的a,b,c include include define n 1e 13 int m...

二叉堆(最小堆)的C語言實現

本 參考 漫畫演算法 一書,作者魏夢書。先說一下環境,win10,vs2017,不使用預編譯頭。本 使用陣列 也可以使用鍊錶 構建二叉堆,二叉堆是一種特殊的完全二叉樹,所以父節點索引和子節點索引符合以下公式 children left parent2 1 children right parent2...