[PHP] 用php实现双向链表 →→→→→进入此内容的聊天室

来自 , 2021-03-17, 写在 PHP, 查看 135 次.
URL http://www.code666.cn/view/cdcb2f5c
  1. $n=10;//个数
  2. class link{
  3.  
  4.         public $val;
  5.         public $next=null;
  6.         public $pre=null;
  7.         static $num=0;
  8.        
  9.         //初始化
  10.         function __construct($num)
  11.         {
  12.                 $this->val=$num;
  13.                 self::$num++;//别忘记self是一般指向静态变量 静态方法的指针 而this则是初始化后指向对象的指针
  14.         }
  15.        
  16.         //访问结点
  17.         function read_link($val,$head)
  18.         {
  19.                 $one=$head->next;
  20.                 while($one->val<$val && $one!=$head) {$one=$one->next;}
  21.                 if($one==$head) {echo 'not exist this node!';return;}
  22.                 return $one;
  23.         }
  24.        
  25.         //对象个数
  26.         function __get($num)
  27.         {
  28.                 return self::$num;
  29.         }
  30.        
  31.         //按照大小增加结点
  32.         function add_link($val,$head)
  33.         {
  34.                 $one=$head->next;
  35.                 while($one!=$head){
  36.                         if($one->val<$val)      {$one=$one->next;continue;}
  37.                         else if($one->val=$val){echo 'linknode is already exist!';return;}
  38.                         else if($one->val>$val) break;
  39.                 }
  40.                 $pre=$one->pre;
  41.                
  42.                         $cur=new link($val);
  43.                         $pre->next=$cur;
  44.                         $one->pre=$cur;
  45.                         $cur->next=$one;
  46.                         $cur->pre=$pre;
  47.                
  48.                 return $cur;
  49.         }
  50.         //删除该结点
  51.         function delete_node($val,$head)
  52.         {
  53.                 $one=$head->next;
  54.                 while($one!=$head) {
  55.                         if($one->val!=$val) {$one=$one->next;continue;}
  56.                         else break;
  57.                 }
  58.                 if($one==$head) {echo 'not exist linknode!';return;}
  59.                 else{
  60.                         $pre=$one->pre;
  61.                         $next=$one->next;
  62.                         $pre->next=$next;
  63.                         $next->pre=$pre;
  64.                         $one=new link(NULL);//引用变量值改变不影响被引用变量的值
  65.                         //unset($one);只是引用数减1 并不能删除
  66.                 }
  67.                 return $one;
  68.         }
  69.  
  70.        
  71. }
  72. $head=new link(null);
  73. for($i=1;$i<=$n;$i++)
  74. {
  75.         if(isset($cur)) $temp=$cur;//保存前一次cur
  76.         if($i==1){
  77.                 $cur=new link($i);
  78.                 $head->next=$cur;
  79.                 $cur->pre=$head;
  80.         }else if($i==$n){//最后一次则和头结点在一起
  81.                 $cur=new link($i);
  82.                 $temp->next=$cur;
  83.                 $cur->next=$head;
  84.                 $head->pre=$cur;
  85.         }
  86.         else{
  87.                 $cur=new link($i);
  88.                 $temp->next=$cur;
  89.                 $cur->pre=$temp;
  90.         }
  91.        
  92. }
  93.  
  94. //var_dump($head->read_link(10,$head)->val);访问结点
  95.  
  96. //var_dump($head->add_link(10,$head));//增加结点
  97. //var_dump($head->add_link(100,$head)->val);
  98.  
  99. //var_dump($head->delete_node(102,$head));//删除结点       
  100. //var_dump($head->delete_node(10,$head)->val);
  101. //var_dump($head->read_link(10,$head)->val);
  102.  
  103. /* $a=1;
  104. $b=$a; 
  105. $b=NULL;
  106. echo $a;//看来引用变量改变值的时候 两个变量就独立咯
  107. //unset($b);
  108. $a=NULL;var_dump($b);//看来变量有引用和被引用的关系
  109. echo $a;
  110.  */

回复 "用php实现双向链表"

这儿你可以回复上面这条便签

captcha