文西马龙:http://blog.csdn.net/wenximalong/
singleLink.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body>
<h1>单向链表完成英雄排行管理</h1>
<hr/>
<a href="#">查询英雄</a>
<a href="#">添加英雄</a>
<a href="#">删除英雄</a>
<a href="#">修改英雄</a>
<?php
//首先需要基础知识。知道什么是变量,有一些面向对象编程基础。
//知道三大控制语句 if for while
//定义英雄类
class Hero{
public $no;//排名
public $name;//真实名字
public $nickname;//外号
public $next=null;//$next是一个引用,指向另外一个Hero的对象实例。
//构造函数
public function __construct($no='',$name='',$nickname=''){
//赋值
$this->no=$no;
$this->name=$name;
$this->nickname=$nickname;
}
}
//创建一个head头,该head只是一个头,不放入数据
$head=new Hero();
//创建一个英雄
$hero=new Hero(1,'宋江','及时雨');
//链接
$head->next=$hero;
$hero2=new Hero(2,'卢俊义','玉麒麟');
//链接
//现在使用的是比较二的方法,马上改进,这样是为了方便理解
$hero->next=$hero2;
//单链表的遍历,必须要从head头节点开始找
//是从head开始遍历的,$head头的值千万不能变,变化后就不能遍历我们的单链表了
function showHeros($head){
//遍历[必须要知道什么时候,到了链表的最后]
//这里为了不去改变$head的指向,我们可以使用一个临时的变量
$cur=$head;
while($cur->next!=null){
//第一个节点为头结点,所以用$cur->next指向下一个节点,头结点里什么都没有是空的
echo'<br/>英雄的编号是'.$cur->next->no.'名字'.$cur->next->name.'外号='.$cur->next->nickname;
//如果只写到这里,就会是死循环了
//所有要让$cul移动
$cur=$cur->next;
}
}
echo'<br/>***********当前的英雄排行情况是**************';
showHeros($head);
?>
</body>
</html>
在上面的代码中,添加英雄的时候用的一个比较笨的方法,
现在用一个比较好的方法做添加工作。
1.直接在链表最后加
singleLink2.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body>
<h1>单向链表完成英雄排行管理</h1>
<hr/>
<a href="#">查询英雄</a>
<a href="#">添加英雄</a>
<a href="#">删除英雄</a>
<a href="#">修改英雄</a>
<?php
//定义英雄类
class Hero{
public $no;//排名
public $name;//真实名字
public $nickname;//外号
public $next=null;//$next是一个引用,指向另外一个Hero的对象实例。
//构造函数
public function __construct($no='',$name='',$nickname=''){
//赋值
$this->no=$no;
$this->name=$name;
$this->nickname=$nickname;
}
}
//创建一个head头,该head只是一个头,不放入数据
$head=new Hero();
//写一个函数,专门用于添加英雄
function addHero($head,$hero){
//1.直接在链表最后加
//要找到链表的最后,千万不能动$head;
$cur=$head;
while($cur->next!=null){
$cur=$cur->next;
}
//当退出while循环的时候,此时$cur就是链表的最后
//加入hero
$cur->next=$hero;
//2.按照英雄的排行加入(这里我希望能够保证链表的顺序)
}
//单链表的遍历,必须要从head头节点开始找
//是从head开始遍历的,$head头的值千万不能变,变化后就不能遍历我们的单链表了
function showHeros($head){
//遍历[必须要知道什么时候,到了链表的最后]
//这里为了不去改变$head的指向,我们可以使用一个临时的变量
$cur=$head;
while($cur->next!=null){
//第一个节点为头结点,所以用$cur->next指向下一个节点,头结点里什么都没有是空的
echo'<br/>英雄的编号是'.$cur->next->no.'名字'.$cur->next->name.'外号='.$cur->next->nickname;
//如果只写到这里,就会是死循环了
//所有要让$cul移动
$cur=$cur->next;
}
}
//添加
$hero=new Hero(1,'宋江','及时雨');
addHero($head,$hero);
$hero=new Hero(2,'卢俊义','玉麒麟');
addHero($head,$hero);
$hero=new Hero(6,'林冲','豹子头');
addHero($head,$hero);
$hero=new Hero(3,'吴用','智多星');
addHero($head,$hero);
//在输出的时候,林冲就排在了吴用的前面