线性表的顺序存储结构c语言的实现

第一次写博客,有点小小的紧张,最近学习数据结构,我有个想法将线性表的顺序储存、链式储存都归纳起来。
首先今天写一下线性表的顺序储存。
线性表的顺序存储结构c语言的实现_第1张图片线性表的顺序存储结构c语言的实现_第2张图片1.顺序存储结构的特点:

  • 线性表的逻辑结构与存储结构一致。用数据元素的存储位置标示相邻数据元素之间的前后关系。
  • 可以对数据元素进行随机储存。访问线性表时,可以利用上述给出的数学公式,快速地计算出任何一个数据元素的存储地址。这种存取方法称为随机储存法。
  • 简而言之:顺序储存结构逻辑上相邻,物理上相邻

2.顺序表的类型定义
线性表的顺序存储结构c语言的实现_第3张图片 L加&表示引用类型参数,函数内部的改变跳出函数依然有效
不加&表示内部改变,跳出函数后无效
3.线性表的重要基本操作
3.1顺序表的初始化
算法步骤:
1.为顺序表L动态分配一个预定义大小的数组空间,使elem指向这段空间的基地址
2.将表的当前长度设为0
线性表的顺序存储结构c语言的实现_第4张图片3.2顺序表的取值
算法步骤:
1.判断指定位置的序号i值是否合理(1<=i<=L.length),若不合理,则返回ERROR;
2.若i合理,则将第i个数据元素L.elem[i-1]赋值给参数e,通过e返回第i个数据的传值。
线性表的顺序存储结构c语言的实现_第5张图片3.3顺序表的查找
(按值查找)
算法步骤:1.从第一个元素起,依次和e相比较,若找到与e相等的元素L.elem[i],则查找成功,返回该元素序号i+1
2.若查遍整个顺序表都没有查到,则查找失败,返回0.
线性表的顺序存储结构c语言的实现_第6张图片
3.4顺序表的插入
算法步骤:
1.判断插入位置i是否合法(i值的合法范围是1 2.判断表的存储空间是否已满,若满则返回ERROR。
3.将第L.length(n)个至第i个位置的元素依次向后移动一个位置,空出第i个位置(i=n+1无需多动)
4.将要插入的新元素e放入第i个位置。
5.表长+1
线性表的顺序存储结构c语言的实现_第7张图片3.5顺序表的删除
算法步骤:
1.判断删除i位置是否合法(合法值为1 2.将第i+1个元素至第n(L.length)个元素依次向前移动一个位置(i=n时)不需要移动
3.表长-1
线性表的顺序存储结构c语言的实现_第8张图片3.7其他基本操作
线性表的顺序存储结构c语言的实现_第9张图片
4.算法分析
对于插入操作:
设表长为n,算法的时间主要花费在结点后移语句上,该语句的执行次数(移动的节点次数)n-i+1.
所需移动的结点的次数不仅依赖于表的长度,还与插入的位置有关。
若假定在n+1个位置上插入的元素的可能性相等,则平均移动元素的个数是
线性表的顺序存储结构c语言的实现_第10张图片 对于删除操作: 同理可得
线性表的顺序存储结构c语言的实现_第11张图片5.总结
顺序存储结构的特点:

  • 利用数据元素的储存位置表示线性表中相邻数据元素之间的前后关系,即线性表的逻辑结构与存储结构一致

  • 在访问线性表时,可以快速的计算出任何一个数据元素的存储地址。因此可以粗略的认为,访问每一个元素所花的时间相等。

    顺序存储结构的优缺点
    优点:存储密度大(结点本身所占储存容量/结点结构所占储量),可以随机存取表中任一元素
    缺点:在插入、删除某一元素时,需要移动大量元素;浪费存储空间;属于静态储存方式,数据元素的个数不能自由扩充。
    代码实现:
    线性表的顺序存储结构c语言的实现_第12张图片线性表的顺序存储结构c语言的实现_第13张图片线性表的顺序存储结构c语言的实现_第14张图片线性表的顺序存储结构c语言的实现_第15张图片线性表的顺序存储结构c语言的实现_第16张图片线性表的顺序存储结构c语言的实现_第17张图片线性表的顺序存储结构c语言的实现_第18张图片线性表的顺序存储结构c语言的实现_第19张图片线性表的顺序存储结构c语言的实现_第20张图片仅供参考

你可能感兴趣的:(线性表的顺序存储结构c语言的实现)