数据结构绪论
数据结构的概念
- 数据结构 : 数据结构是相互之间存在一种或多种特定关系的数据元素的集合
- 数据结构研究的问题 :数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科
- 抽象数据类型ADT: 定义ADT格式不唯一
- 例题
数据结构的三要素
- 逻辑结构:是对元素之间的逻辑关系
- 物理结构:是数据结构在计算机中的表示和实现,又称“存储结构”
- 数据的运算:施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,运算的实现是针对存储结构的。
- 例题
- 逻辑结构的四大分类: 根据数据元素之间关系的不同特性,分为集合、线性结构、树状结构、图状或网状结构。
- 储存结构:数据的存储结构又称为物理结构。在物理结构表示数据结构中,主要研究数据元素的存储和关系存储,别称为数据元素的映像和关系的映像
- 物理结构:对于任意一个关系,可分为顺序存储、链式存储、索引存储、散列存储
- 例题
在C语言中的数据类型
数组:有序的元素序列
指针:一个变量的地址就称为该变量的指针。 指针就是地址,而地址就是内存单元的编号。
取地址符&:取变量地址的符号。
结构体:结构体就是将不同类型的数据组合合成一个有机的整体,以便于引用。
算法与算法分析
- 算法的五大重要特性
1、有穷性:一个算法必须总是有穷的。
2、确定性:每一条指令必须有确切的含义。
3、可行性
4、输入
5、输出
- 例题
1、算法设计的要求
1、正确性
2、可读性
3、健壮性
4、效率与存储量需求
2、算法效率的度量
时间复杂度:一个语句的频度是指该语句在算法被重复执行的次数。T(n)=O(f(n))
空间复杂度:一个语句的频度是指该语句在算法被重复执行的次数。S(n)=O(f(n))
- 六种常用算法时间复杂度的大小比较
线性表
线性表的定义
基本概念:是一个有限序列,表中各个元素是相继排列的,且每两个相邻元素之间都有直接前驱和直接后继的逻辑关系。
线性表的四大特点:
1、存在唯一的第一个元素和最后一个元素。
2、除第一个元素外,其它元素有且仅有一个直接前驱;第一个元素没有直接前驱。
3、除最后一个元素外,其它元素有且仅有一个直接后继;最后一个元素没有直接后继。
4、线性表中的每一个元素都具有相同的数据类型,且不能按子表那样再分割。
顺序表
顺序表的定义和特点:
单链表
当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表。
带头结点的单链表
头指针head指向头结点,头结点的值域不含任何信息,从头结点的后继结点开始存储数据信息。
头指针head始终不等于NULL,head->next等于NULL时,链表为空。
不带头结点的单链表
头指针head直接指向开始结点。
当head等于NULL时,链表为空。
链表是一个动态的结构,不需要分配空间。
单链表的插入
表头插入
表间插入
表头删除
表间删除
头插法
尾插法
循环链表和双向链表
循环链表
最后一个结点的指针域的指针又指回第一个结点的链表。
和单链表的差别在于,判别链表中最后一个结点的条件不再是“后继是否为空”而是“后继是否为头结点”。
双向链表
每个数据结点都有两个指针,分别指向直接后继和直接前驱。
可以进行随机访问是顺序表
静态链表
借助数组来描述线性表的链式存储结构,这里的指针是结点的相对地址(数组下标)。
与顺序表一样,静态链表需要预先分配一块连续的存储空间。
总结