当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP中模拟链表和链表的基本操作示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-12 10:36:18 浏览: 评论:0 

这篇文章主要介绍了PHP中模拟链表和列表的基本操作示例,包括链表的增删查改等,说明基本上都包含在代码注释中,需要的朋友可以参考下。

模拟链表:

  1. <?php  
  2. /** 
  3.  * PHP实现链表的基本操作 
  4.  */ 
  5. class linkList { 
  6.   /** 
  7.    * 姓名 
  8.    * @var string 
  9.    */ 
  10.   public $name = ''
  11.      
  12.   /** 
  13.    * 编号 
  14.    * @var int 
  15.    */ 
  16.   public $id = 0; 
  17.      
  18.   /* 
  19.    * 引用下一个对象 
  20.    */ 
  21.   public $next = null; 
  22.      
  23.   /** 
  24.    * 构造函数初始化数据 
  25.    * @param int $id 
  26.    * @param string $name 
  27.    */ 
  28.   public function __construct($id = 0, $name = '') { 
  29.     $this->name = $name
  30.     $this->id  = $id
  31.   } 
  32.      
  33.   /** 
  34.    * 遍历链表 
  35.    */ 
  36.   public static function echo_link_list($head) { 
  37.     $curr = $head
  38.     while ($curr->next != null) { 
  39.       echo '姓名:'.$curr->next->name, ' 编号:'.$curr->next->id; 
  40.       echo '<br>'
  41.       $curr = $curr->next; 
  42.     } 
  43.   } 
  44.      
  45.   /** 
  46.    * 添加新节点 
  47.    */ 
  48.   public static function add($head$id$name) { 
  49.     $curr = $head
  50.     $obj = new linkList($id$name); 
  51.        
  52.     while ($curr->next != null) { 
  53.       // 如果当前ID < 下一个ID,则添加到中间,添加节点到指定顺序位置 
  54.       if ($curr->next->id > $id) { 
  55.            
  56.         $obj->next = $curr->next; 
  57.         $curr->next = $obj
  58.            
  59.         return true; 
  60.       } else if ($curr->next->id == $id) { 
  61.            
  62.         echo '当前Id:'.$id.'重复了,请不要继续添加了!'
  63.         echo '<br>'
  64.            
  65.         return false; 
  66.       } 
  67.       $curr = $curr->next; 
  68.     } 
  69.     // 添加节点到尾部 
  70.     if ($curr->next == null) { 
  71.       $curr->next = $obj
  72.     } 
  73.   } 
  74.      
  75.   /** 
  76.    * 删除节点 
  77.    */ 
  78.   public static function del($head$id) { 
  79.     $curr = $head
  80.        
  81.     while($curr->next != null) { 
  82.       if ($curr->next->id == $id) { 
  83.         $curr->next = $curr->next->next; 
  84.         return true; 
  85.       } 
  86.       $curr = $curr->next; 
  87.     } 
  88.   } 
  89.      
  90.   /** 
  91.    * 修改节点 
  92.    */ 
  93.   public static function edit($head$id$new_name) { 
  94.     $curr = $head
  95.        
  96.     while($curr->next != null) { 
  97.       if ($curr->next->id == $id) { 
  98.         $curr->next->name = $new_name
  99.       } 
  100.       $curr = $curr->next; 
  101.     } 
  102.   } 
  103.    
  104. $head = new linkList(); 
  105. linkList::add($head, 1, 'wangdk'); 
  106. linkList::add($head, 2, 'sunshuzhen'); 
  107. linkList::add($head, 8, 'wanghaha'); 
  108. linkList::add($head, 6, 'wangchufen'); 
  109. linkList::add($head, 6, 'wangchufen'); 
  110. linkList::add($head, 3, 'wangdaye'); 
  111.    
  112. linkList::del($head, 1); 
  113. linkList::edit($head, 2, 'hahaha'); 
  114. linkList::echo_link_list($head); 
  115.    
  116. ?> 

链表的增删查改:

  1. <?php  
  2. /** 
  3.  * PHP实现链表的基本操作 
  4.  */ 
  5. class linkList { 
  6.   /** 
  7.    * 姓名 
  8.    * @var string 
  9.    */ 
  10.   public $name = ''
  11.      
  12.   /** 
  13.    * 编号 
  14.    * @var int 
  15.    */ 
  16.   public $id = 0; 
  17.      
  18.   /* 
  19.    * 引用下一个对象 
  20.    */ 
  21.   public $next = null; 
  22.      
  23.   /** 
  24.    * 构造函数初始化数据 
  25.    * @param int $id 
  26.    * @param string $name 
  27.    */ 
  28.   public function __construct($id = 0, $name = '') { 
  29.     $this->name = $name
  30.     $this->id  = $id
  31.   } 
  32.      
  33.   /** 
  34.    * 遍历链表 
  35.    */ 
  36.   public static function echo_link_list($head) { 
  37.     $curr = $head
  38.     while ($curr->next != null) { 
  39.       echo '姓名:'.$curr->next->name, ' 编号:'.$curr->next->id; 
  40.       echo '<br>'
  41.       $curr = $curr->next; 
  42.     } 
  43.   } 
  44.      
  45.   /** 
  46.    * 添加新节点 
  47.    */ 
  48.   public static function add($head$id$name) { 
  49.     $curr = $head
  50.     $obj = new linkList($id$name); 
  51.        
  52.     while ($curr->next != null) { 
  53.       // 如果当前ID < 下一个ID,则添加到中间,添加节点到指定顺序位置 
  54.       if ($curr->next->id > $id) { 
  55.            
  56.         $obj->next = $curr->next; 
  57.         $curr->next = $obj
  58.            
  59.         return true; 
  60.       } else if ($curr->next->id == $id) { 
  61.            
  62.         echo '当前Id:'.$id.'重复了,请不要继续添加了!'
  63.         echo '<br>'
  64.            
  65.         return false; 
  66.       } 
  67.       $curr = $curr->next; 
  68.     } 
  69.     // 添加节点到尾部 
  70.     if ($curr->next == null) { 
  71.       $curr->next = $obj
  72.     } 
  73.   } 
  74.      
  75.   /** 
  76.    * 删除节点 
  77.    */ 
  78.   public static function del($head$id) { 
  79.     $curr = $head
  80.        
  81.     while($curr->next != null) { 
  82.       if ($curr->next->id == $id) { 
  83.         $curr->next = $curr->next->next; 
  84.         return true; 
  85.       } 
  86.       $curr = $curr->next; 
  87.     } 
  88.   } 
  89.      
  90.   /** 
  91.    * 修改节点 
  92.    */ 
  93.   public static function edit($head$id$new_name) { 
  94.     $curr = $head
  95.        
  96.     while($curr->next != null) { 
  97.       if ($curr->next->id == $id) { 
  98.         $curr->next->name = $new_name
  99.       } 
  100.       $curr = $curr->next; 
  101.     } 
  102.   } 
  103.    
  104. $head = new linkList(); 
  105. linkList::add($head, 1, 'wangdk'); 
  106. linkList::add($head, 2, 'sunshuzhen'); 
  107. linkList::add($head, 8, 'wanghaha'); 
  108. linkList::add($head, 6, 'wangchufen'); 
  109. linkList::add($head, 6, 'wangchufen'); 
  110. linkList::add($head, 3, 'wangdaye'); 
  111.    
  112. linkList::del($head, 1); 
  113. linkList::edit($head, 2, 'hahaha'); 
  114. linkList::echo_link_list($head); 
  115.    
  116. ?>

Tags: PHP模拟链表 PHP链表操作

分享到: