PHP 資料結構與演算法之《棧》

來源:互聯網
上載者:User

  介紹

  “要成高手,必練此功”。

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

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

  棧為何物?

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

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

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

  分析

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

請看

組成成分

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

  動作(方法):壓入(push:規則,放線上性表最後面),彈出(pop:規則,從最後取出,並且末端位置向前移動)。

  編碼

運行結果

 

  總結

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

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

 

原文:http://www.cnblogs.com/baochuan/archive/2012/06/02/2530386.html



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.