ホームページ >バックエンド開発 >PHPチュートリアル >PHPで循環リンクリストを実装する方法を共有する

PHPで循環リンクリストを実装する方法を共有する

黄舟
黄舟オリジナル
2017-09-16 09:06:211281ブラウズ

この記事では、主にPHP循環リンクリストの実装方法を紹介し、PHP循環リンクリストの定義、作成、走査、その他の操作テクニックと注意事項を具体的な例の形で分析します。この記事では、PHP 循環リンク リストの実装例について説明しています。参考までに皆さんと共有してください。詳細は次のとおりです:

循環リンク リストは、単一リンク リストに似た、リンクされたストレージ構造です。違いは、循環リンク リストの末尾ノードが先頭ノードを指していることです。

このようにしてリングを形成します。

リングリンクリストは、多くの実際的な問題を解決できる非常に柔軟なストレージ構造です。以下は、リングリンクリストを使用することで、マジシャンのカード配付問題とジョセフの問題

の両方を解決できます。完全なリングのリンク リストの例、PHP を使用して実装 (ハン シュンピン先生の PHP アルゴリズム チュートリアルを参照)

/** 
 *  环形链表的实现
 *  
 */
class child
{
  public $no;//序号
  public $next;//指向下个节点的指针
  public function __construct($no=''){
    $this ->no = $no;
  }
}
/**
 * 创建一个环形链表
 * @param $first null  链表的头节点
 * @param $num  integer 需要添加节点的数量
 */
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;//将链表的尾节点指向头节点 形成环形链表
      $cur = $first;//链表的头节点不能动 需要交给一个临时变量
    } else {
      $cur->next = $child;
      $cur->next->next = $first;//将链表的尾节点指向头节点 形成环形链表
      $cur = $cur->next;
    }
  }
}
/**
 * 遍历环形链表
 * @param $first object 环形链表的头
 * 
 */
function show ($first)
{
  //头节点不能动,交个一个临时变量
  $cur = $first;
  while ($cur->next!=$first)//当$cur->next==$first说明到了链表的最后一个节点
  {
    echo $cur->no.&#39;</br>&#39;;
    $cur = $cur->next;
  }
  //当退出循环的时候$cur->next=$first 刚好会忽略当前节点本身的遍历 所以退出的时候还要输出一下 否则会少遍历一个节点
  echo $cur->no;
}

以上がPHPで循環リンクリストを実装する方法を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。