
数据结构
Junieson
不放弃任何细小的疑惑,让我们一起学习
展开
-
数据结构(C)核心知识点+易错点+代码:栈和队列(建栈,入栈,出栈,建队,入队,出队,括号的匹配,判断字符串是否对称)
一.栈(被约束的线性表)1. 核心知识点(1)顺序栈相对于顺序表的定义用base-top代替length判空:S.topS.base判满:S.top-S.baseS.stacksize(2)链栈①.结构如何定义?每个节点的定义还是链表的定义,而后还有个栈的定义,不用stacksize,base,不用指向表尾②.如何初始化?malloc,逆序建立,s.top指向栈顶元素③....原创 2019-01-31 16:14:03 · 1900 阅读 · 0 评论 -
数据结构(C)必会知识总结:绪论
绪论一.怎样学数据结构?牢记基本概念和经典算法联系实际,富于联想总结算法之间的共性和特性。忌:求偏、求难、重算法轻概念。三阶段:模仿->总结->创新二.基本概念1.数据分类数据:信息的载体,是描述客观事物的数、字符及所有能输入到计算机中被计算 机程序识别和处理的符号的集合。数值性数据非数值性数据数据元素:数据的基本单位...原创 2019-01-28 17:27:35 · 336 阅读 · 0 评论 -
数据结构(C):拓扑排序和关键路径
1.拓扑排序AOV(Activity On Vertices)网:有向图表示工程,顶点表示活动,有向边<vi,vj>表示活动vi必须先于活动vj进行,其中vi是vj的直接前驱,vj是vi的直接后继。若从顶点vi到vk有一条路径,则vi是vk的前驱、vk是vi的后继;用途:描述工程项目或系统进行的次序拓扑排序:从一个AOV网中找出一条能表示所有事件先后次序的序列构造方法1:拓扑...原创 2019-02-03 16:41:53 · 1437 阅读 · 0 评论 -
数据结构(C)最短路径的Dijkstra算法和Floyd算法
1.最短路径:有向图中给定两个顶点间权值和最小的路径,如果从A不能到达B,则A到B的路径长度为无穷大。2.算法:①Dijkstra算法——从某一源点到其余各顶点的最短路径,O(n^2)②Floyd算法——每一对顶点之间的最短路径,O(n^3)Dijkstra(从已知最短路径扩大到目标最短路径)算法流程图文字描述:1.起点v0和其余每个顶点的路径(数组D)中取最小值,这这个最小值就是v...原创 2019-02-03 18:34:06 · 1386 阅读 · 1 评论 -
数据结构(C):二叉排序树的删除和调平
1.删除虽然,二叉排序树的插入都在叶子节点,但是删除却可以分为三种不同的情况;(1)删除的节点刚好是叶子结点——直接删除(2)删除的节点只有左孩子或者只有右孩子,直接让其唯一的那个孩子去替代父母的位置(如果24只有右孩子:不用担心24的右孩子会不会比24的父母还大,因为如果24右孩子比24父母(45)还大,那么在建树的时候就会放到45的右孩子上,所以,根的左子树上的所有节点都要比它小。)...原创 2019-02-03 19:59:50 · 3439 阅读 · 2 评论 -
数据结构(C):B-树的插入和删除
1.B-树B-树定义:一种平衡的多路查找树。用作索引组织文件,可减少访问外存次数,提高访问速度、减少时间。一棵m阶B-树或为空树,或满足下列特性:1、树中每个结点至多有m个子树;(结点中的关键字个数最多m-1)2、若根结点不是叶子结点,至少有两棵子树(根至少有一个关键字)3、除根结点外,其余非叶子结点至少有m/2(下取整)棵子树。(比关键字个数多一个)4.关键字的个数,范围是: m/2...原创 2019-02-03 21:01:51 · 6633 阅读 · 2 评论 -
数据结构(C):堆排序
1,堆排序堆排序:设堆中有n个元素,输出堆顶最大(小)值后,使剩余n-1元素重建成堆,得到n个元素的次大(小)值,反复执行,得到一个非递减(非递增)有序序列的过程。堆排序的步骤(1)初始建堆:从无序序列建成一个大顶堆,筛选:从堆顶到叶子结点的调整过程.对一棵左、右子树均为堆的完全二叉树,“调整” 从最后一个非终端结点即无序序列中第n/2(下取整)个元素开始。(2)输出堆顶元素后,调...原创 2019-02-03 21:32:24 · 1050 阅读 · 0 评论 -
数据结构(C):内部排序总结
1. 按平均的时间性能来分:(1)时间复杂度为O(nlog2n):快速排序、堆排序和归并排序;(2)时间复杂度为O(n2):直接插入排序、起泡排序和简单选择排序;(3)当待排记录按关键字有序,直接插入排序和起泡排序能达到O(n);而对快速排序是最不好的情况,时间性能蜕化为O(n2)。(4)简单选择排序、堆排序时间性能不随记录序列关键字的分布改变2、按空间性能分:指的是排序过程中所需的辅助...原创 2019-02-03 21:40:50 · 422 阅读 · 0 评论 -
数据结构(C)实验:hash表查找完整代码(配套严蔚敏版)
#include<stdio.h>#include<stdlib.h>#define TRUE 1#define ERROR 0#define SUCCESS 1#define UNSUCCESS 0#define DUPLICATE -1#define NULLKEY 0#define EQ(a,b) ((a)==(b))typedef int Stat...原创 2019-02-03 21:44:24 · 1479 阅读 · 1 评论 -
数据结构(C):最小生成树Prim算法和Kruscal算法
1.Prim算法(选点)思想:①设置一个点集合V,表示最小生成树中已经确定的点的集合;设置一个边集合U,表示最小生成树中已经确定的边的集合;(U和V是对应起来的),②在V中点,和剩余点中找权值最小的边,将边并入U,对应的另一个端点并入V.(注意在找边的时候避免和原来的边产生环)③重复步骤②,直到V中的顶点为所有的顶点,U中的边则为最小生成树上的边。时间复杂度O(n^2),适用于点少的图例...原创 2019-02-03 10:39:37 · 1268 阅读 · 0 评论 -
数据结构(C):线索二叉树的建立和遍历(附完整代码)
1.前序线索二叉树的遍历2.中序线索二叉树的遍历3.后序线索二叉树的遍历代码#define CHAR 1 /* 字符型 */#if CHAR typedef char TElemType; TElemType Nil=' '; /* 字符型以空格符为空 */#else typedef int TElemType; TElemType Nil=0; /* 整型以0为空...原创 2019-02-02 20:45:34 · 3138 阅读 · 0 评论 -
数据结构(C):以临接矩阵存和邻接表存储的无(有)向图的深度和广度遍历(附完整代码)
1.深度优先遍历思想:①从图中某个顶点V0 出发,访问此顶点。②依次从V0的各个未被访问的邻接点出发深度优先遍历图, 直至图中所有和V0有路径相通的顶点都被访问到。③若图中还有顶点未被访问(非连通图),另选图中一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。注:虽然由图形得出的深度遍历序列不唯一,但是对于给定的存储结构深度遍历序列唯一。如:在遍历图时,对图中...原创 2019-02-02 19:43:15 · 2870 阅读 · 0 评论 -
数据结构实验——用栈实现表达式的计算(C语言)
1.实验内容设计一个程序,演示用算符优先法对算术表达式求值的过程。以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。2.实验思路算法:3.代码(配套教材严蔚敏版)#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#define...原创 2019-01-31 16:28:07 · 12909 阅读 · 10 评论 -
数据结构(C)核心知识点+易错点:串
一,核心知识点1.定义串:由零个或多个字符组成的有限序列。记为: s=’a1a2a3……an’ (n>=0)**串名:**s串值: a1a2a3……an串长:n子串:串中任意个连续的字符组成的子序列任意串是其自身的子串 主串:包含子串的串。位置:字符在串中的序号称为该字符在串中的位置。空格串:由一个或多个空格组成的串,长度为空格个数。...原创 2019-02-01 14:01:13 · 1216 阅读 · 0 评论 -
数据结构(C)必会知识点+易错点:数组和广义表(n维数组地址计算公式,特殊矩阵对称矩阵的存储,广义表的表示方法)
一,n维数组地址计算公式ji表示n维数组中该元素在第i维中的坐标ai表示n维数组中第i维的起始坐标bi表示第i维度的长度L表示一个元素所占的字节数LOC(…)表示该坐标对应的存储中的地址(一维坐标)PS.对与简单的二维数组则①求出该数组前面有多少个元素(分清行主序还是列主序), ②第一个元素对应的地址加上前面所有元素的总字节数二,对称矩阵三,上(下)三角矩阵四, 对角矩阵...原创 2019-02-01 18:32:55 · 4662 阅读 · 1 评论 -
数据结构(C)核心知识点+易错点:二叉树(二叉树的先序,中序,后续遍历的递归和非递归算法,层序遍历算法)
一,二叉树1.二叉树的性质性质1:在二叉树的第i层上至多有2^i-1个结点(i&gt;=1)。性质2:深度为k的二叉树至多有2^k-1个结点(k&gt;=1).性质3:对任一棵二叉树,若其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。性质4:具有n个结点的完全二叉树的深度为log2n(下取整后) +1。注意性质3由性质树的节点数比数的边数多一(因为除了根节点,每个节点头上...原创 2019-02-02 12:38:18 · 3520 阅读 · 1 评论 -
数据结构(C)实验:哈夫曼编码和译码(附完整代码配套严蔚敏版教材)
1.实验内容(1)输入一段100—200字的英文短文,存入一文件a中。(2)写函数统计短文出现的字母个数n及每个字母的出现次数(3)写函数以字母出现次数作权值,建Haffman树(n个叶子),给出每个字母的Haffman编码。(4)用每个字母编码对原短文进行编码,码文存入文件b中。(5)用Haffman树对文件b中码文进行译码,结果存入文件c中,比较a,c是否一致,以检验编码、译码的正确...原创 2019-02-02 16:11:24 · 11857 阅读 · 10 评论 -
数据结构(C)实验:求叶子数,求深度,判断二叉树是否相等,二叉树左右孩子互换,判断二叉树是否为完全二叉树
1.求二叉树叶子树Status Leafamount(BiTree T){ int numl,numr; if(T==NULL) return 0; else if((T-&amp;gt;lchild==NULL)&amp;amp;&amp;amp;(T-&amp;gt;rchild==NULL)) { putchar(T-&amp;gt;data); printf(&quot;原创 2019-02-02 16:58:59 · 693 阅读 · 0 评论 -
数据结构(C)小技巧:Dev-C++怎么新建和调用用户自定义的头文件
在学习数据结构后发现所有的数据类型都是用typedef重定义的,初学数据结构的时候会有些不理解,总感觉有些繁琐,直到后面学的更加深入了,发现有时候你会用到之前学到的一些结构,比如栈,队列,线性表等,这时你会很自然第想到把之前写的那些定义呀声明呀直接拿过来用,发现在宏定义或者typedef定义的类型中只用改一下基本类型就可以互相通用了,是不是很方便呀,但是直接将其复制粘贴又太繁琐,那么小变今天就来告...原创 2019-02-02 17:53:44 · 22630 阅读 · 8 评论 -
池塘夜降彩虹雨C语言数据结构实验(免积分下载+超详细注释)
实验题目设计一个程序,演示美丽的“池塘夜雨”景色:色彩缤纷的雨点飘飘洒洒地从天而降,滴滴入水有声,溅起圈圈微澜。操作环境和条件VS2017,easyX图形库代码#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;conio.h&gt;//conio是Console Input/Output(控制台输入输出)的简...原创 2019-01-28 16:08:28 · 5385 阅读 · 4 评论 -
数据结构(C)必会知识点+易错点+代码:线性表(顺序表建立,删除,定位,合并;链表的正序,逆序建立,删除插入,逆置)
一.顺序表和链表的区别1.定义顺序表:地址连续,逻辑相邻则物理相邻,随机存取;链表:地址不连续,逻辑相邻物理不一定相邻,顺序存取;二,优缺点顺序表:易存取,找特定位置上的元素时间复杂度为O(1),难插入和删除(牵涉到移位);链表:难存取,找特定位置上的元素的时间复杂度为O(n),易插入和删除。共同点:在找特定关键字,两个表的合并,等需要遍历的操作时,二者时间复杂度相等 。三,注意...原创 2019-01-30 19:50:10 · 1689 阅读 · 0 评论