浅谈PHP数据结构之单链表
什么是链表?(依据百度词条查询而得)
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每个元素称为结点)组成,结点能够在执行时动态生成。每个结点包含两个部分:一个是存储数据元素的数据域,还有一个是存储下一个结点地址的指针域。
经过查询资料和观摩了站点不同版本号的链表后。小弟自己尝试着写了一个PHP版本号的单链表,希望对大家理解链表有所帮助。
<?php
//定义结点
class Node{
public $id;//结点ID
public $data;//结点数据
public $next;//指向下一结点
public function __construct($id,$data){
$this->id=$id;
$this->data=$data;
$this->next=NULL;
}
}
class Linklist{
private $head;//定义头结点
public function __construct($id=0,$data=NULL){
$this->head=new Node($id,$data);
}
//插入结点
public function addNode($node){
$head=$this->head;
//插入之前检查ID是否冲突
if($this->getNode($node->id)!=false){
echo "您要插入的ID为".$node->id."数据为".$node->data."的结点已经存在该ID。请改动ID后重试<br>";
return false;
}
while($head->next!=NULL){
if($head->next->id >= $node->id){
break;
}
$head=$head->next;
}
$node->next=$head->next;
$head->next=$node;
}
//删除结点
public function delNode($id){
$head=$this->head;
$temp=false;
//注意。删除操作须要找到须要删除的前一个结点
while($head->next != NULL){
if($head->next->id==$id){
$temp=true;
break;
}
$head=$head->next;
}
if($temp==true){
if($head->next->next==null){
$head->next=NULL;
}
else
$head->next=$head->next->next;
return true;
}
else {
echo '未找到id为'.$id.'的结点<br>';
}
}
//获取链表
public function getList(){
$head=$this->head;
if($head->next==NULL){
echo '该链表为空';
}
while($head->next !=NULL){
if($head->id != 0)
echo 'ID为'.$head->id.'的结点中的数据为'.$head->data.'<br/>';
$head=$head->next;
}
echo 'ID为'.$head->id.'的结点中的数据为'.$head->data;
}
//获取结点
public function getNode($id){
$head=$this->head;
while($head !=NULL){
if($head->id==$id)
return $head->data;
$head=$head->next;
}
return false;
}
//获取长度
public function getLength(){
$head=$this->head;
$num=0;
while($head->next !=NULL){
$num++;
$head=$head->next;
}
return $num;
}
}
$a=new Linklist;
$a->addNode(new Node(1,"Hello Word"));
$a->addNode(new Node(2,3));
$a->addNode(new Node(2,11123));
$a->addNode(new Node(3,11123));
$a->getList();
$b=$a->getNode(3);
$c=$a->getLength();
var_dump($b);
var_dump($c);
?>
最后为測试代码,以下是測试结果:
小弟初学。哪里不正确的希望大家能够包容下。给点建议。
浅谈PHP数据结构之单链表的更多相关文章
- Python数据结构之单链表
Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...
- javascript数据结构之单链表
下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下. //数 ...
- 数据结构之单链表的实现-java
一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...
- python 数据结构之单链表的实现
链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就 ...
- 数据结构(一) 单链表的实现-JAVA
数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...
- 浅谈PHP数据结构之栈
今天開始进阶自己的PHP,首先一切的编程语言都须要修炼自己的"内功",何为程序猿的"内功",我想大概就是数据结构和算法了吧 .毕竟是灵魂,是普通程序猿到高级程序 ...
- 数据结构 - 静态单链表的实行(C语言)
静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...
- 数据结构 - 动态单链表的实行(C语言)
动态单链表的实现 1 单链表存储结构代码描述 若链表没有头结点,则头指针是指向第一个结点的指针. 若链表有头结点,则头指针是指向头结点的指针. 空链表的示意图: 带有头结点的单链表: 不带头结点的单链 ...
- 【数据结构】单链表介绍及leetcode206题反转单链表python实现
题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...
随机推荐
- Spring AOP(aspect oriented programming) 转载
1.面向切面的基本原理 软件系统可以看成是由一组关注点组成的,其中,直接的业务关注点,是直切关注点.而为直切关注点提供服务的,就是横切关注点. 01.什么是面向切面编程 横切关注点:影响应用多处的功能 ...
- Java_注解之二
在上一次的注解案例里面配置注解的同时,也添加了一对多(@OneToMany)的关系在里面. 本次将补充上次的缺失:其他三种关联方式的配置. 为了简化配置的复杂度 在此案例中Emp和Dept并不是唯 ...
- Scala-基础-数据类型
import junit.framework.TestCase import org.junit.Test import scala.runtime.RichByte //数据类型 class Dem ...
- dedecms:解析Robots.txt 协议标准
Robots.txt 是存放在站点根目录下的一个纯文本文件.虽然它的设置很简单,但是作用却很强大.它可以指定搜索引擎蜘蛛只抓取指定的内容,或者是禁止搜索引擎蜘蛛抓取网站的部分或全部内容. 下面我们就来 ...
- Oracle12C用户创建、授权、登录
Oracle12C用户创建.授权.登录 1.以系统用户登录 C:\Users\LEI>sqlplus sys/dwh as sysdba; SQL*Plus: Release 12.1.0.2. ...
- 控制台——args参数的赋值方法
args参数的赋值方法有好几种,主要介绍两种. 外部传参的方法:先找到bin目录下的exe文件,并创建快捷方法,在目标后面追加参数. 控制台主函数入口实现方法 static void Main(str ...
- VC++ 遍历文件夹
}; strcpy_s(szFind, MAX_PATH, m_szDir); strcat_s(szFind, "\\*.*"); WIN32_FIND_DATA wfd; HA ...
- js 零碎
function具有一个属性是length,表示希望接收到的命名参数的个数.可以通过arguments获取参数.arguments.callee表示函数本身,递归时有用,也可以通过arguments. ...
- (1)搜索广告CTR预估
https://www.cnblogs.com/futurehau/p/6181008.html 一.广告投放系统 广告系统包含多个子系统.除了上图所示的广告投放系统外,还包含商业系统(广告库的获得) ...
- codevs——4189 字典&&HihoCoder #1014 : Trie树
题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000) 现在skyzhong需要在字典里查询以某一段字母开头的 ...