单链表

来源:互联网 发布:java并发编程实战下载 编辑:程序博客网 时间:2024/06/16 09:48

单链表是一种链式存储结构,基本特征:必须有一个头节点,头节点不储存数据  只存储一个用于指向下个节点地址的变量,每个节点都存有一个指向下个节点的指针(一个指向下个节点的地址),通过这个指针从而使链表中的各个节点串联起来形成一个完整的链表。下面是一个用php完成的链表  有增 删 改 查  参照的是韩顺平老师的php算法视频教程(有需要的可留言)

<?php/** * 单链表实例 */header('Content-Type:text/html;charset=utf-8');class Hero{    public $name;    public $no;//序号    public $nickname;//绰号    public $next = null;//指针    public function __construct($name='',$nickname='',$no=''){        $this->name = $name;        $this->nickname = $nickname;        $this->no = $no;    }}//创建一个head头,该head 只是一个头,不放入数据$head=new Hero();/** * 遍历单链表 */function showHero($head){    //遍历时头接点不能动否则会破坏链表,将头节点交给一个零时变量    $current = $head;    while($current->next!=null)    {        echo $current->next->name.'->'.$current->next->nickname.'->'.$current->next->no.'</br>';        $current = $current->next;    }}/** * 按$no顺序添加不能有重复 */function addHero($head,$Hero){    $cur = $head;    $flag = false;//表示没有重复的编号    while ($cur->next!=null)    {        if ($cur->next->no > $Hero->no)        {            break;        } else if ($cur->next->no==$Hero->no){            $flag = true;//将标志为至为真,表示添加重复值            echo $Hero->name.'已存在不能再添加'.'</br>';        }        $cur = $cur->next;    }        if ($flag==false)    {                $Hero->next = $cur->next;        $cur->next = $Hero;    }}/** * 删除 * @param $no integer 要删除的序号 * @param $head object 链表的头 */function delHero($head,$no){    $cur = $head;    $flag = false;    while ($cur->next!==null)    {        if ($cur->next->no==$no)        {            $flag=true;            // 找到 $cur的下一个节点就是应该被删除的节点.            break;        }        //循环时指针必须移动,否则会成为死循环        $cur = $cur->next;    }    if ($flag==true)    {        $cur->next = $cur->next->next;    } else {        echo '没有你要删除的值';    }    }/** * 更新 只能修改昵称 * @param $head 链表的头节点 * @param $no integer 英雄的序号 * @param $nickname 英雄需要更新的昵称 * return boolean * */function updateHero($head,$nickname,$no){    $cur = $head;    $flag = false;//标志位    while ($cur->next!==null)    {        if ($cur->next->no==$no)        {            //将标志位的值改为真,说明找到了            $flag = true;            break;        }    }    if ($flag==true)    {        $cur->next->nickname = $nickname;    } else {        echo '没有找到要更新的英雄';    }}$Hero = new Hero('吴用','智多星',3);addHero($head,$Hero);$Hero  = new Hero('宋江','及时雨',1);addHero($head,$Hero);$Hero = new Hero('卢俊义','玉麒麟',2);addHero($head,$Hero);$Hero = new Hero('卢俊义','玉麒麟',2);addHero($head,$Hero);echo '<br/>************当前的英雄排行情况是*******'.'</br>';showHero($head);echo '<br/>************删除后额英雄排行情况是*******'.'</br>';delHero($head,1);showHero($head);echo '<br/>************更新后英雄排行情况是*******'.'</br>';updateHero($head,'王八蛋',2);showHero($head); ?>


原创粉丝点击