数据结构(C++)
【第一章】绪论
1.数据结构的基本概念
(1)数据结构
\(DataStructure=(D,R)\)
\(D\)是\(\underline{数据元素}\)的有限集合,\(R\)是\(D\)上关系的结合
(2)抽象数据结构
\(ADT\)
为整数定义一个抽象数据类型,包含整数的常见运算,每个运算对应一个基本操作,
每个基本操作的接口需定义前置条件、输入、功能、输出和后置条件
$\underline{整数抽象数据类型}$
加法操作__(Add)__
**前置条件** 两个整数a和b已定义
**输入** 两个整数a和b
**功能** 计算a+b的值
**输出** a+b的结果,设为c
**后置条件** 得到a与b之和c
减法操作__(Subtract)__
**前置条件** 两个整数a和b已定义
**输入** 两个整数a和b
**功能** 计算a-b的值
**输出** a-b的结果,设为d
**后置条件** 得到a与b之差d
乘法操作__(Multiply)__
**前置条件** 两个整数a和b已定义
**输入** 两个整数a和b
**功能** 计算a*b的值
**输出** a*b的结果,设为e
**后置条件** 得到a与b之积e
除法操作__(Divide)__
**前置条件** 除数b!=0,两个整数a和b已定义
**输入** 两个整数a和b
**功能** 计算a/b的值(取整)
**输出** a/b的结果,设为f
**后置条件** 得到a除以b的商f
2.算法及算法分析
(1)算法及其描述方法
(2)算法分析
$\underline{多项式求值算法的时间复杂度比较}$
\((1){A(x)}=a_n{x^n}+a_{n-1}{x^{n-1}}+...+a_1{x}+a_0\)
计算\(x^k需要k次乘法运算,那么计算整个多项式需要\)
\((2){A(x)}=(...(a_n{x^n}+a_{n-1})x+...+a_1)x+a_0\)
习题-1
数据元素是\(\underline{数据}\)的基本单位,在计算及程序中通常作为一个整体进行考虑和处理
数据项是\(\underline{数据}\)的最小单位,数据元素是探讨\(\underline{数据结构}\)时涉及的最小数据单位
从逻辑关系上讲,数据结构主要分为集合,线性结构,树结构,图结构
\(\underline{数据}\)的存储结构主要有顺序存储和链式存储两种基本方法,
不论哪种\(\underline{存储结构}\),都要存储两方面内容:数据元素和逻辑关系\(\underline{(数据元素之间的关系)}\)
顺序存储结构中数据元素之间的逻辑关系是由存储位置表示的
链接存储结构中数据元素之间的逻辑关系是由指针表示的
算法具有5个特性,分别是输入、输出、有穷性、确定性、可行性
算法的描述方法通常有自然语言、流程图、程序、伪代码,其中伪代码被称为算法语言\(\underline{(第一语言)}\)
一般情况下,一个算法的时间复杂度是关于设计问题规模的函数
设待处理问题规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级形式为O(1),若为\(2n*log_2{5n}+8n\),则表示成数量级的形式为\(O(nlog_2{n})\)
思考题-1
【第二章】线性表
1.线性表的逻辑结构
(1)线性表的定义
(2)线性表的抽象数据类型定义
2.线性表的顺序存储结构及实现
(1)线性表的顺序存储结构-顺序表
(2)顺序表的实现
插入、删除、定位、查找
3.线性表的链接存储结构及实现
(1)单链表
(2)循环链表
(3)双链表
4.顺序表和链表的比较
(1)时间性能比较
(2)空间性能比较
5.线性表的其他存储方法
(1)静态链表
静态链表中不存在类似动态链表中指针的"->"操作来访问后继,因为是用数组存储,使用数组下标存储
(2)间接寻址
6.应用举例
(1)顺序表的应用举例-大整数求和
(2)单链表的应用举例-一元多项式求和
习题-2
判断题
1. 顺序表的逻辑结构和存储结构一致,链表的逻辑结构和存储顺序不一致,所以线性表的逻辑结构和存储顺序总是一致的
2. p=q 只能表示 p 和 q 指向同一起始地址,而所指类型则不一定相同,设p, q是指针,若 p 等于 q, 则 *p 不一定等于 *q
3. 线性结构的基本特征是: 每个元素至多有一个直接前驱和一个直接后继
4. 单链表不是随机存储结构
5. 线性结构,非线性结构的特点
线性结构中的数据元素之间存在着一对一的线性关系
数组:
优点:可以通过下标快速访问元素,存储和读取效率高。
缺点:插入和删除元素时,可能需要移动大量元素,操作效率较低。
链表:
优点:插入和删除元素操作较为方便,只需修改指针即可。
缺点:访问元素时需要从头开始遍历,查找效率相对较低。
队列:
特点:遵循先进先出的原则,适合处理需要按照顺序处理的任务
非线性结构的特点:
非线性结构中的数据元素之间存在着一对多或多对多的关系。
树:
层次分明,便于对数据进行分类和组织。
可以快速地进行查找、插入和删除操作。
图:
能够很好地表示多对多的关系。
常用于解决复杂的关系问题,如网络、交通等领域的建模。
总之,线性结构简单直观,适合数据元素关系简单、操作相对简单的情况;非线性结构复杂但能更有效地处理复杂的数据关系和问题。
叙述题
顺序表和单链表各有何优缺点,并分析下列情况中,采用何种存储结构更好些
1.若线性表的总长度基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素(顺序表)
2.如果n个线性表同时存在
思考题-2
【第三章】栈和队列
1.栈
(1)栈的逻辑结构
(2)栈的顺序存储结构及实现
(3)栈的链式存储结构及实现
(4)顺序栈和链栈的比较
2.队列
(1)队列的逻辑结构
(2)队列的顺序结构及实现
(3)队列的链接存储结构及实现
(4)循环队列和链队列的比较
3.应用举例
(1)栈的应用举例-表达式求值
(2)队列的应用举例-火车车厢重排
习题-3
假溢出
原因:随着队列的插入和删除操作进行,整个队列向数组中下标较大的位置移过去,从而产生队列的"单向性移动性"。
当元素被插入到数组中下标最大的位置上之后,队列的空间就用尽了,尽管此时数组的低端还有空闲空间,这种现象就叫做"假溢
出"。
如何知道循环队列是空还是满:
(rear+1)%QueueSize=front
front=rear
思考题-3
【第四章】字符串和多维数组
1.字符串
(1)字符串的定义
(2)字符串的存储结构
(3)模式匹配
2.多维数组
(1)数组的定义
(2)数组的存储结构与寻址
3.矩阵的压缩存储
(1)对称矩阵的压缩存储
(2)三角矩阵的压缩存储
(3)对角矩阵的压缩存储
(4)稀疏矩阵的压缩存储
4.应用举例
(1)字符串的应用举例-凯撒密码
(2)数组的压缩存储
习题-4
- INDEX ('DATASTRUCTURE','SIR') = 0,在字符串 “DATASTRUCTURE” 中查找字符串 “SIR” 首次出现的位置,首先,在 “DATASTRUCTURE” 中依次查找 “SIR”。从第一个字符开始,依次比较每个字符与 “SIR” 的对应字符。经过查找,没有找到完全匹配的 “SIR” 字符串。所以,返回的结果应该是 0 ,表示未找到匹配的字符串

浙公网安备 33010602011771号