PHP 程式設計師學資料結構與演算法之《棧》

2021-09-01 13:59:45 字數 1224 閱讀 5421

介紹

「要成高手,必練此功」。

要成為優秀的程式設計師,資料結構和演算法是必修的內容。而現在的web程式設計師使用傳統演算法和資料結構都比較少,因為很多演算法都是包裝好的,不用我們去操心具體的實現細節,如php的取棧操作array_pop,進棧操作array_push,都有指定的庫函式,導致我們對基礎演算法的研究越來越少,最後成為乙個工具的傀儡而已。

所以我還是建議更多的coder從基礎開始學習。這篇就先講我們最熟悉的棧操作開始入手,讓我們熟悉棧。

棧為何物?

口訣「後進先出」,這是我印象最深的一句話,也是老師一坨講解中,印象最深刻的。

定義:棧是限制插入和刪除都只能發生在乙個位置上進行的線性表,該位置是線性表的末端,叫做棧的頂。

過程:先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。

通過定義和過程,我們分析出資料結構(紅色標識),動作部分(藍色標識),以及動作的規則(黃色標識)。

資料:線性表(用array結構儲存命名為data),末端索引(用int結構儲存命名為end,初始值為null——因為開始線性表是沒有元素的,所以就沒有末端索引這麼一說,而且由於不斷取資料,新增資料,這個末端是變化的元素。)。

以上是本人對棧的分析理解過程,由於我是一名php coder,所以我用php的角度去分析和編碼。

如果是c語言去編碼,陣列應該指定最大寬度,因為c語言陣列不像php陣列能自行增長,必須要有乙個初始寬度。

Java程式設計師必備 資料結構與演算法之快速排序(一)

關於快速排序演算法這個問題,也可以等價於乙個對分治演算法實現的典型例子,首先通過乙個基準數將一串未排序序列分成左右兩個序列s1和s2,其中s1的元素都比基準數小,s2的元素都比基準數大,然後再對左右兩個序列分別再次進行快速排序,對於s1 s2的基準數可以隨便尋找,並不一定每一次都把最低位設定為基準數...

Java程式設計師必備 資料結構與演算法之快速排序(二)

public void change object r,int low,int high r low temp return low public void quicksort object r,int low,int high 快速排序演算法的執行時間依賴於劃分是否平衡,根據基準數元素將序列劃分為...

被程式設計師鄙視的程式 資料結構與演算法

今天看到的乙個很有趣的求解過程,題目如下 求和f x a 0 a 1 x a n 1 x n 1 a n x n 解法一 直接求解 如下 計算多項式f x a 0 a 1 x a n 1 x n 1 a n x n double f1 double a,double x,int n 所得到的結果是沒...