线性表之顺序表

来源:互联网 发布:执行sql不打印日志 编辑:程序博客网 时间:2024/05/14 07:27

基本思想:用数组来存储数据,其实也就是把数组包装一下,变成可以增删改查的数据结构。

优点:检索数据快,时间复杂度为0(1)。

缺点:插入数据慢,最好的情况是直接插入末尾,时间复杂度为0(1),最坏的情况为插入头部,时间复杂度为0(n)。所以插入数据的平均复杂度为0(n/2)。

C代码实现下载
C++代码实现下载
java代码实现下载
(备用下载地址)

功能实现:

假设:
const int MAX = 100; //表的最大元素个数
int count = 0; //记录当前表中元素个数

1.bool IsFull(); 判断表是否已满

因为是静态的,所以才会有这个函数。只要count == MAX即表满了。

2.bool IsEmpty(); 判断表是否为空

只要count == 0 ,则表为空

3.int GetElementCount(); 获取元素个数

直接返回count(这个在C++、java中用才有意义,封装性)

4.void AddFromHead(T e); 添加数据(头添加)

先把所有元素往后移一个位置,空出第一个位置,然后将要添加的元素,赋值给e[0]即可。

5.void AddFromTail(T e); 添加数据(尾添加)

直接添加到数组的后面,即e[count] = 要添加的元素

6.void Insert(int local,T e); 插入数据(指定位置)

在local这个地方的后面的元素都往后移(包括local),然后把要插入的数据赋值给e[local]。

7.int GetLocal(T e); 返回元素位置

一个for循环,从第一个元素开始比较,相等则返回下标,如果找不到返回-1

8.void DeleteFromLocal(int local); 删除数据 (指定位置)

后面的元素往前覆盖,直到覆盖local那个位置,即删除成功

9.void DeleteFromElement(T e); 删除数据 (指定元素)

调用GetLocal后得到元素的位置,再调用DeleteFromLocal即可

10.int SearchFromElmemt(T e); 根据指定元素查找,返回位置

和GetLocal函数一样。

11.T SearchFromLocal(int local); 根据位置查找指定元素

先调用GetLocal得到位置后,直接进行数组的索引返回即可。

12.void Reverse(); 逆转表

一个for循环,进行头尾互换,只需遍历到count/2即可,就可以实现逆转了

13void Print(); 遍历元素

就是循环输出所有元素

14.void CopyList(SequenceList& sl); 复制表

利用AddFromTail函数,把元素添加到sl中,值得注意的是,如果用AddFromHead,就会把元素倒置了

15.void Rewrite(int local, T e); //修改元素

也是直接数组索引修改,只要注意判断越界问题就好。

需要注意的问题:

当要操作的元素是结构体的时候,搜索、删除、遍历、逆转等都要重新写,这个没有模板,只能是用到什么就写什么。比如搜索,你要根据结构体中的哪个字段进行搜索,删除也一样。遍历的时候,也要对字段进行一一遍历。

0 0
原创粉丝点击