<?php
class LinkList{
private $head;
private $size;
private $list;
public function __construct()
{
$this->head='';
$this->size=0;
$this->list=array();
}
public function initList(){
$this->head='';
$this->size=0;
$this->list=array();
}
//刪除鏈表
public function destoryList(){
if (isset($this->list)&&isset($this->head)){
unset($this->list);
unset($this->head);
}
}
//清空鏈表
public function clearList(){
if (isset($this->list)){
unset($this->list);
}
$this->list=array();
$this->size=0;
$this->head='';
}
//判斷鏈表是否爲空
public function emptyList(){
if (isset($this->list)){
if ($this->size==0){
return true;
}else{
return false;
}
}
}
//鏈表長度
public function lengthList(){
if (isset($this->list)){
return $this->size;
}else{
return false;
}
}
//取元素
public function getElem($i){
if ($i<1||$i>$this->size){
die('failed');
}
if (isset($this->list)&&is_array($this->list)){
$j=1;
//頭指針
$tmp=$this->head;
while ($i>$j){
if ($this->list[$tmp]['next']!=null){
$tmp=$this->list[$tmp]['next'];
$j++;
}
}
return $this->list[$tmp]['data'];
}
}
//是否在鏈表中
public function locateElem($e){
if (isset($this->list)&&is_array($this->list)){
$tmp=$this->head;
while ($this->list[$tmp]['data']!=$e){
if ($this->list[$tmp]['next']!=null){
$tmp=$this->list[$tmp]['next'];
}else{
return false;
}
}
return true;
}
}
//前驅
public function priorElem($i){
if ($i<1||$i>$this->size){
die('failed');
}
if ($i==1){
die('no prior');
}
$tmp=$this->head;
$j=1;
while ($i>$j+1){
if ($this->list[$tmp]['next']!=null){
$j++;
$tmp=$this->list[$tmp]['next'];
}
}
return $this->list[$tmp]['data'];
}
//後繼
public function nextElem($i){
if ($i<1||$i>$this->size){
die('failed');
}
if ($i==$this->size){
die('no next');
}
$tmp=$this->head;
$j=1;
while ($i>$j){
if ($this->list[$tmp]['next']!=null){
$j++;
$tmp=$this->list[$tmp]['next'];
}
}
return $this->list[$tmp]['data'];
}
//插入元素:後插法
public function insertList($i,$e){
if (isset($this->list)&&is_array($this->list)){
//空表
if ($this->size==0){
$this->head=$this->uuid();
$this->list[$this->head]['data']=$e;
$this->list[$this->head]['next']=null;
}else{
if ($i<1||$i>$this->size){
die('failed');
}
$tmp=$this->head;
$j=1;
while ($i>$j){
if ($this->list[$tmp]['next']!=null){
$j++;
$tmp=$this->list[$tmp]['next'];
}
}
$find=$tmp;
$id=$this->uuid();
if ($this->list[$find]['next']==null){
//尾部
$this->list[$find]['next']=$id;
$this->list[$id]['data']=$e;
$this->list[$id]['next']=null;
$this->size++;
}
else{
//中間
$this->list[$id]['next']=$this->list[$find]['next'];
$this->list[$find]['next']=$id;
$this->list[$id]['data']=$e;
$this->size++;
}
}
}
}
//刪除元素
public function deleteList($i){
if ($i<1||$i>$this->size){
die('failed');
}
if (isset($this->list)&&is_array($this->list)){
if ($i==1){
$this->head=$this->list[$this->head]['next'];
}else{
$tmp=$this->head;
$j=1;
while ($i>$j+1){
if ($this->list[$tmp]['next']!=null){
$j++;
$tmp=$this->list[$tmp]['next'];
}
}
//找到刪除元素的前驅
$find=$tmp;
//刪除的元素
if ($this->list[$tmp]['next']!=null){
//不是最後一個元素
$delete=$this->list[$find]['next'];
$this->list[$find]['next']=$this->list[$delete]['next'];
}else{
$this->list[$tmp]['next']=null;
}
}
}
}
public function tracerstList(){
$tmp=$this->head;
while ($this->list[$tmp]['next']!=null){
$this->printList($this->list[$tmp]['data'],true);
$tmp=$this->list[$tmp]['next'];
}
$this->printList($this->list[$tmp]['data'],false);
}
public function printList($str,$flag){
if ($flag){
echo $str.'->';
}else{
echo $str.'<br/>';
}
}
//uuid 唯一碼
public function uuid($prefix=''){
$chars=md5(uniqid(mt_rand(),true));
$uuid=substr($chars,0,8).'-';
$uuid.=substr($chars,0,8).'-';
$uuid.=substr($chars,8,4).'-';
$uuid.=substr($chars,12,4).'-';
$uuid.=substr($chars,16,4).'-';
$uuid.=substr($chars,20,12);
return $prefix.$uuid;
}
}
php實現數據結構線性表(鏈式)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.