代码改变世界

数据结构0314

2018-03-15 21:26  SummerVan  阅读(178)  评论(0)    收藏  举报

线性表(list):零个或多个数据元素的有限序列(数据元素类型相同)

首先元素之间有顺序,若元素有多个,则第一个无前驱,最后一个无后继 其他每个元素都有一个前驱和后继

线性表元素的个数n(n>=0)定义为线性表的长度,若n=0,称为空表 在非空表中的每一个数据元素都具有自己的位置

在复杂的线性表中一个数据元素可以由若干个数据项组成(例学生点名册 包含个人信息)

线性表的抽象数据类型

例:给小朋友们排队是线性表的创建和初始化过程,让小朋友们解散重新排队是对线性表的重置为空表,根据位序得到数据,查找某个数据元素是否存在,线性表长度,对线性表的数据元素的插入和删除操作

合并两个数据元素相同的线性表只不过是把基本的对线性表的查找删除增加操作组合起来

线性表的顺序存储结构

定义:指用一段地址连续的存储单元依次存储线性表的数据元素(在内存里通过占位的方式占据一定的内存空间把数据类型相同的数据元素依次放入)

三个属性:(数组:由线性表元素下标组成)

1存储空间的起始位置:数组 他的存储位置就是存储空间的存储位置

2线性表的最大存储容量:数组长度 

3线性表长度:当前线性表里数据元素的数量 (线性表长度应小于等于线性表的最大存储容量

存储器中的每个存储单元都有自己的编号,这个编号称为地址

Loc(ai +1) = Loc(ai)+c (c个存储单元 Loc表示获得存储位置的函数)推导出 Loc(ai) = Loc(a1)+(i-1)*c 对于第i个数据元素ai的存储位置可以由a1推算得到

存储时间复杂度为O(1),具有这一特点的存储结构称为随机存储结构

 

顺序存储结构的插入和删除

1获得元素

1插入:插入位置不合理要抛出异常

     若线性表长度大于等于数组长度要抛出异常或者动态增加容量

     从最后一个元素开始向前遍历到第i个位置分别将它们都向后移动一个位置

     插入元素填入位置i 表长加1

2删除:删除位置不合理抛出异常 i< 1|| i >数组长度

    取出要删除的数据元素

    从删除元素位置开始向后遍历到最后一个元素位置 分别将其向前移动一位 表长减1

插入和删除时间复杂度:最好情况是在最后一个位置为O(1),最坏情况是在第一个位置为O(n) 平均情况是(n-1)/2推导得出还是等于O(n)

说明顺序存储结构在存读数据时复杂度为O(1),而进行删除增加操作时复杂度为O(n)

优点:无须为表示表中元素的逻辑关系而新增加存储空间 ,可以快速的读取表中任意位置的数据元素

缺点:插入和删除需要的操作量太大,当前线性表长度变化较大时难以确定存储空间的容量,造成存储空间的“碎片”