简明现代魔法 -> 数据结构 -> 用PHP实现的一个链表结构

用PHP实现的一个链表结构

2011-06-13

最近慢慢开始复习数据结构这一块,那么这里用PHP也写一个链表结构吧。PHP本身是弱类型的语言,数据类型的约束会不够严格。虽然下面的代码能够实现链表的基本功能,但也许会存在一些我还没注意到的缺陷。如果你有更好的方案,也可以告诉我~

<?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()
	{
        $i=0;
        $node=$this->header;
        while($node->getNext()!=null)
        {   
			$i++;
            $node=$node->getNext();
        }
      	return $i;
    }
	
    public function setHeader($value){
        $this->header=$value;
    }
	
    public function getHeader(){
        return $this->header;
    }
	
    public function __construct(){
      	header("content-type:text/html; charset=utf-8");
        $this->setHeader(new Node(null,null));
    }
    /**
    *@author MzXy
    *@param  $data--要添加节点的数据
    * 
    */
    public function add($data)
    {
        $node=$this->header;
        while($node->getNext()!=null)
        {
            $node=$node->getNext();
        }
        $node->setNext(new Node($data,null));
    }
     /**
    *@author MzXy
    *@param  $data--要移除节点的数据
    * 
    */
    public function removeAt($data)
    {
        $node=$this->header;
        while($node->getData()!=$data)
        {
            $node=$node->getNext();
        }
        $node->setNext($node->getNext());
        $node->setData($node->getNext()->getData());
    }
     /**
    *@author MzXy
    *@param  遍历
    * 
    */
    public function get()
    {
        $node=$this->header;
        if($node->getNext()==null){
            print("数据集为空!");
            return;
        }
        while($node->getNext()!=null)
        {
            print('['.$node->getNext()->getData().'] -> ');
            if($node->getNext()->getNext()==null){break;}
            $node=$node->getNext();
        }
    }
     /**
    *@author MzXy
    *@param  $data--要访问的节点的数据
    * @param 此方法只是演示不具有实际意义
    * 
    */
    public function getAt($data)
    {
        $node=$this->header->getNext();
 		if($node->getNext()==null){
            print("数据集为空!");
            return;
        }
        while($node->getData()!=$data)
        {
            if($node->getNext()==null){break;}
            $node=$node->getNext();
        }
        return $node->getData();        
    }
     /**
    *@author MzXy
    *@param  $value--需要更新的节点的原数据  --$initial---更新后的数据
    * 
    */
    public function update($initial,$value)
    {
         $node=$this->header->getNext();
		if($node->getNext()==null){
       		print("数据集为空!");
            return;
        }
        while($node->getData()!=$data)
        {
            if($node->getNext()==null){break;}
            $node=$node->getNext();
        }
		$node->setData($initial);     
    }
}

$lists = new LinkList();
$lists -> add(1);
$lists -> add(2);

$lists -> get();

echo '<pre>';
print_r($lists);
echo '</pre>';

?>
随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们