仅供西安交通大学本科生教学用途,帮助本科生进行期末复习,转载请标明来源
数据数据元素
数据项
组成数据元素的每一项称为"数据项"
由扑克牌正确区分数据元素,数据项,前趋和后继
数据的逻辑结构{数据元素的集合D,数据元素前趋后继关系的集合R}
DS=(D,R)
三种逻辑结构:线性结构;树形结构;图结构
(下图来源网络)
数据之间的逻辑结构
学生的档案信息:线性结构,所有学生学籍卡按照顺序串成一串
一本书的目录:树形结构
internet中的各个网页:图结构,网页上有许多链接,错综复杂
线性结构的元素之间存在确定的先后顺序,非线性结构的元素之间不一定存在确定的先后顺序
数据的物理结构/数据的存储结构:计算机的内存是线性的
10个班01~10班分配到50个教室里:1.分配到01~10号教室里 2.分配到11~20号教室里 3.随意安排
随意安排详解:辅导员只能记住一个班的位置,每个班的班长记住下一个班的位置
顺序存储方式;链式存储方式;索引存储结构;散列存储方式
顺序存储方式就对应的上述1,2种教室分配方式,一个一个往下排
链式存储方式就对应上述方式3,上一个班负责记着下一个班的教室位置,这样绕一圈还是可以做到知道所有班级的位置
索引存储结构:辅导员不需要班长帮忙记了,拿个本子自己记下来
顺序存储结构中,数据元素存储在一组连续的存储单元中,元素存储位置间的关系反映了元素间的逻辑关系。例如顺序表,逻辑上相邻元素存储在物理位置相邻存储单元中
链式存储结构中,数据元素存储在若干不连续的存储单元中,通过在元素中附加一个或多个与其逻辑上相连的其他元素的物理地址来建立元素间的逻辑关系
数据的运算:就是对数据元素进行某种操作(改变元素个数,元素顺序,元素之间关系,遍历每个元素,检索符合条件的数据元素)
线性表、栈、队列
线性表可以在结构的任何位置进行插入和删除操作;栈只能在结构的一端进行插入和删除操作;队列在一端进行插入,在另一端进行删除
栈和队列是特殊形式的线性表
线性表:相同类型的数据元素组成的的有序序列(a1,a2,a3,......an)
例:某班同学的成绩(67,98,87,56,77)
除了a1和an,任意元素都有一个直接前趋和一个直接后继,a1无前趋,an无后继
表的长度:线性表中数据元素的个数
空表:元素个数为0的表(空表也是表)
线性表的存储结构为顺序存储结构和链式存储结构,分别成为顺序表和线性链表
C语言不检查数组越界
线性表有两个长度,一个是实际长度,一个是最大长度
顺序表(和存储相关):顺序表中的数据元素按照逻辑顺序依次存放在一组连续的存储单元中
在数据的顺序存储中,由于每个元素的存储位置都可以通过简单计算得到,所以访问元素的时间都相同
顺序表的数据访问每一个数据的时间是相同的,计算机的随机存储
访问每一个数据的时间不相同,磁带
顺序存储的特点:
优点:1.不需要为元素间的逻辑关系增加额外的存储空间 2.可以方便的随机存取顺序表中任意一个元素,找任意一个元素的花费的时间是相同的
缺点:1.元素进行插入和删除时都需要进行大量元素的移动,操作效率较低 2.占用连续的存储空间,存储空间的大小在初始化时就必须确定
线性链表(和存储相关):采用链式存储的线性表
存储特点:每个结点都有两部分,数据域+指针域
data | next |
数据域:存储元素的值
指针域:存放直接前趋或直接后继元素的地址信息
单项链表/单链表(网图)
指针域部分仅存放了直接后继(或直接前趋)结点的地址
头节点:在头指针head和首节点a1之间增加了一个特殊结点,头节点的数据域为空,指针域指向首节点
目的是避免对第一个位置的元素进行删除或插入时进行特殊处理
其他形式的链表:循环链表,双向链表