![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
liuwxye
这个作者很懒,什么都没留下…
展开
-
多项式乘法与加法运算
#include "stdio.h"#include "stdlib.h"typedef struct PolyNode *Polynomial;struct PolyNode { int coef; int expon; Polynomial link;};void Attach(int c, int e, Polynomial *pRear){ Polyn原创 2017-08-17 17:40:03 · 334 阅读 · 0 评论 -
平衡二叉树的旋转
平衡二叉树(AVL树)的旋转主要包括左左,右右,左右,右左四种。1 左左typedef struct AVLNode *Position;typedef Position AVLTree; /* AVL树类型 */struct AVLNode{ ElementType Data; /* 结点数据 */ AVLTree Left; /* 指向左子树 */ AVLTr原创 2017-08-28 22:10:07 · 687 阅读 · 0 评论 -
二叉查找树
1.最值Position FindMin(BinTree BST) //找最小值 { if(BST) return NULL; else if(!BST->Left) return BST; //找到最左边 else return FindMin(BST->Left); }Position FindMin(BinTree BST)原创 2017-08-26 21:37:00 · 195 阅读 · 0 评论 -
有权图的最短路径
有权图的最短路径,同样也有单源最短路径算法和多源最短路径算法。1.有权图单源最短路径算法(Dijkstra算法,不考虑负值圈)。 核心思路是:按照递增(非递减)的顺序找到各个顶点的最短路。 把顶点集合V分成两组: (1)S:已求出的顶点的集合(初始时只含有源点V0) (2)V-S=T:尚未确定的顶点集合 将T中顶点按递增的次序加入到S中,保证: (1)从源点V0到S中其他各顶点的长度都原创 2017-09-21 20:25:56 · 2199 阅读 · 0 评论 -
六度空间
六度空间可以通过广度优先搜索算法实现。对每个结点进行广度优先搜索搜索过程累计访问结点的个数记录访问层数,即直接相关的为1层,共6层。void SDS(){ for(each V in G){ count = BFS(V); //由BFS返回个数 print count/N; //百分比 }]在BFS函数中,每访问一个结点,就将原创 2017-09-08 16:33:03 · 1589 阅读 · 0 评论 -
集合运算
集合运算的方法可以运用到很多场景,比如说等式的传递性,信息的传递等。1.查找某个元素所在的集合经典的有: 以下数相连:1和2,2和4,4和5,4和7,5和8,6和9,6和10,问2和7之间,5和9之间是否相连?typedef struct{ ElementType Data; int Parent;}SetType;int Find(SetType S[ ], Elem原创 2017-08-31 22:39:48 · 208 阅读 · 0 评论 -
堆中的路径
要求输入n个数,打印m次(从结点开始打印,指导根节点) 例如: 输入 5 3 36 25 10 38 24 5 4 3 打印 36 24 10 38 24 10 25 10#include "stdio.h"#define MAXN 1001#define MINH -10001int H[MAXN], size;void Create(){ size = 0;原创 2017-09-02 21:17:40 · 188 阅读 · 0 评论 -
集合(树)连通
#include "stdio.h"typedef int ElementType; /*默认元素可以用非负整数表示*/typedef int SetName; /*默认用根节点的下标作为每个集合名称*/typedef ElementType SetType[MaxSize]; /*每个素组的元素保存其父节点的值*/SetName Find( SetType S, Ele原创 2017-09-02 21:33:52 · 358 阅读 · 0 评论 -
无权图的最短路径
无权图的最短路径可以分为单源最短路径和多源最短路径。 无权图单源最短路径:从某个固定点出发,求其到所有其他定点的最短路径。 无权图多源最短路径:求任意两个结点之间的最短路径。单源最短路径算法,其实就是通过按照递增(非递减)的顺序找到各个定点的最短路;换个角度思考,就是通过BFS(广度优先搜索),算出每一层的最短路径。例如,先计算V结点的邻接点的最短路径,之后再计算V结点每一个邻接点W1,W2,W原创 2017-09-21 17:54:54 · 3584 阅读 · 0 评论 -
Complete Binary Search Tree
基本思路,完全二叉树有这么一个性质,如果二叉树的root从下标为0的位置开始,若a节点的下标为i,那么它左儿子的下标为2i+1。右儿子为2i+2。(下标从1开始的话,左儿子的下标为2i,右儿子为2i+1)。 这个下标则为完全二叉树在层序遍历时的输出顺序。而对于任意一棵搜索树,其中序遍历的输出,是一个递增的数列。根据这两个性质,可以有如下算法。首先,将输入的数列递增排序,会用到sort函数将输入的数原创 2017-09-12 22:13:16 · 254 阅读 · 0 评论 -
图的边
数据结构中图是一个抽象的概念。 如果实际问题中,已经告诉我们哪些点是联通的,哪些点是不联通的了,我们处理的过程中无法判断,需要寻找最优的解决方案(如地图上的最短路径)或是特定值(迷宫出口),则需要边,然后通过遍历来确定哪些点是联通(可行)的。 而还有一种情况是如果任何两个点都可以实现联通(不需要判断),又或者已经通过函数进行判断了,则不需要“边”。#include<bits/stdc++.h>原创 2017-09-05 21:02:29 · 757 阅读 · 0 评论 -
查找
静态查找:无“哨兵”查找typedef struct LNode* List;struct LNode{ ElementType Element[MaxSize]; int length;};int SequentialSearch(List Tb1,ElementType k){ int i; for(i=Tb1->length;i>0 && Tb1->El原创 2017-08-17 19:45:47 · 152 阅读 · 0 评论 -
二叉树后序遍历的非递归实现方法
实现二叉树的后序遍历,不用递归,简单的有两种方法。方法一是通过在树节点设置一个标记,通过访问次数的标记Visit(初始化为0)来判断输出。void PostOrderTraversal(BinTree BT){ Stack S = CreateStack(); BinTree T = BT; while(T || !IsEmpty(S)){ T->visit原创 2017-08-20 21:18:50 · 1106 阅读 · 0 评论 -
树的同构
struct TreeNode{ ElementType Element; Tree left; Tree right;}T1[MaxTree],T2[MaxTree];//建二叉树Tree BuildTree(struct TreeNode T[]){ int N; scanf("%d",&N); if(N){ for(i=0;原创 2017-08-21 22:22:35 · 210 阅读 · 0 评论 -
邻接矩阵建立图
通过构造N阶矩阵(二维数组),每个数组的元素存放边的权重。图结点和边都通过结构体构造。 其中,通过边结点(定义一个作为缓存结点,每次通过该结点保存边的起点,终点,权重 ),将数据通过函数保存到图结点中即可。/* 图的邻接矩阵表示法 */#define MaxVertexNum 100 /* 最大顶点数设为100 */#define INFINITY 65535 /* ∞设为双翻译 2017-09-03 22:24:00 · 785 阅读 · 0 评论 -
邻接表建立图
/* 图的邻接表表示法 */#define MaxVertexNum 100 /* 最大顶点数设为100 */typedef int Vertex; /* 用顶点下标表示顶点,为整型 */typedef int WeightType; /* 边的权值设为整型 */typedef char DataType; /* 顶点存储的数据类型设为字符型翻译 2017-09-03 22:25:27 · 405 阅读 · 0 评论 -
二叉树已知(中序+一序)求另一序
#include #include using namespace std;char pre[50] = "ABDHLEKCFG"; //前序序列char mid[50] = "HLDBEKAFCG"; //中序序列char post[50] = "LHDKEBFGCA"; //后序序列typedef struct _Node{翻译 2017-08-21 22:24:06 · 186 阅读 · 0 评论 -
图的遍历
图的遍历主要有深度优先搜索(DFS)和广度优先搜索(BFS)。DFS/* 邻接表存储的图 - DFS */void Visit( Vertex V ){ printf("正在访问顶点%d\n", V);}/* Visited[]为全局变量,已经初始化为false */void DFS( LGraph Graph, Vertex V, void (*Visit)(Vertex) )原创 2017-09-04 21:33:31 · 241 阅读 · 0 评论 -
堆(heap)
堆:优先队列,取出元素的顺序根据元素的优先级,而非进入队列的先后顺序。#include "sdtio.h"#include "stdlib.h"typedef struct HeapStruct *MaxHeap;struct HeapStruct{ ElementType *Elements; int Size; int Capacity;}/* 最大堆的创建 */原创 2017-08-30 21:38:44 · 301 阅读 · 0 评论 -
BFS和DFS的比较
DFS和BFS的时间复杂度是相同的,没有优劣之分,只是视不同情况选择不同算法。 深度优先算法适合目标比较明确,以找到目标为主要目的的情况; 广度优先算法适合在不断扩大遍历范围时找到相对最优解的情况。在图中:如果按边的权重寻找: 比如最短路径之类的问题,首先找到距离起始点权重为1的点,之后找到权重为2的点…以此类推直至选找到最短的距离,这实质上就是BFS的一种变形。如果按邻接点寻找: 比如原创 2017-09-09 20:29:29 · 2726 阅读 · 0 评论