线性表的概念
线性表是n(n>=0)个具有相同特性的数据元素a1,a2,…,an的有序序列。
特点:
- 所有元素具有相同的特性,属于相同的数据对象,有相同的数据类型; //即均一性
- 有唯一的表头元素a1;
- 有唯一的表尾元素a2;
- 除了a1外,其他元素都有唯一的前驱;
- 除了an外,其他元素都有唯一的后继; //序偶性
在线性表中,每条数据元素可以由若干个数据项构成,这种情况下,通常把数据元素称为记录
顺序表
顺序表:将线性表中的元素相继存储在一段连续的存储空间中
线性表中的第i+1个元素与第i个元素之间的存储位置关系满足关系式:LOC(ai+1) = LOC(ai) + k
,k代表每个数据元素占用k个存储单元
动态数组
由于在实际开发中,实际需要的数组空间是无法预料的,开辟过大的存储空间又会造成冗余,所以常常需要使用动态数组
- 静态数组:程序运行过程中,数组的大小是无法改变的
- 动态数组:数组占用的内存空间是可以在程序运行过程中根据需要而设定的,通过指向该内存的指针来访问
动态数组的本质:通过指向数组的指针变量来访问(利用了C语言的指向数组的指针可以当成数组名来使用的特点)
|
|
顺序表的基本运算
|
|
初始化
|
|
按值查找
|
|
表的长度
|
|
提取元素
|
|
插入
|
|
删除
|
|
完整的程序
让计算机实现以下功能
- 让计算机随机产生10个随机数并保存到顺序表中
- 遍历顺序表,输出各个值
- 对产生顺序表置逆
- 观察置逆后的顺序表的结果
|
|
链表
链表是线性表的链式存储结构。
单链表
用一组任意的存储单元存储线性表中的元素。
要点:
- head 头指针
- data 数据域
- link 指针域
结点node由数据域与指针域组成。
单链表的类型定义 :12345struct ListNode{ char data; struct ListNode *link; //递归};struct ListNode *head;
要点:
- p-> 即指针指向的结点,p->data 即 (*p).data; p->link 即(*p).link
单链表的基本操作:
插入2
插入操作有三种情况:
- 在第一个结点前插入
- 在中间插入
- 在链表末尾插入
|
|
|
|
|
|
删除2
|
|
一个完整的程序
让计算机实现以下功能
- 让计算机随机产生10个随机数并保存到线性链表中
- 遍历线性链表,输出各个结点的值
- 对产生线性链表就地置逆并利用原来的结点空间储存
- 观察置逆后的链表的结果
|
|