数据结构(一)——线性表的顺序存储原理及实现

一、线性表介绍

1、定义:由n(n>0)个相同类型的元素组成的有序集合,如图

这里所说的线性表是逻辑结构,表示元素一对一的相邻关系,是独立于存储结构(顺序表和链表)的,他们属于不同层面的概念

2、特点:

  • ➢表中元素的个数是有限的。
  • ➢表中元素的数据类型都相同。意味着每一个元素占用相同大小的空间
  • ➢表中元素具有逻辑上的顺序性,在序列中各元素排序有其先后顺序

3、实现方式——顺序表及链表

3.1顺序表:线性表的顺序表示

数据结构(一)——线性表的顺序存储原理及实现_第1张图片

逻辑上相邻的两个元素在物理位置上也相邻

 数据结构(一)——线性表的顺序存储原理及实现_第2张图片

以上代码描述:使用结构体定义, 数组一开始要定义好大小50,访问时通过下标,注意数组的长度和线性表的长度不一样

3.2优缺点:

优点:

  • ➢可以随机存取(根据表头元素地址和元素序号)表中任意一个元素。
  • ➢存储密度高,每个结点只存储数据元素。

缺点:

  • ➢插入和删除操作需要移动大量元素。
  • ➢线性表变化较大时,难以确定存储空间的容量。
  • ➢存储分配需要一整段连续的存储空间,不够灵活。

3.3插入操作:7,6,5,4要往后移动一位,才把x插到4的位置

数据结构(一)——线性表的顺序存储原理及实现_第3张图片

  • 最好情况:在表尾插入元素,不需要移动元素,时间复杂度为O(1)。
  • 最坏情况:在表头插入元素,所有元素依次后移,时间复杂度为O(n)。
  • 平均情况:在插入位置概率均等的情况下,平均移动元素的次数为n/2,时间复杂度O(n)
  • 时间复杂度O(n) 要把系数和一阶项都去掉

伪代码:

数据结构(一)——线性表的顺序存储原理及实现_第4张图片

这里L就是定义出来的SqList 结构体的缩写

3.4 删除操作:5,6,7前移一位

数据结构(一)——线性表的顺序存储原理及实现_第5张图片

  •  ➢最好情况:删除表尾元素,不需要移动元素,时间复杂度为O(1)。
  • ➢最坏情况:删除表头元素,之后的所有元素依次前移,时间复杂度为O(n)。
  • ➢平均情况:在删除位置概率均等的情况下,平均移动元素的次数为(n-1)/2,时间复杂度为O(n)。

伪代码:

数据结构(一)——线性表的顺序存储原理及实现_第6张图片

 注意:插入和删除的时候,变量i的范围是不一样的

3.5动态分配的数组属于顺序存储结构吗?

动态分配:int *p = malloc(sizeof(int )*20),仍然属于顺序存储,物理结构没有变化,还是随机存取的,只是分配的空间可以在运行时决定,访问任意一个元素都可以通过地址 

【随机存取就是通过一个公式可以拿到任意一个元素】

【直接定义数组是在栈空间上的,申请动态分配的数组是在堆空间上,都支持随机存取】

数据结构(一)——线性表的顺序存储原理及实现_第7张图片

数据结构(一)——线性表的顺序存储原理及实现_第8张图片

顺序存储和链式存储的优缺点:

数据结构(一)——线性表的顺序存储原理及实现_第9张图片

你可能感兴趣的:(数据结构,数据结构)