线性表的顺序存储结构 (sequential list),也叫顺序表中,存和读数据时间复杂度为 O(1),插入和删除数据时间复杂度为 O(n)。
线性表优点:
2.可以快速存取表中任一位置的元素
线性表缺点:
1.插入和删除操作需要移动大量元素
2.当线性表长度变化较大时,难以确定存储空间的容量 (这个对 php 不是问题,而且貌似php只能申请动态数组。。。)
3.造成存储空间的碎片
下面是 php 的实现
<?php
/**
* @author Dongjie LIU
* @version chinese
*
*顺序表 (sequential list):线性表的顺序存储结构
*需要3个属性,数组,最大存储容量,线性表长度,
*但由于php 特性,无法在初始化时定义数组长度,
*故只定义数组一个属性
*
* 线性表基本操作包括
* 1.线性表表初始化操作 __contruct()
* 2.清空线性表 __destruct()
* 3.判断线性表是否为空 listEmpty()
* 4.返回线性表元素个数 listLength()
* 5.根据下标返回线性表中的某个元素 getElem()
* 6.返回线性表中某个元素的位置 locateElem()
* 7.根据给定位置在线性表中插入元素 listInsert()
* 8.根据给定位置在线性表中删除元素 listDelete()
*/
class seqList{
private $seq_list; //顺序表
/**
* 顺序表初始化
*
* @param mixed $seq_list
* @return void
*/
public function __construct($seq_list=array()){
$this->seq_list = $seq_list;
}
/**
* 清空顺序表
*
* @return void
*/
public function __destruct(){
unset($this->seq_list);
}
/**
* 判断顺序表是否为空
*
* @return bool 为空返回true,否则返回false
*/
public function listEmpty(){
return empty($this->seq_list);
}
/**
* 返回顺序表元素个数
*
* @return int
*/
public function listLength(){
return count($this->seq_list);
}
/**
* 返回顺序表中下标为i的元素值
*
* @param int i
* @return mixed 如找到返回元素值,否则返回false
*/
public function getElem($i){
if ($i > 0 && $i <= $this->listLength()) {
return $this->seq_list[$i-1];
}else{
return false;
}
}
/**
* 在顺序表中查找与给定值 $value 相等的元素,
* 这里没有考虑 $value 为数组的情况
*
* @param mixed $value
* @return mixed 如查找成功,返回该元素在表中序号,否则返回 0
*/
public function locateElem($value){
if (in_array($value, $this->seq_list)) {
$i = 0;
foreach ($this->seq_list as $key=>$val) {
if (strcmp($value, $val) === 0){
//若存在多个元素与匹配值相等
if ($i == 0) {
$i = $key + 1;
}else{
$i .= ",".($key + 1);
}
}
}
return $i;
}else{
return false;
}
}
/**
* 在指定位置 i 插入一个新元素 $value
*
* @param int $i
* @param mixed $value
* @return bool 插入成功返回 true, 否则返回 false
*/
public function listInsert($i, $value){
//三种情况:插入位置不合理,元素加在末尾和其他
if ($i > $this->listLength()+1 || $i < 1) {
return false;
}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;
}
return true;
}
/**
* 删除顺序表中 i 位置的元素, 并用 $value 返回其值
*
* @param int $i
* @return mixed 删除成功返回 $value,否则返回 false
*/
public function listDelete($i){
//两种情况:插入位置不合理和其他
if ($i <= 0 || $i > $this->listLength()) {
return false;
}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;
}
}
}
?>
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。