线性表之顺序表

来源:互联网 发布:天行加速器 for mac 编辑:程序博客网 时间:2024/05/15 22:51

定义:

       线性表采用顺序储存的方式储存就称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的储存单元。

顺序表采用的形式是: 数组;

顺序表应用的体现有: 顺序栈,顺序队列,。。。。


顺序表的基本操作与链表的链表的基本操作差不多:

void init(sequence_list  *slt)   //顺序表的初始化----置空表

void append(sequence_list  *slt,dataType x)  //顺序表后部插入值为X的结点

void display(sequence_list   slt)   //打印顺序表的各结点的值

int empty(sequence_list   slt, dataType x)  //判断顺序表是否为空

int find(sequence_list   slt,dataType x)   //查找顺序表中的值为x的结点位置

int get(sequence_list    slt,int i)   //取得顺序表中第i个结点的值

void insert(sequence_list *slt,int position,dataType x) // 在顺序表的position位置插入为x的结点

void dele(sequence_list *slt,int position)   //删除表中第position位置的结点



下面介绍一下采用顺序表的优点就是:

(1) 方法简单,各种高级语言中都有数组,容易实现。
(2) 不用为表示结点间的逻辑关系而增加额外的存储开销。
(3) 顺序表具有按元素序号随机访问的特点。


而其缺点就是:

(1) 在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺序表效率低。
(2) 需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢


而链表式储存则刚好相反:


所以该在什么时候用相应的储存结构就该思考思考~\(≧▽≦)/~啦啦啦:


主要考虑的因素有以下:

1.基于存储的考虑

顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规模,也就是说事先对"MAXSIZE"要有合适的设定,过大造成浪费,过小造成溢出。可见对线性表的长度或存储规模难以估计时,不宜采用顺序表;链表不用事先估计存储规模,但链表的存储密度较低,存储密度是指一个结点中数据元素所占的存储单元和整个结点所占的存储单元之比。显然链式存储结构的存储密度是小于1的。

2.基于运算的考虑

在顺序表中按序号访问ai的时间性能时O(1),而链表中按序号访问的时间性能O(n),所以如果经常做的运算是按序号访问数据元素,显然顺序表优于链表;在顺序表中做插入、删除时平均移动表中一半的元素,当数据元素的信息量较大且表较长时,这一点是不应忽视的;在链表中作插入、删除,虽然也要找插入位置,但操作主要是比较操作,从这个角度考虑显然后者优于前者。

3.基于环境的考虑

顺序表容易实现,任何高级语言中都有数组类型,链表的操作是基于指针的,相对来讲前者简单些,也是用户考虑的一个因素。




0 0