相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- PHP中opcode緩存簡(jiǎn)單用法分析
- thinkPHP控制器變量在模板中的顯示方法示例
- PHP move_uploaded_file() 函數(shù)(將上傳的文件移動(dòng)到新位置)
- dirname(__FILE__)的含義和應(yīng)用說明
- thinkPHP5框架實(shí)現(xiàn)分頁(yè)查詢功能的方法示例
- PHP中單雙號(hào)與變量
- PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法分析
- Laravel ORM對(duì)Model::find方法進(jìn)行緩存示例詳解
- PHP讀寫文件高并發(fā)處理操作實(shí)例詳解
- 【CLI】利用Curl下載文件實(shí)時(shí)進(jìn)度條顯示的實(shí)現(xiàn)
PHP環(huán)形鏈表實(shí)現(xiàn)方法示例
本文實(shí)例講述了PHP環(huán)形鏈表實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
環(huán)形鏈表是一種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),類似于單鏈表。區(qū)別是環(huán)形鏈表的尾節(jié)點(diǎn)指向頭節(jié)點(diǎn)。
從而形成一個(gè)環(huán),
環(huán)形鏈表是一種非常靈活的存儲(chǔ)結(jié)構(gòu),可解決許多實(shí)際問題,魔術(shù)師發(fā)牌問題和約瑟夫問題
都能利用環(huán)形鏈表來解決,下面是一個(gè)完整的環(huán)形鏈表實(shí)例,使用php來實(shí)現(xiàn)的(參照韓順平老師的php算法教程)
/** * 環(huán)形鏈表的實(shí)現(xiàn) * */ class child { public $no;//序號(hào) public $next;//指向下個(gè)節(jié)點(diǎn)的指針 public function __construct($no=''){ $this ->no = $no; } } /** * 創(chuàng)建一個(gè)環(huán)形鏈表 * @param $first null 鏈表的頭節(jié)點(diǎn) * @param $num integer 需要添加節(jié)點(diǎn)的數(shù)量 */ function create(&$first,$num) { $cur = null; for ($i=0;$i<$num;$i++) { $child = new child($i+1); if ($i==0) { $first = $child; $first->next = $first;//將鏈表的尾節(jié)點(diǎn)指向頭節(jié)點(diǎn) 形成環(huán)形鏈表 $cur = $first;//鏈表的頭節(jié)點(diǎn)不能動(dòng) 需要交給一個(gè)臨時(shí)變量 } else { $cur->next = $child; $cur->next->next = $first;//將鏈表的尾節(jié)點(diǎn)指向頭節(jié)點(diǎn) 形成環(huán)形鏈表 $cur = $cur->next; } } } /** * 遍歷環(huán)形鏈表 * @param $first object 環(huán)形鏈表的頭 * */ function show ($first) { //頭節(jié)點(diǎn)不能動(dòng),交個(gè)一個(gè)臨時(shí)變量 $cur = $first; while ($cur->next!=$first)//當(dāng)$cur->next==$first說明到了鏈表的最后一個(gè)節(jié)點(diǎn) { echo $cur->no.'</br>'; $cur = $cur->next; } //當(dāng)退出循環(huán)的時(shí)候$cur->next=$first 剛好會(huì)忽略當(dāng)前節(jié)點(diǎn)本身的遍歷 所以退出的時(shí)候還要輸出一下 否則會(huì)少遍歷一個(gè)節(jié)點(diǎn) echo $cur->no; }