数据结构(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

  1. INDEX ('DATASTRUCTURE','SIR') = 0,在字符串 “DATASTRUCTURE” 中查找字符串 “SIR” 首次出现的位置,首先,在 “DATASTRUCTURE” 中依次查找 “SIR”。从第一个字符开始,依次比较每个字符与 “SIR” 的对应字符。经过查找,没有找到完全匹配的 “SIR” 字符串。所以,返回的结果应该是 0 ,表示未找到匹配的字符串

思考题-4


【第五章】树和二叉树

1.树的逻辑结构

(1)树的定义和基本术语

(2)树的抽象数据类型

(3)树的遍历操作

2.树的存储结构

(1)双亲表示法

(2)孩子表示法

(3)双亲孩子表示法

(4)孩子兄弟表示法

3.二叉树的逻辑结构

(1)二叉树的定义

(2)二叉树的基本性质

(3)二叉树的抽象数据类型定义

(4)二叉树的遍历操作

4.二叉树的存储结构及实现

(1)顺序存储结构

(2)二叉链表

(3)三叉链表

(4)线索链表

5.二叉树遍历的非递归算法

(1)前序遍历非递归算法

(2)中序遍历非递归算法

(3)后序遍历非递归算法

6.树、森林与二叉树的转换

7.应用举例

(1)二叉树的应用举例-哈夫曼树及哈夫曼编码

(2)树的应用举例-八枚硬币问题

(3)测试程序与魔术表演

习题-5

思考题-5


【第六章】图

1.图的逻辑结构

(1)图的定义和基本术语

(2)图的抽象数据类型

(3)图的遍历操作

2.图的存储结构及实现

(1)邻接矩阵

(2)邻接表

(3)十字链表

(4)邻接多重表

(5)邻接矩阵和邻接表的比较

3.最小生成树

(1)MST性质

(2)Prim算法

(3)Kruskal算法

4.最短路径

(1)Dijkstra算法

(2)Floyd算法

5.有向无环图及其应用

(1)AOV网与拓扑排序

(2)AOE网与关键路径

6.应用举例

(1)图的应用举例1-七桥问题

(2)图的应用举例2-七巧板涂色

习题-6

思考题-6


【第七章】查找技术

1.概述

(1)查找的基本概念

(2)查找算法的性能

2.线性表的查找技术

(1)顺序查找

(2)折半查找

3.树表的查找技术

(1)二叉排序表

(2)平衡二叉树

4.散列表的查找技术

(1)概述

(2)散列函数的设计

(3)处理冲突的方法

(2)散列查找的性能分析

(3)开散列表与闭散列表的比较

习题-7

思考题-7


【第八章】排序技术

1.概述

(1)排列的基本概念

(2)排列算法的性能

2.插入排序

(1)直接插入排序

(2)希尔排序

3.交换排序

(1)冒泡排序

(2)快速排序

4.选择排序

(1)简单选择排序

(2)堆排序

5.归并排序

(1)二路归并排序的非递归实现

(2)二路归并排序的递归实现

6.分配排序

(1)桶式排序

(2)基数排序

习题-8

思考题-8


【第九章】索引技术

1.索引的基本概述

2.线性索引技术

(1)稠密索引

(2)分块索引

(3)多重表

(4)倒排表

3.树形索引

(1)2-3树

(2)B树

(3)B+树

习题-9


【附录A】预备知识

A.1数学术语

A.2级数求和

A.3集合

A.4关系

【附录B】C++语言基本语法

B.1程序结构

B.2数据类型

B.3控制语句

B.4输入与输出

B.5动态存储分配

B.6函数

B.7类与对象

B.8模板

B.9异常处理

posted @ 2024-12-29 16:53  HaibaraYuki  阅读(132)  评论(0)    收藏  举报