第一章 基础概念
1.数据是描述客观事物的符号,是计算机可以操作的对象,是被计算机识别,并输入计算机处理的符号。数据不仅仅包括整型、实数型等数值类型,还包括字符及声音、图像、视频等非数类型。
2.数据就是符号,而且这些符号具备两个前提:可以被输入到计算机中,能被计算机程序处理
3.基本概念及术语
- ①数据元素:是组成数据的、有一定意义的基本单位,在计算中通常作为整体处理,也被称为记录。
- ②数据项:一个数据元素可以有若干个数据项组成。
- ③数据对象:是相同的数据元素的集合,是数据的子集。(是一组实例或值)
例如:string={a,b,c}
数据对象中一个具体的值就是数据对象的一个实例。组成:不可再分的原子,另一个数据对象的实例作为成员,称为数据元素。
④数据结构:是相互之间存在一种或者多种特定关系的数据元素的集合。
4.数据结构
逻辑结构:集合、图、线性、树
物理结构:
顺序存储结构(面向问题):是把数据元素存放在地址连续的存储单元,其数据间的逻辑关系和物理关系是一致的。
链式存储结构(面向计算机):是把数据元素存放在任意的存储单元,这组存储单元可以是连续的,也可以是不连续的。
第二章 线性表数据结构
1.线性表有唯一的首元素,唯一的最后元素,首元素有唯一的后继元素,最后一个元素有唯一的前驱元素,中间的每一个元素有唯一的前驱元素和唯一的后继元素。
2.单向链表特点:①每个链表有一个头指针,通过头指针可以找到第一个节点;②每个节点都可以通过指针域找到它的后继,最后一个节点的指针域为NULL,表示没有后继③链表不支持随机访问,只能通过前一个元素的指针域得知后一个元素的地址,因此只能从头指针开始顺序访问各节点。
3.①头指针:指向第一个节点的指针,若有头节点,则指向头节点。
②头节点:为操作方便设置;有头节点,操作统一,头节点不必有。(链表的附加节点)
第三章 栈
1.栈是一种特殊的线性表,其插入和删除操作都在表的同一端进行。
2.栈的定义:stack是一种特殊的线性表,其插入(也成为入栈压栈)和删除(也称出栈或者弹栈)操作都是在线性表的同一端进行的。这一端称为栈顶(top),另一端称为栈底(bottom)
栈是一个后进先出表。
现实生活中的栈:打印机的打印纸托盘,下一张要打印的纸是托盘最上面的纸,也就是刚放入的纸;取盘子时,当盘子快用完时,新的盘子被放在原来那摞盘子的上面,被先取走,盘子是后进先出的。
栈能解决的问题:括号匹配,汉诺塔,列车车厢重排,开关盒布线,迷宫老鼠
3.数组线性表描述栈:右端定义为栈顶;用链表的左端作为栈顶。
第四章 队列
1.队列是一个线性表,其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾(back或者rear),删除元素的那一端称为队首(front)
错题:
- 设计一个好的算法应该满足 正确性、可读性、健壮性、高效性
- 一个算法必须满足 有限性、确定性、可行性、输入(有0个或多个)和输出(有一个或多个)等五个重要特性
- 算法的时间复杂度与问题规模有关。
- 非空线性表的结构特征:①除终端结点外,每个结点只有一个后续结点②除了开始结点外,每个结点只有一个前驱结点③只有唯一的开始结点和唯一的终端结点④
- 数据结构是介于数学、硬件、软件之间的一门核心课程。
- 链表的存储密度小于1.
- 最大堆:根节点的值大于其左右儿子的值,但是左右儿子的值没有排序,所以大根堆不能看成是一棵二叉搜索树