线性表的顺序存储结构 (sequential list),也叫顺序表中,存和读数据时间复杂度为 O(1),插入和删除数据时间复杂度为 O(n)。


线性表优点:

1.无需为表中元素之间的逻辑关系而额外增加存储空间

2.可以快速存取表中任一位置的元素


线性表缺点:

1.插入和删除操作需要移动大量元素

2.当线性表长度变化较大时,难以确定存储空间的容量 (这个对 php 不是问题,而且貌似php只能申请动态数组。。。)

3.造成存储空间的碎片


下面是 php 的实现

<?php/***@authorDongjieLIU*@versionchinese**顺序表(sequentiallist):线性表的顺序存储结构*需要3个属性,数组,最大存储容量,线性表长度,*但由于php特性,无法在初始化时定义数组长度,*故只定义数组一个属性**线性表基本操作包括*1.线性表表初始化操作__contruct()*2.清空线性表__destruct()*3.判断线性表是否为空listEmpty()*4.返回线性表元素个数listLength()*5.根据下标返回线性表中的某个元素getElem()*6.返回线性表中某个元素的位置locateElem()*7.根据给定位置在线性表中插入元素listInsert()*8.根据给定位置在线性表中删除元素listDelete()*/classseqList{private$seq_list;//顺序表/***顺序表初始化**@parammixed$seq_list*@returnvoid*/publicfunction__construct($seq_list=array()){$this->seq_list=$seq_list;}/***清空顺序表**@returnvoid*/publicfunction__destruct(){unset($this->seq_list);}/***判断顺序表是否为空**@returnbool为空返回true,否则返回false*/publicfunctionlistEmpty(){returnempty($this->seq_list);}/***返回顺序表元素个数**@returnint*/publicfunctionlistLength(){returncount($this->seq_list);}/***返回顺序表中下标为i的元素值**@paraminti*@returnmixed如找到返回元素值,否则返回false*/publicfunctiongetElem($i){if($i>0&&$i<=$this->listLength()){return$this->seq_list[$i-1];}else{returnfalse;}}/***在顺序表中查找与给定值$value相等的元素,*这里没有考虑$value为数组的情况**@parammixed$value*@returnmixed如查找成功,返回该元素在表中序号,否则返回0*/publicfunctionlocateElem($value){if(in_array($value,$this->seq_list)){$i=0;foreach($this->seq_listas$key=>$val){if(strcmp($value,$val)===0){//若存在多个元素与匹配值相等if($i==0){$i=$key+1;}else{$i.=",".($key+1);}}}return$i;}else{returnfalse;}}/***在指定位置i插入一个新元素$value**@paramint$i*@parammixed$value*@returnbool插入成功返回true,否则返回false*/publicfunctionlistInsert($i,$value){//三种情况:插入位置不合理,元素加在末尾和其他if($i>$this->listLength()+1||$i<1){returnfalse;}elseif($i==$this->listLength()+1){$this->seq_list[$i-1]=$value;}else{//从$i-1到最后的元素位置向后移动一位for($k=$this->listLength()-1;$k>=$i-1;$k--){$this->seq_list[$k+1]=$this->seq_list[$k];}$this->seq_list[$i-1]=$value;}returntrue;}/***删除顺序表中i位置的元素,并用$value返回其值**@paramint$i*@returnmixed删除成功返回$value,否则返回false*/publicfunctionlistDelete($i){//两种情况:插入位置不合理和其他if($i<=0||$i>$this->listLength()){returnfalse;}else{$value=$this->seq_list[$i-1];for($k=$i-1;$k<$this->listLength()-1;$k++){$this->seq_list[$k]=$this->seq_list[$k+1];}unset($this->seq_list[$this->listLength()-1]);return$value;}}}?>