顺序表

阅读量: 215 编辑

线性表是由 n(n≥0) 个类型相同的数据元素 a1,a2, …,an 组成的有限序列,记为(a1, a2, ... , ai, ai+1 ,..., an)。

int arr[10]= {10, 20, 30, 40, 50, 60, 70, 80, 90};//数组

这里的数据元素 ai(1≤i≤n) 只是一个抽象的符号。其具体含义在不同情况下也不同,既可以是原子类型,也可以是结构类型,但同一线性表中的数据元素必须属于同一数据类型。

此外,线性表中相邻数据元素之间存在序偶关系。即对于非空的线性表,表中 ai-1 领先于 ai ,称 ai-1 是ai的直接前驱,而称 a是 ai-1 的直接后继。除了第一个元素 a1 外,每个元素 ai 有且仅有一个被称为直接前驱的结点 ai-1,除了最后一个元素 an 外,每个元素 ai 有且仅有一个被称为直接后继的结点 ai+1

一、线性表的特点

线性表中元素的个数 n 被定义为线性表的长度,n=0 时称为空表,线性表的特点可概括如下:

  • 同一性:线性表由同类数据元素组成,每个 a 必须属于同一数据对象。

  • 有穷性:线性表由有限个数据元素组成,表的长度就是表中数据元素的个数。

  • 有序性:线性表中相邻数据元素之间存在序偶关系 < ai , ai+1 >

由此可以看出,线性表是一种最简单的数据结构,也是一种常见的数据结构,像数组、矩阵、字符串、栈、队列等都符合线性条件。

string s = "hello";//字符串
int arr[10]= {10, 20, 30, 40, 50, 60, 70, 80, 90};//数组

二、线性表的存储方式

线性表根据数据存储的方式不同,可分为:顺序表示(顺序表)和链式表示(链表)

  • 顺序表存储的元素地址是连续的,可以用下标访问;

  • 链表存储元素的地址可以是不连续的,没有下标的概念;

三、线性表的顺序表示

线性表的顺序表示,简称为顺序表。顺序表存储的地址空间是连续的,下标的本质是访问地址的平移。

1581576903196704.png

四、顺序表添加元素

在下标 i (i>=0 && i < length)的位置插入一个元素,i 和 i 之后的元素要依次向后移动一个位置,然后把新元素放到 i 的位置。

1581577305849888.png

  • 找到 i 的位置,i=5

  • 从i开始,之后的元素依次向后移动 arr[j] = arr[j-1]

  • arr[i] = 55

int arr[10]= {10, 20, 30, 40, 50, 60, 70, 80, 90};//数组
int i = 5;
for(int j = 10; j>i; j--){
    arr[j] = arr[j-1];
}
arr[i] = 55;

五、删除元素

在下标 i (i>=0 && i < length)的位置的元素删除,i 和 i 之后的元素要依次向前移动一个位置,然后把最后一个元素设置为空值。

1581577475719200.png

  • 根据55的值,找到 i 的位置:i=5

  • 从i开始,之后的元素依次向前移动 arr[i] = arr[i+1]

  • arr[size-1] = NULL;

int arr[10]= {10, 20, 30, 40, 50, 55, 60, 70, 80, 90};
int size = 10;

for(int i = 5; i<10; i++){
	arr[i] = arr[i+1];
}
arr[size-1] = NULL;

爱码岛编程公众号
试卷资料
爱码岛编程小程序
在线刷题
苏ICP备13052010号
©2023 南京匠成信息科技有限公司