线性表-顺序结构存储

线性表反映数据之间的关系是一对多一的关系,每个节点都有唯一的前驱,唯一的后继。它可以采用顺序存储,也可以采用链式存储。本章写的是顺序存储的实现。

class sqList {
    public $list = null; // 顺序表
    /**
     * 初始化线性表
     * @param array $list
     * @return void
     */
    public function __construct(&$list) {
        if (!is_array($list))
            return false;
        $this->list = $list;
    }
    /**
     * 求表长
     * @return int
     */
    public function listLength() {
        return count($this->list);
    }
    /**
     * 查找元素
     * @param mixed $elem 线性表内的元素
     * @return int
     */
    public function locateElem($elem) {
        foreach ($this->list as $v => $k) {
            if ($k == $elem) {
                return $v+1;
            } else {
                continue;
            }
        }
        return -1;
    }
    /**
     * 在线性表第i个位置插入元素$elem
     * @param int 位置索引从1开始
     * @param mixed $elem
     * @return boolean true代表插入成功 false反之
     */
    public function listInsert($i, $elem) {
        $i = $i - 1;
        /* 位置判断 */
        if ($i < 0 || $i > $this->listLength())
            return false;
        /* 待插入的元素判断 */
        if (empty($elem))
            return false;
        /* 插入元素 */
        $j = $this->listLength() - 1;
        for (; $j >= $i; $j--) {
            $this->list[$j+1] = $this->list[$j];
        }
        $this->list[$i] = $elem;
        return true;
    }
    /**
     * 删除第i个元素
     * @param int $i 从1开始的位置
     */
    public function listDelete($i) {
        /* 位置判断 */
        if ($i <= 0 || $i > $this->listLength())
            return false;
        array_splice($this->list, $i-1, 1); // 不能使用unset()函数,这样会破坏数组下标的连续性
    }
    /**
     * 读取第i个元素
     * @param int $i 从1开始的位置
     */
    public function getElem($i) {
        /* 位置判断 */
        if ($i <= 0 || $i > $this->listLength())
            return false;
        /* 判断是不是空表 */
        if ($this->listLength() == 0)
            return false;
        return $this->list[$i -1];
    }
    /**
     * 遍历元素
     * return void
     */
    public function listTraverse() {
        if (!empty($this->list)) {
            foreach ($this->list as $v => $k) {
                echo $k.‘<br>‘;
            }
        } else {
            echo ‘顺序表无元素‘;
        }
    }
    /**
     * 撤销操作
     */
    public function destoryList() {
        unset($this->list);
    }
}总结来说,顺序表查找元素的时间复杂度是O(1),删除和插入元素的时间复杂度是O(n)。因此,顺序表相对于链表来说,查找容易,而插入和删除则不如链表
时间: 2024-08-28 13:16:02

线性表-顺序结构存储的相关文章

数据结构与算法 1 :基本概念,线性表顺序结构,线性表链式结构,单向循环链表

[本文谢绝转载] <大纲> 数据结构: 起源: 基本概念 数据结构指数据对象中数据元素之间的关系  逻辑结构 物理结构 数据的运算 算法概念: 概念 算法和数据结构区别 算法特性 算法效率的度量 大O表示法 时间复杂度案例 空间复杂度 时间换空间案例 1)线性表: 线性表初步认识: 线性表顺序结构案例 线性表顺序结构案例,单文件版 线性表的优缺点 企业级线性表链式存储案例:C语言实现 企业级线性表链式存储案例:C语言实现 单文件版 企业级线性表链式存储案例,我的练习  线性表链式存储优点缺点

算法之 线性表顺序结构

package math; import java.util.ArrayList; import java.util.List; //线性表顺序结构 public class LinearTable { public int len = 0; //线性表表长度 public List list; public int currentLen = 0; //构造方法,申请一个对应长度得 线性表 public LinearTable(int i){ this.list = new ArrayList(

数据结构线性表顺序结构的实现

package com.he.list; import java.util.Arrays; import org.w3c.dom.ls.LSException; class ArrayList { private int length;// the list's length private int[] store;// store the data // initialize an empty list public ArrayList initList(String name) { retu

数据结构----线性表顺序和链式结构的使用(c)

PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用的一些方法大都是封装好的,就java而言,里面使用了大量的封装好的方法,一些算法也大都写好了,java还有三个特性,封装.继承.多态.当然这里不是讲Java,这里主要是说内部结构,大家都知道数据结构有些东西是分为逻辑结构和物理结构的,物理结构有分为顺序结构和链式结构,有不懂得可以百度百科,这里主要是分享线性表的顺序结构.那么什么是线性表呢,线性表是最基本.最简单.也是最常用的一种数据结

数据结构——线性表顺序存储结构

 关于线性表 线性表是零个或者多个数据元素的集合.它主要有以下三个特征: 1:线性表的数据元素之间是有顺序的. 2:线性表中数据元素个数是有限的. 3:线性表中数据元素数据类型是相同的. 关于线性表的操作,主要有 创建线性表.销毁线性表.清空线性表.将元素插入线性表.将元素从线性表中删除.获取线性表中某个位置的元素.获取线性表的长度. 线性表主要有两种存储结构: 1:线性表的顺序存储结构,c语言中的数组及采用这种方式. 2:线性表的链式存储结构. 关于顺序存储结构 定义: 是指用一段地址连续的内

线性表顺序存储结构的c语言实现

线性表顺序存储结构用C实现的操作 <1>声明一个线性表的顺序存储结构 <2> 初始化顺序线性表 <3>判断是否为空 <4>清空列表 <5>返回当前长度(线性表内元素个数) <6>返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 <7>返回L中第1个与e满足关系的数据元素的位序.若这样的数据元素不存在,则返回值为0 <8>在L中第i个位置之前插入新的数据元素e,L的长度加1 <9>

线性表---顺序表&amp;链表

一.线性表 1.线性表中的元素是一对一的关系,除了第一个与最后一个元素之外其他数据元素都是首尾相连的. 如果是一对多就用树来表示,如果是多对多就用网状来表示. 2.线性表的两种存储结构 顺序表:用顺序结构保存数据,数据在内存中是连续的. 链表:用链式存储结构保存数据,数据在内存中是不连续的. 二.顺序表 1.顺序表: 顺序表一般使用数组实现,顺序表的相关操作与数组相关,一般都是移动数组元素 顺序表封装所需要的三个属性: 存储空间的起始位置.数组date的存储位置就是线性表存储空间的存储位置. 线

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca

数据结构与算法-总结线性表顺序存储结构的优缺点

这一章节主要总结线性表顺序存储结构的优缺点. 在总结之前,我们来讨论一下线性表顺序存储结构的执行方法的时间复杂度: 存储.读取:O(1) 插入.删除:O(n) 优点: 1.无需为表中的逻辑关系增加额外的存储空间 2.可以快速存取表中对象 缺点: 1.插入和删除需要移动大量的对象 2.存储设备的碎片化 3.当线性表过大的时候,很难确定长度 版权声明:本文为博主原创文章,未经博主允许不得转载.