本文實(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;}希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選