数据结构线性表1:顺序表

一、线性表概念

1、定义

 线性表是由n(n>=0)个类型相同的数据元素组成的有限序列,n=0表示为空表,线性表从第1到第n+1个位置,共有n个元素,其中0位置不用。数据元素之间为线性关系,每个数据元素最多有一个直接前驱和直接后继。

2、特点

(1.)同一性:线性表由同类数据元素构成;

(2.)有穷性:有限个数据元素;

(3.)序偶性:线性表中相邻元素之间存在序偶关系(离散数学中告诉我们序偶关系特点:成对、有序)

二、线性表的顺序存储

 定义

  用一组地址连续的存储单元依次存储线性表中的各个元素,则逻辑结构中相邻位置的数据元素的物理存储单元也是相邻的。

  采用顺序存储结构的线性表通常称为顺序表

若线性表中每个元素占k个单位,第一个元素的地址为loc(a1),则第i个元素的地址为:loc(a1)+(i-1)*k;由此可见:只要已知线性表的第一个元素位置,那么线性表中任意位置元素都可以随机存取(顺序表是一种随机存储结构

其C语言定义:                                                                                                线性表初始化:
数据结构线性表1:顺序表_第1张图片

数据结构线性表1:顺序表_第2张图片

 

三、线性表的基本运算(查找、插入、删除)

1、查找操作

(1.)按序号查找GetData(L,i)

查找线性表L中的第i个数据元素,其结果是L.elem[i];

(2.)按内容查找Locate(L,x)

查找线性表中与数据x相同的数据元素,其结果是:若找到与x相等的元素,返回该元素在表中的序号;若找不到,返回false或其他无意义的序号,如:-1;

数据结构线性表1:顺序表_第3张图片

 

 

时间复杂度为O(n)

 

 

2、插入操作

在线性表的第i(1<=i<=n+1)个位置,插入一个新元素e,使长度为n的线性表长度变为n+1。

操作思路:

①把an到ai之间的所有元素按照从后向前的顺序依次向后挪动一个位置,为新元素让出位置;

②将元素x放入空出的第i个位置;

③修改表长。

数据结构线性表1:顺序表_第4张图片

 

 

 

 

 

 

时间复杂度O(n)

 

 

3、删除操作

将表中第i(1<=i<=n)个元素删去,使长度为n的线性表变成长度为n-1的线性表

操作思路:

①把a(i+1)到an之间的元素依次向前挪动;

②表长减一

数据结构线性表1:顺序表_第5张图片

 

 

时间复杂度为O(n)

 

 

 

 

 

 

四、典型例题(两顺序表合并)

有两个顺序表LA和LB,其元素均为非递减有序数列,编写一个算法,将他们合并成一个顺序表LC,要求LC也是非递减有序排列。

算法思路:

设LC为一个空表,要求LC也是非递减有序排列,设两个指针i,j分别指向表LA和LB的元素LA.elem[i]、LB.elem[j],若LA.elem[i] <=L.elem[j],即:A中的元素小于B中的元素,所以要先将LA.elem[i]插入到LC,直到其中一个表被扫描完毕,然后将未扫描完的表中剩余的元素放到LC之后。

数据结构线性表1:顺序表_第6张图片

 

 

 

 

 

 

 

 

 

 

 

在敲上面代码的过程中我对打?那一行有了疑问“为什么是[k++],[j++]?”

本人表示很抱歉。。。。C语言学艺不精啊,这就相当于++i与i++的区别。

你可能感兴趣的:(数据结构线性表1:顺序表)