线性表的基本概念
数据结构三要素
逻辑结构、数据的运算、存储结构(物理结构)
注:存储结构不同,运算的实现方式不同
** 线性表两大核心**
定义 → 对应逻辑结构
基本操作 → 对应运算
应用实例1:约瑟夫环问题
n个人围成环形,从指定位置开始报数,报到指定数值的人被淘汰,依次循环直到剩余最后一人,是循环链表的典型应用。
应用实例2:一元多项式运算问题
多项式形式:P = p0 + p1x + p2 x^2 + ... + pn*x^n
核心问题:
- 如何建立多项式
- 如何输出多项式
- 两个多项式相加
- 两个多项式相减
- 求多项式的值
- 求多项式的导
思考:用什么结构存储多项式,用什么方法操作多项式运算?
线性表的定义
定义:线性表是具有相同特性的数据元素 的有限序列。
三大特性
- 相同特性:所有元素属于同一数据类型
- 有限:数据元素的个数是有限的
- 有序:元素由逻辑序号唯一确定,表内元素有相对先后位置
基础概念
线性表中所含元素的个数称为线性表的长度,用n表示,n≥0。
n=0时称为空表,表中不包含任何元素。
(a1, a2, ..., ai,ai+1(是下标加1) ..., an)
逻辑表示
(a1, a2, ..., ai, ..., an)
- ai (1≤i≤n):表示第i个元素,i称为元素的逻辑位序
- a1:表头元素
- an:表尾元素
若用L命名线性表一般表示:L = (a1, a2, ..., ai,ai+1(是下标加1) ..., an)
注意:
1.位序从1开始
2.数组下标从0开始
前驱与后继
- 除第一个元素a1外,每个元素有且仅有一个直接前驱
- 除最后一个元素an外,每个元素有且仅有一个直接后继
生活实例
汽车排队、人员队列、学生成绩表、待办清单......不胜枚举
列出几个你在现实生活中见到的线性表,可以打在评论区
线性表的运算
9个基本运算:
-
初始化线性表 InitList(&L)
构造一个空的线性表L。
-
销毁线性表 DestroyList(&L)
释放线性表L占用的内存空间。
-
判断表是否为空 ListEmpty(L)
若L为空表,返回真;否则返回假。
-
求线性表的长度 ListLength(L)
返回L中元素的个数n。
-
输出线性表 DispList(L)
线性表L不为空时,顺序显示L中各结点的值。
-
按位取元素 GetElem(L, i, &e)
用e返回线性表中第i (1≤i≤n)个元素的值。
-
按值定位查找 LocateElem(L, e)
返回L中第一个值与e相等的元素的位序;若不存在,返回值为0。
-
插入数据元素 ListInsert(&L, i, e)
在L的第i (1≤i≤n+1)个元素之前插入新元素e,L的长度加1。
-
删除数据元素 ListDelete(&L, i, &e)
删除L的第i (1≤i≤n)个元素,并用e返回其值,L的长度减1。
运算学习Tips
- 对数据的操作(记忆思路)------创销、增删改查
- C语言函数定义格式:<返回值类型> 函数名(<参数1类型> 参数1,< 参数2类型> 参数2, ......)
- 实际开发中,可根据实际需求定义其他的基本操作
- 函数名和参数的形式、命名都可改变
- 什么时候要传入引用"&"------对参数的修改结果需要"带回来"的时候
引用&核心规则
对参数的修改结果需要带回主函数,就加&
只是读取参数、不修改原值,不需要加&
示例1:普通传值(没有&,修改不会带回主函数)
c
#include<stdio.h>
void test(int x) {
x=1024;
printf("test函数内部 x=%d\n",x);
}
int main() {
int x = 1;
printf("调用test前 x=%d\n",x);
test(x);
printf("调用test后 x=%d\n",x);
}
运行结果说明:
调用test前 x=1
test函数内部 x=1024
调用test后 x=1
👉 对参数的修改没带回来
示例2:传引用&(修改可以带回主函数)
c
#include<stdio.h>
void test(int & x) {
x=1024;
printf("test函数内部 x=%d\n",x);
}
int main() {
int x = 1;
printf("调用test前 x=%d\n",x);
test(x);
printf("调用test后 x=%d\n",x);
}
运行结果说明:
调用test前 x=1
test函数内部 x=1024
调用test后 x=1024
👉 对参数的修改带回来了
补充:
什么时候要传入参数的引用 & :对参数的修改结果需要"带回来"的时候。
线性表中: InitList 、 DestroyList 、 ListInsert 、 ListDelete 这些函数要修改线性表本体,参数就要加 & ;
ListEmpty 、 ListLength 、 DispList 、 GetElem 、 LocateElem 只是读取,不需要 & 。
线性表的作用
- 程序员可以直接使用它来存放数据------作为存放数据的容器。
- 程序员可以直接使用它的基本运算------完成更复杂的功能。
应用程序调用线性表的基本运算,操作内部的数据,实现完整的线性表功能。

线性表的作用
- 程序员可以直接使用它来存放数据------作为存放数据的容器
- 程序员可以直接使用它的基本运算------完成更复杂的功能
核心知识点
- 线性表两类存储结构的差异
- 每种存储结构中基本运算的实现算法
- 利用存储结构求解实际问题
- 利用有序表特性设计高效算法