数据结构2:顺序表

顺序表

1.线性表

定义:

具有n(n>=0)个数据结点(元素)的序列A=(a1,a2,a3,…,an);数据集合可以为空。

引入下面术语:

  • 首节点和尾结点
  • 表的长度
  • 空表
  • 前驱和后继(左邻和右邻)
  • 有序表

其中,a1称为首结点,an称为尾结点,n是表的长度,如果n等于0,称为空表,相继的两个结点之间互为前驱和后继,a1没有前驱,an没有后继。如果表中的结点是按结点的值,或按结点某个域的值由小到大升序或相反排列的,则称这个表示有序表。这是关于表的逻辑结构。

例子:

100以内的素数表:p=(2,3,5,.....,97)。
# 这是有序表,而且是一个单值元素表
学生成绩单
# 学生成绩单是典型的非单值元素表,每行数据作为一个结点,元素是结构类型。对于结构类型的表,通常要指定一个数据项作为结点的关键字。比如:学号可以定位关键字。

补充:数据结点是类似于数据表中的一条记录,数据项是类似于记录中的一个单元

如何存储线性表?

既要存储数据结点本身,也要存储数据结点之间的关系。

2.存储方法

线性表:具有n(n>=0)个数据结点(元素)的序列A=(a1,a2,a3,…,an);数据集合可以为空。

2.1:顺序存储

  • 存储结点的逻辑次序与蓄力次序一致
  • 称为:顺序表

2.2:链式存储

  • 存储节点的逻辑次序与物理次序不必一致
  • 称为:链表

3. 表的顺序存储——顺序表

顺序存储:

  • 用一组地址连续的存储单元一次存放数据元素
  • 所有数据元素的存储位置均取决于第一个元素的存储位置。
  • 在高级语言中,可以理解为数组。数组的特征与顺序存储的内涵完全一致。因此可以用数组描述顺序存储
  • 这样一个数组元素便是一个存储结点,下标作为结点的存储地址。

3-1.顺序表的插入操作

插入:在表中添加一个新结点

  1. 指定位置插入
  2. 指定条件插入
  3. 无条件插入

例如:有序插入需要先进行查找运算——》确定位置插入——》完成插入操作

完成插入的程序段

for (j=n-1;j>=i;j--) a[j+1]=a[j] //又移,空出a[i]
a[i]=x
n+=1

插入a[i]共需要移动n-i个元素

T(n)=n-i

3-2.顺序表的删除操作(指定位置)

删除:删除表中某个结点。

删除的方式有:

  1. 指定特征的删除:删除值为x的结点。
  2. 指定位置删除:比如,删除表头结点,或表尾接地点,或第i个结点。

3-3.指定位置插入/删除操作效率分析

插入:T(n)=n-i

删除:T(n)=n-1-i

在表尾处插/删,最好,时间用量最少,T(n)=O(1)。

最坏情况下,在表头处插/删,i=0,T(n)=O(n)。

平均情况下,移动半数表元素,T(n)=O(n-i)。

插入与删除的平均时间复杂度都是O(n)

适用情况:

一、表长不大

二、不做,或很少做插/删

三、只在表的断点处插/删

3-4.顺序表的查找

查找:给定结点的关键字值x,查找值等于x的结点的存储地址。

“穷尽式搜索法“通常以查找长度,即查找过程中测试的节点数目,度量查找算法的时间复杂性。

顺序查找的查找长度为for循环体的查找次数,最小为1,最多为n。等概率下长度为(1+n)/2

3-5 顺序查找(带监督元):

在查找终点预留一个存储结点(监督元),对程序的运行起到“监督控制作用”。

带监督元查找在表长n较大,查找频繁的表中更加有效。

监督元技术应用范围很广,适用于顺序表,也适用于二叉树和链表。不同的结构有不同的处理目的。

3-6 二分查找

适用范围:有序顺序表

核心思想:分治法

​ 讲一个难以直接解决的大问题,分割成一些规模较小的、性质相同的子问题,以便各个击破,分而治之。

性能:

最坏:T(n)=O(1+log2(n))

平均:T(n)=O(logn)

发布了106 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/jiangSummer/article/details/105029539
今日推荐