Maison  >  Article  >  développement back-end  >  Partager la méthode d'implémentation de liste chaînée circulaire en PHP

Partager la méthode d'implémentation de liste chaînée circulaire en PHP

黄舟
黄舟original
2017-09-16 09:06:211217parcourir

Cet article présente principalement la méthode d'implémentation de la liste chaînée circulaire PHP, et analyse la définition, la création et le parcours de la liste chaînée circulaire PHP ainsi que d'autres techniques et précautions de fonctionnement sous la forme d'exemples spécifiques. Les amis dans le besoin peuvent se référer à cet article.

L'exemple décrit la méthode d'implémentation de la liste chaînée circulaire PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Une liste chaînée circulaire est une structure de stockage liée, similaire à une liste chaînée unique. La différence est que le nœud de queue de la liste chaînée circulaire pointe vers le nœud de tête.

Formant ainsi un anneau,

La liste chaînée en anneau est une structure de stockage très flexible qui peut résoudre de nombreux problèmes pratiques, tels que le problème de distribution de cartes du magicien et le problème de Joseph

Utilisez une liste chaînée circulaire pour résoudre le problème. Ce qui suit est un exemple complet de liste chaînée circulaire, implémenté à l'aide de PHP (voir le didacticiel sur l'algorithme PHP du professeur Han Shunping)


/** 
 *  环形链表的实现
 *  
 */
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;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn