数据结构
phoenix8956
这个作者很懒,什么都没留下…
展开
-
堆C语言实现5.1
typedef struct HNode *Heap; /* 堆的类型定义 */ struct HNode { ElementType *Data; /* 存储元素的数组 */ int Size; /* 堆中当前元素个数 */ int Capacity; /* 堆的最大容量 */ }; typede转载 2017-04-04 15:16:02 · 821 阅读 · 0 评论 -
图的遍历之DSF深度优先算法6.2.1(网络整理)
图的遍历之深度优先算法伪代码描述(和树的前序遍历相似,实际上树可以看成特殊的图:N个顶点有N-1条边,不曾在回路!即树是图连通中最少边的情况)图片来自网络如上图:深度优先遍历:先选取一个顶点访问它,然后深度优先遍历它的每个未访问的邻接点#include#include#include#define MaxVertexNum 100 /* 最大顶点翻译 2017-04-20 08:00:43 · 4602 阅读 · 0 评论 -
归并排序之有序子列的归并9.4.1
已知数组a有两个有序的子列挨在一起,l为左边子列的起始下标,r为右边子列的起始下标,rend为右边子列的终点下标,以下算法将整个a变为有序子列void Merge(ElementType a[],ElementType tmpa[],int l,int r,int rend){int len=rend-l+1;//整个数组长度int lend=r-1;//左边的终点下标int tmp=l原创 2017-05-03 15:13:51 · 293 阅读 · 0 评论 -
归并排序之递归排序9.4.2
#include#include#include#includetypedef int ElementType;void Merge(ElementType a[],ElementType tmpa[],int l,int r,int rend){//有序子列的归并int len=rend-l+1;int lend=r-1;int tmp=l;while(l<=lend&&r<=原创 2017-05-03 15:09:25 · 301 阅读 · 0 评论 -
3.14(c程序实现)已知二叉树的前序遍历和中序遍历,求后序遍历
伪代码描述见下图(来自网络)那么开始码代码了#include#include#include#includetypedef int Ele;typedef struct N{ Ele *pre; Ele *in; Ele *post; int length;}Node;Node createNode(int n){Node node;node.length=原创 2017-04-16 07:26:10 · 957 阅读 · 0 评论 -
插入排序和希尔排序9.2.1
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 void InsertionSort( ElementType A[], int N ) { /* 插入排序 */ int P, i; ElementType Tmp; for (原创 2017-05-02 08:02:53 · 276 阅读 · 0 评论 -
选择排序和堆排序9.3.1
选择排序伪代码堆排序:以上图片均来自网络截图以下代码来自百度知道#include#include#include void Swap( ElementType *a, ElementType *b ) { ElementType t = *a; *a = *b; *b = t; } void Per原创 2017-05-02 09:31:40 · 270 阅读 · 0 评论 -
简单排序冒泡排序和插入排序9.1.1
N个元素的冒泡排序:冒泡排序每一趟比较无序序列相邻的两个元素,如果前一个元素小于后者就交换,一趟下来最大的元素排在最后---这样无须序列元素少一个,有序序列元素多一个,当进行N-1趟这样的操作后整个序列就变为有序序列。#include#include#includetypedef int EleType;void swap(EleType *a,EleType *b){//交换两元素位原创 2017-05-01 18:53:39 · 232 阅读 · 0 评论 -
拓扑排序,数据结构学习笔记8.1.4
/* 邻接表存储 - 拓扑排序算法 */ bool TopSort( LGraph Graph, Vertex TopOrder[] ) { /* 对Graph进行拓扑排序, TopOrder[]顺序存储排序后的顶点下标 */ int Indegree[MaxVertexNum], cnt; Vertex V; PtrT转载 2017-05-01 13:40:58 · 390 阅读 · 0 评论 -
图的遍历之BSF广度优先算法6.2.2(网络整理)
图的广度优先遍历和树的层序遍历相似,伪代码见下图:原创 2017-04-20 08:16:45 · 2567 阅读 · 0 评论 -
归并排序之循环归并排序9.4.3
借记卡转载 2017-05-03 15:28:03 · 380 阅读 · 0 评论 -
桶排序升级之基数排序c语言实现10.1.2
上一篇介绍了不稳定的快速排序,这回介绍基数排序基数排序是基于分配策略的排序,不是一种比较排序,不受到 O(n log n) 下限的影响,是一种稳定的排序算法,并且它可以应用于多关键字排序。次位优先基数排序先按照优先级别最低的位对序列进行排序,下一步按照稍高优先级的位对序列进行排序,直到最高位时候整个序列就是有序序列主位优先基数排序先按照优先级最高的位对序列进行排序,原创 2017-05-06 10:03:27 · 737 阅读 · 0 评论 -
3.16(c程序实现)特殊的平衡二叉搜索树之完全二叉搜索树
#include #include int b[1005]; int j=0; int compare(const void * a, const void * b); void mid_tre(int root,int N,int a[]); int main(){原创 2017-04-26 11:02:53 · 248 阅读 · 0 评论 -
散列表冲突解决方法11.1.3
常用的解决思路: 1、换个位置:开放定址法 数组结构 #define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */ typedef int ElementType; /* 关键词类型用整型 */ typedef int Index; /* 散列地址类型 */ typedef Index Position;转载 2017-05-17 07:54:50 · 437 阅读 · 0 评论 -
散列函数的构造方法11.1.2
一个好的散列函数一般要考虑以下两个因素:1、计算简便,以便提高转换速度 2、关键词对应的地址空间分布均匀,以尽量减少冲突散列函数的常用方法关键词为数字1、直接定址法取关键词的某个线性线性函数作为散列地址,即h(key)=axkey+b,比如统计1949年成立以来的司令身份,h(key)=key-1949.2、除留余数法:h(key)=key mod p 一般p=tablesize=素数 以使对原创 2017-05-17 06:58:41 · 529 阅读 · 0 评论 -
多源有权图的最短路径 floyd算法(动态规划能解决负权边)7.1.3
核心代码只有5行呀for(int k=0;kNv;k++) for(int i=0;iNv;i++) for(int j=0;jNv;j++) if(dist[i][j]>dist[i][k]+dist[k][j])//只要通过中转点能使两点距离变小就更新 { dist[i][j]=dist[i][k]+dist[k][j原创 2017-04-25 09:13:54 · 1919 阅读 · 0 评论 -
单源有权图的最短路径 Dijkstra算法(证明不能解决负权边)7.1.2
单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。 Dijkstra算法假设存在G=,源顶点为0,U={0+已确定的最短路径顶点},dist[i]记录顶点0到顶点i的最短距离(包括确定的和估算的),path[i]记录从0到i路径上的i前面的一个顶点。U中收录的是已确定的最短路径顶点,比如2被U收录的话就代表dist[2]的值就是顶点0到顶点2的最短路径,后面操作不需要原创 2017-04-22 07:49:37 · 3216 阅读 · 0 评论 -
快速排序-c语言实现10.1.1
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快原创 2017-05-06 07:01:38 · 4585 阅读 · 0 评论 -
散列表简介11.1.1
编译处理时候涉及到变量及属性的管理,动态查找管理插入:新变量查找:变量的引用如果利用查找树(搜索树)进行变量管理:两个变量名(字符串)比较效率不高目前已经知道的原创 2017-05-14 21:20:30 · 209 阅读 · 0 评论 -
多关键字排序-oj考试排名10.1.3
考试排名 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3445 Accepted Submission(s): 1249Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点。它的功能转载 2017-05-12 07:43:22 · 887 阅读 · 0 评论 -
最小堆的应用之哈弗曼树5.2
哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度的乘积之和。哈弗曼编码是它的重要应用,哈弗曼编码是一种无前缀编码。假设计算机世界里文字只由由A、B、C、D、E四个字符组成,它们出现的频率分别为5,4,3,2,1,那么我们第一步先取两个最小权值作为左右子树构造一个新树,即取1,2构成新树,其结点为1+2=3,原创 2017-04-06 12:46:07 · 482 阅读 · 0 评论 -
二叉搜索树的创建,插入式创建4.1
/**任何一个结点的值域都比它的右子树小,比它的左子树大,我们叫它二叉搜索树**/#include#include#includetypedef int Ele;typedef struct Node{Ele e;struct Node *left;struct Node *right;}*Tree,*TNode;//Tree insert(Tree t,Ele e){if原创 2017-04-01 19:11:44 · 242 阅读 · 0 评论 -
最大子序列和-数据结构学习笔记1.3(基本概念)
给定一个整数序列,a0, a1, a2, …… , an(项可以为负数),求其中最大的子序列和。如果所有整数都是负数,那么最大子序列和为0;例如:对于序列-2, 11, -4, 13, -5, –2。 所求的最大子序列和为20(从11到13,即从a1到a3)。方法一:对所有的子序列求和,在其中找到最大的int MaxSubseqSum1( int List[], int原创 2017-03-25 12:27:54 · 444 阅读 · 0 评论 -
什么是算法-数据结构学习笔记1.2(基本概念)
算法定义:1、一个有限指令集!2、接受一些输入(有时候可以无输入)3、产生输出4、一定在有限步骤后终止其中每条指令必须:1、目标要明确,不可有歧义2、计算机能处理的范围3、描述不依赖于任何语言和机器好的算法衡量标准时间方面:时间复杂度空间方面:空间复杂度原创 2017-03-25 11:03:03 · 371 阅读 · 0 评论 -
什么是数据结构-数据结构学习笔记1.1(基本概念)
我们常常上网查询学C以后学什么,网山有很多回答,但是不管什么回答,都会提到数据结构!没学透数据结构之前我认为就是一群老外为了提高逼格提出的一个绕晕你的概念,后来听到一个笑话,就是关于一个程序员要求写一个实时排队系统,结果他不到十分钟就写完了,就是来一个人插入数据库,走一个人从数据库里面删除,然后他高兴的给了老板它的方案,然后他老板大喊一声“你数据结构怎么学的”。一什么是数据结构数据结构原创 2017-03-24 17:49:40 · 705 阅读 · 0 评论 -
二叉树的表示链式表示和顺序存储3.0
(一)二叉树的链式表示1普通链表,其中一个结点表示如下typedef int Elem;struct Node{Elem data;struct Node *left;struct Node * right;}2静态链表typedef Ele int;typedef postion int;typedef strcut{Ele data;postion le原创 2017-03-31 08:40:13 · 746 阅读 · 0 评论 -
二叉树的非递归遍历之后序遍历
在上一篇中二叉树的非递归遍历我已经完成了中序和前序遍历,模拟的是他们吧遍历的方向,如果把遍历路线逆过来,我们输出第一次遇到的结点,结果可以看到为前序遍历的逆向顺序!因此我们把输出的地方再压如另一个堆栈就可以解决了#include #include typedef char Ele; typedef struct Node { Ele data; struct Nod原创 2017-03-30 20:15:16 · 196 阅读 · 0 评论 -
二叉树的非递归遍历3.1.1
/* 树的递归创建 */ #include #include typedef char Ele; typedef struct Node { Ele data; struct Node *left; struct Node *right; }*T,*lnode; /*按照先序遍历创建树ABDG##H###CE#I##F## */原创 2017-03-30 17:28:04 · 242 阅读 · 0 评论 -
二叉树的递归创建和递归遍历3.1
/*树的递归创建*/#include#includetypedef char Ele;typedef struct Node{Ele data;struct Node *left;struct Node *right; }*T,*lnode;/*按照先序遍历创建树ABDG##H###CE#I##F## */T createTree(){ T t; Ele tmp原创 2017-03-29 20:09:17 · 304 阅读 · 0 评论 -
一元多项式加法和乘法-数据结构学习笔记2.3-2.4
/* 1 一元多项式的用什么表示-----单链表,此处不带头结点的表示 2创建一元多项式,输入3 5 6 1 5 2 3表示三项多项式,系数分别为5,1,2指数分别为6,5,3---程序要求自动按指数从大到小排序 3完成一元多项式的加法 4完成一元多项式的乘法 5完成一元多项式的输出*/#include#include/*结点,多项式中的一项*/typedef struct N原创 2017-03-29 11:26:00 · 689 阅读 · 0 评论 -
判别两序列所对应两颗二叉搜索树是否相同之建立一颗树4.134
上一遍介绍了建立两棵树来判断序列是否是同一颗二叉树,这次建立一棵树来判断原创 2017-04-06 12:47:43 · 281 阅读 · 0 评论 -
线性表的两种实现方法-数据结构学习笔记2.1
typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Position Last; }; /* 初始化 */ List MakeEmpty() { List L;转载 2017-03-25 19:56:12 · 857 阅读 · 2 评论 -
判断二叉树是否同构3.13
#include#include#include/***/typedef char Ele;typedef struct Node{Ele e;struct Node *left;struct Node *right;}*Tree,*Tnode;Tree createTree(){char tmp;Tree t;scanf("%c",&tmp);if(tmp='#')原创 2017-04-01 16:37:18 · 943 阅读 · 0 评论 -
二叉搜索树的查找与删除4.12
二叉搜索树创建过后就开始查找和删除了/**任何一个结点的值域都比它的右子树小,比它的左子树大,我们叫它二叉搜索树**/#include#include#includetypedef int Ele;typedef struct Node{Ele e;struct Node *left;struct Node *right;}*Tree,*TNode;//Tree in原创 2017-04-02 08:46:42 · 176 阅读 · 0 评论 -
队列的顺序存储和链式表示方法-数据结构学习笔记2.3
1,顺序存储时我们常用循环队列,为了区分队列满和空,我们最多只用MAX-1个空间队列空:q->rear=q->front队列满:q->front=(q->rear+1)%MAX typedef int Position; struct QNode { ElementType *Data; /* 存储元素的数组 */ Position原创 2017-03-28 09:35:59 · 463 阅读 · 0 评论 -
最小生成树kruskal算法适合稀疏图(网络整理)8.1.3
#include#include#include#define MAXSIZE 100typedef int Weight;typedef char Datatype; typedef struct AdjVNode{Weight weight;int adjv;struct AdjVNode *Next;}*PtrToAdjVNode;typedef struct Vnod原创 2017-04-26 19:53:51 · 6862 阅读 · 0 评论 -
最小生成树prim算法适合稠密图(网络整理)8.12
#include #include /* 图的邻接矩阵表示法 */ #define MaxVertexNum 100 /* 最大顶点数设为100 */ #define INFINITY 65535 /* ∞设为双字节无符号整数的最大值65535*/ typedef int Vertex; /*原创 2017-04-26 19:45:29 · 8836 阅读 · 0 评论 -
集合的表示之并查集5.3
以上图片在自网络1、可用树结构表示集合,树的每个结点代表集合中一个元素。2、用树根代表这个集合。因此我们查某个元素属于哪个集合,实际就是查寻树中结点的根结点。因为我们只需要知道树中某个结点的父亲结点,因此我们可以用双亲表示法来表示树,我们可以选择链表或数组作为存储结构!//链表对应的一个元素结点类型typedef int Ele;struct Tnode{Ele原创 2017-04-05 19:13:28 · 379 阅读 · 0 评论 -
什么是最小生成树什么是贪心算法(基本概念)8.1.1
解决最小生成树常常用到贪心算法解决最小生成树的贪心算法有一下两种原创 2017-04-26 10:27:15 · 842 阅读 · 0 评论 -
C语言实现图的领接表表示6.1.2
/* 图的邻接表表示法 */ #define MaxVertexNum 100 /* 最大顶点数设为100 */ typedef int Vertex; /* 用顶点下标表示顶点,为整型 */ typedef int WeightType; /* 边的权值设为整型 */ typedef char DataType;转载 2017-04-12 11:59:44 · 659 阅读 · 0 评论