数据结构辅导讲义
第0章 复习提示 1
一、 教材内容 1
二、 复习提示 1
1. 经典算法 1
2. 绪论 1
3. 线性表 1
4. 栈和队列 2
5. 串 2
6. 树和二叉树 2
7. 图 2
8. 查找表 3
9. 内部排序 3
第1章 绪论 5
一、 基础知识 5
二、 算法 5
三、 习题 6
第2章 线性表 7
一、 基础知识和算法 7
1. 线性表及其特点 7
2. 顺序表——线性表的顺序存储结构 7
3. 单链表——线性表的链式存储结构之一 10
4. 循环链表 15
5. 双向循环链表 15
6. 顺序表与单链表的比较 16
二、 习题 16
第3章 栈和队列 17
一、 基础知识和算法 17
1. 栈 17
2. 链栈 17
3. 顺序栈 18
4. 队列 19
5. 链队列 20
6. 循环队列 20
7. 栈和队列比较 22
8. 简化的栈和队列结构 23
9. 栈和队列的应用 23
二、 习题 24
第4章 串 25
Android中十六进制颜色码
十六进制颜色码是以“#”开头的6位十六进制数值表示一种颜色。6位数字分为3组,每组两位,依次表示红、绿、蓝三种颜色的强度,如(#FFOOOO红色)。
我把所有的颜色放在String文件中,
如:#00FFFF
这样我们在写Android项目能够方便快捷的查询和使用,希望能对大家有所帮助。
视频转成GIF的免费软件
这款软件是我发现的最好用、最简单视频转GIF的免费的软件,在这里分享给大家,这款软件不但能设置视频时长,还能设置gif的速度。虽然软件是英文版的,但是操作十分简单,总之有了它,你可以很方便的将许多格式的视频(如mp4)转成gif格式的图片。
图的遍历和转换
压缩包中只包含h文件和cpp文件,需要自己在VC中建工程将其添加进去。该项目包含图的遍历,图的转换操作,很值得学习,希望能加深读者对图的理解。
二叉树的建立与遍历
按先序序列构造一棵二叉链表表示的二叉树T,并输出该T的中序遍历序列。实现提示:
1) 按先序序列建立一棵二叉树时,先构造根结点,再构造根的左子树,然后构造右子树;每棵子树又都是二叉树,所以构造一棵子树的过程与构造整棵二叉树的过程完全相同(采用递归形式直到叶子结点为止)。
2) 先序序列的输入:从键盘输入任意一棵二叉树的先序序列,用#代表空指针,如下图所示的二叉树,输入的先序序列为:ab#d##c##)。
表达式求值(采用栈实现)
利用栈实现算术表达式的求值,表达式中可包含加+、减(负) -、乘*、除/、
乘方^、括号( )运算符,操作数可以为浮点数。 可采用直接求中缀表达式的方法,
也可采用先转换成后缀表达式后再求值的方法(参看课件) 。
实现时需注意如下:
( 1)带小数点的数值生成 ( 理解整数数值的生成,小数部分的处理与之类似)。
( 2)考虑负号的情况。负号与减号形式上一样,如何区分?
• 输入的表达式串中第 1 个字符是’-’
– 可断定此’-’是负号
• 其余的’-’
– 若紧接在’(’之后的’-’可断定是负号
( 3)负号的处理
• 方法 1:若已断定是负号,可先压入数值 0 进入操作数栈,如此,可
将负号看作减号。
• 方法 2: 若已断定是负号,则紧接其后的数字字符转换成数值后,要
将其对应的相反数(负数)压入操作数栈
舞伴问题(采用队列实现)
压缩包中只包含h文件和cpp文件,需要自己在VC中建工程将其添加进去。
利用循环队列实现教材P80的舞伴问题。要求:人员的加入并不是一次性完成,可以在过程中加入成员。
1)循环队列的类型定义和基本操作函数声明放在Queue.h文件;
2)基本操作函数及其他函数的实现放在Queue.c或(Queue.cpp)文件;
3)测试程序放在QueueTestApp.c(QueueTestApp.cpp)中。
哈夫曼树(采用EGE图形库绘图)
1)哈夫曼树类型、select()函数(求两最小权值结点)、哈夫曼树构建、求编码函数、字符串输入处理函数等的声明放在huffman.h文件;
2)select()函数、哈夫曼树构建、求编码函数的实现可放在huffman.c文件;
3)输入字符串,得到不同字符个数及在串中出现的次数,该功能实现可放在input.c文件中;
4)绘图功能实现根据自身需要可单独放在draw.c文件中;
5)测试程序放在HuffmanTestApp.c中。
采用最小生成树算法的路线示意软件(窗体程序)
这款软件是一个最佳修建路线展示的软件,采用最小生成树算法,能够自由的添加路线(比如几个地方之间要修路)即可根据算法选择出最少费用的路径并将其展现出来,这款软件采用C#绘图技术,界面美观。希望能够对你理解最小生成树算法有些帮助
大整数运算源码
大整数运算主要考察熟练掌握队列的类型定义和基本操作(以队列初始化、入队、出队等操作为重点)的实现,该源码实现了加减乘除运算,我的博客也有文章详细介绍了高精度运算,希望能够大家理解有些帮助。
用链表实现学生管理系统
设计一个包含学生基本信息(学号,姓名,成绩)的单链表,编程完成如下功能:
⑴ 初始化单链表 L: 根据用户指定的学生数, 采用尾插法插入学生结点;
⑵ 打印表中所有学生信息: 逐个显示表中所有学生的基本信息;
⑶ 判断 L 是否为空表;
⑷ 查找指定的学生: 根据姓名进行查找, 输出此学生的学号和成绩;
⑸ 根据指定的位置, 返回并输出相应学生的基本信息;
⑹ 给定一个学生信息, 将其插入到表中指定的位置;
⑺ 删除指定位置的学生记录;
⑻ 统计表中学生个数(求表长度);
⑼ 销毁表 L;
以上为必做题, 下面为附加题(选做) 。
⑽ 建立两个有序(学号) 的学生单链表 La 和 Lb: 分别向 La 和 Lb 逐个输入 m 个和 n 个
学生的信息(并不一定按学号大小顺序输入);
⑾ 打印表 La 和 Lb 中的学生信息;
⑿ 将 La 和 Lb 归并为新的有序表 Lc;
⒀ 打印表 Lc 中的学生信息;
⒁ 销毁表 La、 Lb 和 Lc。
其他要求:
⑴ 将所需要的标准头文件以及一些符号常量的定义等放在 Common.h 头文件中;
⑵ 单链表类型定义和基本操作函数声明放在 Linklist.h 头文件中;
⑶ 基本操作函数的实现放在 Linklist.cpp 文件中;
⑷ 测试应用程序放在 LinkListTestApp.cpp 文件中( 可以任意重复测试) 。
学生基本信息的顺序表
设计一个包含学生基本信息(学号,姓名,成绩)的顺序表,编程完成如下功能:
⑴ 初始化顺序表 L: 根据用户指定的学生数,逐个输入学生信息;
⑵ 打印表中所有学生信息: 逐个显示表中所有学生的基本信息;
⑶ 判断 L 是否为空表;
⑷ 查找指定学生: 根据姓名进行查找, 返回学生的位序,并输出学生的学号和成绩;
⑸ 根据指定的位置, 返回并输出相应学生的基本信息;
⑹ 给定一个学生信息, 将其插入到表中指定的位置;
⑺ 删除指定位置的学生记录;
⑻ 统计表中学生个数(求表长度);
⑼ 销毁表 L;
以上为必做题, 下面为附加题(选做) 。
⑽ 建立两个有序(学号) 的学生顺序表 La 和 Lb: 分别向顺序表 La 和 Lb 逐个输入 m 个
和 n 个学生的信息(并不一定按学号大小顺序输入);
⑾ 打印表 La 和 Lb 中的学生信息;
⑿ 将 La 和 Lb 归并为新的有序表 Lc;
⒀ 打印表 Lc 中的学生信息;
⒁ 销毁顺序表 La、 Lb 和 Lc。
其他要求:
⑴ 将所需要的标准头文件以及一些符号常量的定义等放在 Common.h 头文件中;
⑵ 顺序表类型定义( 采用定义二) 和基本操作函数声明放在 Sqlist.h 头文件中;
⑶ 基本操作函数的实现放在 Sqlist.cpp 文件中;
⑷ 测试应用程序放在 SqlistTestApp.cpp 文件中( 可以任意重复测试) 。
用C#写的语音计算器(窗体程序)
这个小项目是我在学习C#winform的时候做的,不得不承认C#在做桌面程序程序是Java不能比的,如果有VS这样的开发工具就如虎添翼了,我这项目是用VS2015做的,用VS2010打包安装(后来的VS都不具备这个功能了)。下面说说具体这个语言计算器,这个计算机实现了键盘输入、实现了语音播报这两个比较有特色的功能
职工工资管理系统(C语言)
该职工工资管理系统是用C语言写的,其中包含大量的文件操作,通过相对路径访问。
它的基本结构是单链表,其中也包含大量的操作,包括链表的插人、删除、查询、销毁。这个管理系统包含管理员登录和员工登录两个模块,两者的信息也存储在不同的文件中,这款软件虽然是用C语言写的,但是结构清晰,逻辑合理,可以说是对C语言重要知识的一个集成。写这个管理系统也花我了好几周的时间,希望对大家理解C语言有所帮助。
使用Bmob实现登录和注册功能实例
使用Bmob实现登录和注册功能实例