韩顺平_PHP程序员玩转算法公开课(第一季)03_单链表crud操作之_水浒英雄排行算法_学习笔记_源代码图解_PPT文档整理

文西马龙: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);
			//在输出的时候,林冲就排在了吴用的前面
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值