数据结构(c语言版)文摘
第一章 绪论
数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据项:数据的不可分割的最小单位。
数据对象:性质相同的数据元素的集合,是数据的一个子集。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
结构:数据元素相互之间的关系。1.集合 2.线性结构 3.树形结构 4.图状结构
逻辑结构:数据元素之间的逻辑关系。
物理结构(存储结构):在计算机中的表示。
(顺序映像)顺序存储结构:元素的相对位置。
(非顺序映像)链式存储结构:元素存储地址的指针。
数据类型:是一个值的集合和定义在这个值集上的一组操作的总称。
1.非结构的原子类型 2,结构类型
抽象数据类型:是指一个数学模型以及定义在该模型上的一组操作。
1.原子类型 2.固定聚合类型 3.可变聚合类型
算法:是对特定问题求解的一种描述 1。有穷性 2。确定性 3。可行性。4。输入 5。输出
算法设计的要求:1.正确性 2.可读性 3.健壮性 4.效率与低存储量需求
频度:该语句重复执行的次数。
第二章 线性表
线性结构的特点:1."第一个"。2.“最后一个”。3.“只有一个前驱”。4.“只有一个后继”
一个线性表是n个数据元素的有限序列,含有大量记录的线性表又称文件。
线性表的顺序表示:用一组地址连续的存储单元依次存储线性表的数据元素。顺序表,随机存取。
插入移动数据:n-i+1。删除:n-i。平均移动表中一半元素。
移动,删除 O(n); union,O(a.length*b.length); 顺序表的合并(O(a.length+b.length));
线性表的链式表示:用一组任意的存储单元存储线性表的数据元素。数据域,指针域。一个指针域,单链表
头结点:第一个结点之前附设一个结点。
插入:s->next = p->next; p->next=s; 删除:p->next = p->next->next; O(n)
数组描述的链表叫静态链表。
循环链表 双向链表
一元多项式的表示及相加
第三章 栈和队列
3.1 栈
栈:限定只在表尾进行插入或杉树的线性表。表尾为栈顶,表头为栈底。
栈:后进先出。入栈:插入元素。出栈:删除栈顶元素。
栈的存储方法:1.顺序栈 2.链式
3.2 栈的应用举例:1.数制转换 2.括号匹配的检验 3.行编辑程序 4.迷宫求解 5.表达式求解
3.3 栈与递归的实现
3.4 队列
队列:先进先出。表的一端进行插入,一端进行删除。插入的一端叫队尾,删除的一端叫队头。
双端队列
链队列
循环队列
3.5离散事件模拟
第四章 串
4.1 串是由零个或多个字符组成的有限序列。
4.2 串的表示和实现 1.定长顺序存储表示 2.堆分配存储表示 3.串的块链存储表示
4.3 串的模式匹配算法
4.4 串操作应用举例 1.文本编辑 2.建立词索引表
第五章 数组和广义表
5.1数组的定义
5.2数组的顺序表示与实现 1.以列序为主序的存储方式 2.以行序为主序的存储方式
5.3 矩阵的压缩存储:为多个值相同的元只分配一个存储空间;对零元不分配空间。
特殊矩阵:值相同的元素或者零元素在矩阵中的分布有一定规律
稀疏矩阵:值相同的元素或者零元素在矩阵中的分布没有规律。1。三元组顺序表 2。行逻辑链接的顺序表 3.十字链表
5.4 广义表的定义 (列表)
1.列表是一个多层次的结构 2.列表可以为其他列表所共享 3.列表可以是一个递归的表
5.5 广义表的存储结构 链式存储
第六章 树和二叉树
6.1 树的定义和基本术语
a.嵌套集合 b.广义表的形式 c.凹入表示法
结点拥有的子树数称为结点的度,度为0的结点称为叶子或终端结点,度不为0的结点称为非终端结点或分支结点。
树的度是树内各节点的度的最大值。孩子,双亲,兄弟,祖先,子孙。
树中结点的最大层次称为树的深度或高度。
从左到右有次序叫有序树。森林是m棵互不相交树的集合。
6.2 二叉树
每个结点至多只有两棵子树,二叉树中不存在度大于2的结点,子树有左右之分。
二叉树的5种基本形态:1.空二叉树 2.仅有根节点 3.右子树为空 4.左子树为空 5.左右子树非空
二叉树的性质:1.在二叉树的第i层至多有2(i-1)次方个结点
2.深度为K的二叉树至多有2的k次方-1个结点
3.对任何一棵二叉树终端结点数为n0,度为2的结点数为n2,则n0=n2+1
深度为K且有2的K次方-1个结点的二叉树为满二叉树
完全二叉树:从1到N的结点一一对应。
4.具有n个结点的完全二叉树的深度为[log2n]+1
5.....
二叉树的存储结构:1顺序存储结构 2.链式存储结构 二叉链表,三叉链表
6.3 遍历二叉树和线索二叉树
遍历二叉树:
1.先序遍历 根左右
2.中序遍历 左根右
3.后序遍历 左右根
线索链表,线索,线索二叉树,线索化
6.4 树和森林
树的存储结构:1.双亲表示法 2.孩子表示法 3.孩子兄弟表示法
森林和二叉树的转换:1.森林转化为二叉树 2.二叉树转化为森林
1.先序遍历森林 2.中序遍历森林
6.6 赫夫曼树及其应用
赫夫曼树(最优二叉树):带权路径长度最小的二叉树
赫夫曼编码
第七章 图
7.1 图的定义和术语
7.2 图的存储结构
1.数组表示法 2.邻接表 3.十字链表 4.邻接多重表
7.3 图的遍历
1.深度优先搜索 2.广度优先搜索
7.4 图的连通性问题
7.5 有向无环图及其应用
7.6 最短路径
第八章 动态存储管理
第九章 查找
静态查找(1.查询,2检索属性),动态查找(3.插入,4.删除),主关键字(唯一标示一个记录),次关键字
静态查找:
1.顺序查找:从表中最后一个记录开始,逐个比较。平均查找长度:n+1/2(n大时,效率低,算法简单适用面广)
2.折半查找:平均查找长度:log2(n+1)-1 (限于顺序存储结构,线性链表无法查找)(只适用于有序表)
斐波那契查找,插值查找
3.静态树表的查找(次优查找树) 查找概率不等
4.索引顺序表的查找,分块查找
动态查找:二叉排序树,平衡二叉树,B-树,B+树,键树(数字查找树)
哈希表
第十章 内部排序
稳定(排序后的序列和排序前一样),不稳定(排序后的序列和排序前不一样)
10.2 插入排序
直接插入排序 希尔排序
10.3 交换排序
冒泡排序 快速排序
10.4 选择排序
简单选择排序 堆排序
10.5 归并排序
归并排序
第十一章 外部排序
第十二章 文件
数据结构(c语言版)文摘的更多相关文章
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...
- 【数据结构(C语言版)系列二】 栈
栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...
- 深入浅出数据结构C语言版(5)——链表的操作
上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...
- 深入浅出数据结构C语言版(8)——后缀表达式、栈与四则运算计算器
在深入浅出数据结构(7)的末尾,我们提到了栈可以用于实现计算器,并且我们给出了存储表达式的数据结构(结构体及该结构体组成的数组),如下: //SIZE用于多个场合,如栈的大小.表达式数组的大小 #de ...
- 【数据结构(C语言版)系列三】 队列
队列的定义 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开.在队列中,允许插入的一端叫做队尾(rear),允许 ...
随机推荐
- anrdroid AVD启动不起来的问题。Waiting for HOME ('android.process.acore') to be launched
Waiting for HOME ('android.process.acore') to be launched 卡在这里了. 可以到sdk mananager里面先启动起来AVD,然后在eclip ...
- Servlet技术基础
由于Servlet部分涉及较多的类,要想尽快掌握Servlet基础,必须熟悉使用这些类之间的关系以及其常用的方法. 主要讲解部分包括: 1)通过实现Servelt接口来编写Servlet 2)熟悉Se ...
- wamp安装后无法正常启动(80端口被占用)
关于wamp启动是80端口被占用的问题详解(win7系统下WAMP 80端口被Microsoft-HTTPAPI/2.0占用的解决办法) VS2010在更新了SP1后,会在开机时自动启动一个服务,占用 ...
- hudson插件说明
Artifactory Plugin:maven仓库管理工具 Backup plugin 可以备份hudson_home下所有文件,除了svncode.这个插件有问题,不能使用. Build Publ ...
- [JS]常用特效js插件
网站一:http://www.superslide2.com/ function set_a_title(n) { var t = $.trim($(n).text()); t && ...
- Jenkins集成selenium
目的:将selenium用例集成到Jenkins,需要执行时,只需要执行curl命令即可. 1.准备selenium测试脚本 from selenium import webdriver import ...
- 寒武纪-1005 Travel(树形DP)
一.题目链接 http://aiiage.hustoj.com/problem.php?id=1005 二.题面 PDF:http://aiiage.hustoj.com/upload/file/20 ...
- Android BroadcastReceiver 的简单实现
参考:http://yangguangfu.iteye.com/blog/1063732 BroadcastReceiver的实现不难,其实就是三部曲:注册,接收,发送. 但有一点较疑惑的是:当我启动 ...
- ubantu环境下fidder安装
转自:http://www.cnblogs.com/jcli/p/4474332.html Linux(Ubuntu)环境下使用Fiddler 自己的开发环境是Ubuntu, 对于很多优秀的软件但是又 ...
- Supervisor安装与配置
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统 ...