实验二 线性表的几种主要存储结果

来源:互联网 发布:php 在线考试 编辑:程序博客网 时间:2024/06/10 23:39

1.顺序表——使用数组存储

    (1)必须确定数组长度,且存储空间必须连续。

    (2)存储结构为随机存取结构。

    (3)按位查找、按值查找的时间复杂度分别为O(1)、O(n)。

    (4)删除和插入操作的时间复杂度都为O(n)。需要移动大量元素,当元素个数多或每个元素占用的存储空间较多时,移动元素的开销大。


2.单链表

    (1)存储结构为顺序存取结构。

    (2)使用结点存放元素,需要另外开辟一个指针域的空间。

    (3)不需要考虑长度。

    (4)按位查找、按值查找的时间复杂度都为O(n)。

    (5)删除和插入操作的时间复杂度都为O(n)。但不需要移动大量元素,且在给出指向链表中某个合适位置的指针后,插入和删除操作所需的时间仅为O(1)。

    (6)必须定义析构函数,因为结点的存储空间是用运算符new申请的,释放类对象时无法自动释放这些空间。


3.双链表:与单链表类似,只是操作有所不同,是在单链表的每个结点中再设置一个指向其前驱结点的指针域。


4.静态链表——用数组来表示单链表(结构体数组)

    (1)必须确定数组长度,且存储空间必须连续。

    (2)按位查找、按值查找的时间复杂度都为O(n)。

    (3)删除和插入操作的时间复杂度都为O(1),改进了在顺序表中需要大量移动元素的缺点。


5.间接寻址——是将数组和指针结合起来的一种方法(结构体指针数组)

    (1)必须确定数组长度,且存储空间必须连续。

    (2)按位查找、按值查找的时间复杂度分别为O(1)、O(n)。

    (3)删除和插入操作的时间复杂度都为O(n),需要移动指向元素的指针。

    (4)必须定义析构函数,因为结点的存储空间是用运算符new申请的,释放类对象时无法自动释放这些空间。


6.总结

(1)顺序表和链表的比较

     由以上两者的特点:

     ①作为一般规律,若线性表需频繁查找却很少进行插入和删除操作,或其操作和“数据元素在线性表中的位置”密切相关时, 宜采用顺序表作为存储结构;若线性表需频繁进行插入和删除操作,则宜采用链表作为存储结构。

    ②作为一般规律,当线性表中元素个数变化较大或者未知时,最好使用链表实现;如果事先知道线性表的大致长度,使用顺序表的空间效率会更高。

(2)静态链表的删除和插入操作的时间复杂度都为O(1),改进了在顺序表中需要大量移动元素的缺点。

(3)间接寻址保持了顺序表随机存取的优点,虽然删除和插入操作的时间复杂度都为O(n),但当每个元素占用的空间较大时,比顺序表的插入和删除操作要快的多,改进了顺序表插入和删除操作的时间性能。

阅读全文
0 0