本文共 2333 字,大约阅读时间需要 7 分钟。
单链表是最简单的链表表示方式。在线性表中,每个数据元素占用一个结点(node),一个结点通常由两个域组成:一个存储数据元素data,另一个存储指向链表中下一个结点的指针link。最后一个结点的指针为空。单链表的数据元素之间的逻辑关系由指针表示,虽然指针指向的存储位置不要求紧邻,但数据元素的逻辑关系依然清晰。
在PHP中,我们可以通过类来模拟单链表实现。以下是一个简单的实现示例:
class Node { private $data; private $next; public function setData($value) { $this->data = $value; } public function setNext($value) { $this->next = $value; } public function getData() { return $this->data; } public function getNext() { return $this->next; } public function __construct($data, $next) { $this->setData($data); $this->setNext($next); }} class LinkList { private $header; // 头节点 private $size; // 节点数 public function getSize() { return $this->size; } public function getHeader() { return $this->header; } public function __construct() { // 设置默认内容类型 header("content-type:text/html; charset=utf-8"); $this->header = new Node(null, null); $this->size = 0; } // 添加节点 public function add($data) { $node = $this->header; while ($node->getNext() != null) { $node = $node->getNext(); } $node->setNext(new Node($data, null)); $this->size++; } // 移除节点 public function removeAt($data) { $node = $this->header; while ($node->getData() != $data) { $node = $node->getNext(); } if ($node->getData() != $data) { echo("查无此节点!"); return; } $node->setNext($node->getNext()); $node->setData($node->getNext()->getData()); $this->size--; } // 遍历节点 public function get() { $node = $this->header; if ($node->getNext() == null) { echo("数据集为空!"); return; } while ($node->getNext() != null) { echo($node->getNext()->getData()); if (($node->getNext()->getNext() == null) || ($node->getNext()->getNext()->getNext() == null)) { break; } $node = $node->getNext(); echo "=> "; } } // 其他方法(如获取特定节点、更新节点等,可根据需求添加)} $s = new LinkList();$s->add('ssss');echo $s->getSize(); // 输出1$s->add('fff');$s->update('ddd', 'ssssd');echo $s->getSize(); // 输出2$s->get(); // 输出:ssss => fff => ssssd 这种实现方式通过类的封装性质,使链表的操作更加简洁和可维护。
转载地址:http://ystfk.baihongyu.com/