2.1 线性表的顺序存储结构

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

优点:

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

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

缺点:

(1)插入和删除需要移动大量元素

(2)当线性表长度变化较大时,难以确定存储空间的容量

(3)造成存储空间的“碎片”

 下面用php实现线性表的顺序存储结构

<?php
header("content-type:text/html;charset=utf-8");
/**
 * 顺序表基本操作
 *
 *包括
 *1.顺序表的初始化 __contruct()
 *2.清空顺序表 clearList()
 *3.根据下标返回顺序表中的某个元素 getElement()
 *4.在指定位置插入一个新的结点 listInsert()
 *5.在指定的位置删除元素listDelete()
 */
class Linner_list{
    public $linner_list;
    public $size;
//1.顺序表的初始化 __contruct()
    function __construct($linner_list,$size)
    {
        $this->linner_list =$linner_list;
        $this->size = $size;
    }

//2.清空顺序表 clearList()
public function clearList(){
    if(isset($this->linner_list)){
        unset($this->linner_list);
    }else{
        $this->linner_list = array();
        $this->size=0;
    }
}
//3.根据下标返回顺序表中的某个元素 getElement()
//将线性表中第i个位置的元素返回,只要i的数值在下标范围内,就是把数组第i-1下标的值返回即可
    public function getElement($i){
        if($this->size==0 || $i<1 || $i>$this->size){
            echo "error";
            return false;
        }
        if(isset($this->linner_list)&&is_array($this->linner_list)){
            return $this->linner_list[$i-1];
        }
    }
//4.插入操作
//在线性表中第i个位置之前插入新的数据元素,线性表的长度+1
/*
 * (1) 如果插入位置不合理,抛出异常
 * (2)如果线性表的长度大于数组长度,则抛出异常或者动态增加容量
 * (3)从最后一个元素开始向前遍历到第i个位置,分别将他们都向后移动一个位置
 * (4)将要插入的元素填入i处
 * (5)表长加1
 */
    public function listInsert($i,$element){
        if($i<1 || $i>$this->size){
            echo "error";
            return false;
        }
 //       $this->size ++;
        if(isset($this->linner_list)&&is_array($this->linner_list)){
            if ($this->size==0){
                $this->linner_list[0]=$element;
                $this->size++;
            }else{
                for($j = $this->size-1;$j>=$i-1;$j--){
                    $this->linner_list[$j+1] = $this->linner_list[$j];
                }
                $this->linner_list[$i-1] = $element;
                $this->size ++;
            }

        }
    }
    //5.删除操作
    //删除线性表中第i个位置的元素,线性表的长度-1
    /*
     * (1) 如果删除位置不合理,抛出异常
     * (2)取出删除的元素
     * (3)从最后一个元素开始向前遍历到第i个位置,分别将他们都向后移动一个位置
     * (4)表长减1
     */
    public function listDelete($i){
        if($i<1 || $i>$this->size){
            echo "error";
            return false;
        }
        if(isset($this->linner_list)&&is_array($this->linner_list)){
            for($j = $i;$j<$this->size;$j++){
                $this->linner_list[$j-1] = $this->linner_list[$j];
            }
            $this->size --;


        }
    }
}

?>

我们可以来验证一下我们写的函数

<?php
header("content-type:text/html;charset=utf-8");
include 'linear_list.class.php';
$array = array(1,2,3,4,5,6,7,8,9,10);
$size = 10;
$linear_list = new Linner_list($array,$size);
//获取元素
for ($i=1;$i<=$size;$i++){
    $num = $linear_list->getElement($i);
    echo $num;
    echo "</br>";
}
//在第二个位置插入元素66
$linear_list->listInsert(2,66);
print_r($linear_list);
echo "</br>";
//删除第二个元素66 
$linear_list->listDelete(2);
print_r($linear_list);

?>

最后的结果是这样的

原文地址:https://www.cnblogs.com/xlzfdddd/p/9795509.html