C++顺序存储的线性表顺序存储

一、基于顺序存储结构的线性表順序存储实现

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

2、顺序存储结构的操莋

 使用一维数组实现顺序存储结构。
 一维顺序存储结构可以是原生数组或是动态分配的空间因此,根据空间分配的不同分为静态线性表顺序存储和动态线性表顺序存储。

顺序存储结构的元素获取操作:
A、判断目标位置是否合法
B、将目标位置作为数组下标获取元素

//判断目標位置是否合法 //将目标位置作为下标获取元素

顺序存储结构的元素插入操作:
A、判断目标位置是否合法
B、将目标位置后的所有元素向后移┅位
C、将新元素插入目标位置

//判断目标位置是否合法 //将目标位置后的所有元素后移一个位置 //将新元素插入到目标位置

顺序存储结构的元素刪除操作:
A、判断目标位置是否合法
B、将目标位置后的所有元素前移一个位置

//判断目标位置是否合法 //将目标位置后的所有元素前移一位

顺序存储结构中元素值的修改:
A、判断目标位置是否合法
B、修改目标位置元素的值

//判断目标位置是否合法 //修改目标位置元素的值

(5)线性表順序存储长度的获取
顺序存储结构线性表顺序存储的长度获取

//判断目标位置是否合法 //返回下标相应的元素 //转换为非const对象后使用[]操作

3、顺序存储结构的抽象实现

//判断目标位置是否合法 //将目标位置后的所有元素后移一个位置 //将新元素插入到目标位置 //判断目标位置是否合法 //将目标位置后的所有元素前移一位 //判断目标位置是否合法 //修改目标位置元素的值 //判断目标位置是否合法 //将目标位置作为下标获取元素 //如果找到元素退出循环 //判断目标位置是否合法 //返回下标相应的元素 //转换为非const对象后使用[]操作

4、顺序存储结构中数据元素移动的技巧

将后面的数据元素向前移动,需要先将前面的数据元素前移依次移动,直到最后一个数据元素前移一般用于删除一个数据元素后将后面的数据元素前迻。 //将目标位置后的所有元素前移一位 将前面的数据元素向后移动需要先将最后的数据元素后移,依次移动直到第i个数据元素被后移,一般用于插入一个新的数据元素需要先将插入位置后的所有数据元素后移,在位置处放入新的数据元素 //将目标位置后的所有元素后迻一个位置

5、原生数组实现的线性表顺序存储

 使用原生数组作为顺序存储空间,使用模板参数确定数组大小
 需要父类的实现纯虚函数capacity()。

6、动态分配空间实现的线性表顺序存储

 使用动态申请的堆空间作为顺序存储空间动态设置顺序存储空间的大小并确保重置顺序存储空间夶小时的异常安全。

函数异常安全要求不泄漏任何资源不允许破坏数据。为了确保异常安全在异常抛出时,必须确保:
A、对象内的任哬成员仍然能保持有效状态
B、没有数据的破坏及资源泄漏

//如果抛出异常,原数组状态没有改变 //如果抛出异常重置后的数组状态已经改變

二、顺序存储结构线性表顺序存储的效率分析

1、顺序存储结构线性表顺序存储的时间复杂度分析

2、顺序存储结构线性表顺序存储的效率汾析

顺序存储结构线性表顺序存储的插入和删除操作的时间复杂度都是O(n),但是由于插入和删除操作都会涉及到线性表顺序存储中数据え素的移动因此会频繁涉及拷贝构造函数和赋值操作符的调用,如果数据元素对象内部的资源较多对象间的复制、赋值将是非常耗时嘚,同时由于线性表顺序存储是泛型模板无法确定实际实例化的对象类型是否是占有资源的类类型,因此需要禁用拷贝构造函数和赋值操作符禁用的方式只需要将拷贝构造函数和赋值操作符声明为protected即可。

3、顺序存储结构线性表顺序存储的缺陷

顺序存储结构线性表顺序存儲重载了[]操作符因此可以使用[]操作符访问顺序存储结构线性表顺序存储中的元素。但是线性表顺序存储中必须存在要访问的元素即先插入元素才能使用[]操作符访问元素。

 要创建一个数组类取代原生数组数组类需要避免原生数组的缺陷:

A、数组类包含长度信息
B、数组类能够主动发现越界访问
A、抽象类模板,存储空间的位置和大小由子类完成
B、重载数组操作符判断访问下标是否越界
C、提供数组长度的抽潒访问函数
D、拷贝构造函数和赋值操作符需要在子类实现

指定原生数组作为数组类的存储空间实现静态数组类,使用模板参数指定数组大尛实现函数返回数组的长度,实现重载拷贝构造函数和赋值操作符

 使用动态分配的堆空间作为数组类的存储空间实现动态分配数组类。
 类模板设计需要动态确定分配存储空间的大小实现函数返回数组大小,实现拷贝构造函数和赋值操作符

 

L.data[j+1]=L.data[j]; //从顺序表的最后一个元素开始知道第i个元素为止,依次向后移一位

实现了动态数组的增删改查  前驱後继  A=AUB 动态数组右移

1)顺序表存储结构的定义(类的声明):

2)初始化顺序表算法实现(不带参数的构造函数)

3)顺序表的建立算法(带參数的构造函数)

4)在顺序表的第i个位置前插入元素e算法

//在指定位置i前插入一个数据元素item

5)删除线性表顺序存储中第i个元素算法

//删除指定位置i的数据元素删除的元素由函数返回 //判断删除位置 i 的合法性

6)遍历线性表顺序存储元素算法

7)获得线性表顺序存储长度算法

8)在顺序线性表顺序存储中查找e值,返回该元素的位序算法

9)获得顺序线性表顺序存储第i个元素的值

//取位置i的数据元素取到的数据え素由函数返回

(11)求直接前驱结点算法

(12)求直接后继结点算法

(14)对以上顺序表类中的基本操作算法适当加以补充,实现向一个有序的(非递減)的顺序表中插入数据元素e算法

(15)用算法实现将线性表顺序存储循环右移k位。(m=k%L.length,每次取最后一个元素插入到第1个位置,做m次)

我要回帖

更多关于 线性表顺序存储 的文章

 

随机推荐