用PHP实现的单链表
来源:互联网 发布:冰球打架规则 知乎 编辑:程序博客网 时间:2024/06/08 09:51
单链表顾名思义就是一个链式数据结构,它有一个表头,并且除了最后一个节点外,所有节点都有其后继节点。如下图。
首先,我们写出链表节点的类。单链表中的每一个节点,都保存其数据域和后驱指针
//链表节点 class node { public $id; //节点id public $name; //节点名称 public $next; //下一节点 public function __construct($id, $name) { $this->id = $id; $this->name = $name; $this->next = null; } }链表中还有两个特别重要的方法,插入和删除。插入需要找到插入的位置,把前一个元素的next指针指向被插入的节点,并将被插入节点的next指针指向后一个节点,如下图左侧所示。而删除则是把前一个节点的next指针指向后一个节点,并返回被删除元素的数据内容,如下图右侧所示。
//单链表 class singelLinkList { private $header; //链表头节点 //构造方法 public function __construct($id = null, $name = null) { $this->header = new node ( $id, $name, null ); } //获取链表长度 public function getLinkLength() { $i = 0; $current = $this->header; while ( $current->next != null ) { $i ++; $current = $current->next; } return $i; } //添加节点数据 public function addLink($node) { $current = $this->header; while ( $current->next != null ) { if ($current->next->id > $node->id) { break; } $current = $current->next; } $node->next = $current->next; $current->next = $node; } //删除链表节点 public function delLink($id) { $current = $this->header; $flag = false; while ( $current->next != null ) { if ($current->next->id == $id) { $flag = true; break; } $current = $current->next; } if ($flag) { $current->next = $current->next->next; } else { echo "未找到id=" . $id . "的节点!<br>"; } } //判断连表是否为空 public function isEmpty(){ return $this->header == null; } //清空链表 public function clear(){ $this->header = null; } //获取链表 public function getLinkList() { $current = $this->header; if ($current->next == null) { echo ("链表为空!"); return; } while ( $current->next != null ) { echo 'id:' . $current->next->id . ' name:' . $current->next->name . "<br>"; if ($current->next->next == null) { break; } $current = $current->next; } } //获取节点名字 public function getLinkNameById($id) { $current = $this->header; if ($current->next == null) { echo "链表为空!"; return; } while ( $current->next != null ) { if ($current->id == $id) { break; } $current = $current->next; } return $current->name; } //更新节点名称 public function updateLink($id, $name) { $current = $this->header; if ($current->next == null) { echo "链表为空!"; return; } while ( $current->next != null ) { if ($current->id == $id) { break; } $current = $current->next; } return $current->name = $name; } }$lists = new singelLinkList (); $lists->addLink ( new node ( 5, 'eeeeee' ) ); $lists->addLink ( new node ( 1, 'aaaaaa' ) ); $lists->addLink ( new node ( 6, 'ffffff' ) ); $lists->addLink ( new node ( 4, 'dddddd' ) ); $lists->addLink ( new node ( 3, 'cccccc' ) ); $lists->addLink ( new node ( 2, 'bbbbbb' ) ); $lists->getLinkList (); echo "<br>-----------删除节点--------------<br>"; $lists->delLink ( 5 ); $lists->getLinkList ();echo "<br>-----------更新节点名称--------------<br>"; $lists->updateLink ( 3, "222222" ); $lists->getLinkList ();echo "<br>-----------获取节点名称--------------<br>"; echo $lists->getLinkNameById ( 5 );echo "<br>-----------获取链表长度--------------<br>"; echo $lists->getLinkLength ();
0 0
- 用PHP实现的单链表
- 用PHP实现的单链表
- 用php实现的双链表
- 线性单链表的实现(php)
- php实现单链表的实例代码
- php实现单链表的基本操作
- 用php实现的数据网格类
- 一个用PHP实现的UBB类!
- 用php实现简单的滑动菜单
- 用php实现简单的二分查找
- 用PHP的Socket实现HTTP请求
- 用PHP实现POP3邮件的收取
- 用PHP实现POP3邮件的解码
- 用c#实现php的pack方法
- 用php实现简单的树形菜单
- 用php实现简单的滑动菜单
- 用php实现mongoDB的基本操作
- 用php实现mongoDB的基本操作
- .net linq expression tree
- Dubbo服务telnet命令
- 要研究的开源项目
- 第十二章..
- 使用Opencv调用摄像头并在MFC中进行视频显示
- 用PHP实现的单链表
- SpringMVC实现简单登陆功能
- Linux命令(15)---umask
- Bootstrap导航条、分页导航
- React 相关方法(API)介绍-ReactDom、ReactDOMServer、子节点
- html最佳实践-CSS置顶,JS置尾
- oracle 记录集变量RECORD
- 类的方法定义和调用以及选择结构一一一以购物管理系统为例
- Java实现聚类分析Kmeans算法