![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
flying_fish_233
真诚做人,认真做事
展开
-
最小生成树
问题描述:已知有n个城市,现要在n座城市之间建立道路,使n座城市相互连通(任意两座城市之间造路的代价已知)。求满足要求的最小代价。问题分析:构造最小生成树,求出各边权值和即为所求。最小生成树有如下两种经典算法,都用到了一种简称为MST的性质:N=(V,{E})是连通网络,U是V的一个子集,若存在(u,v)是一条具有最小权值的边,且u属于U,v属于V-U。则(u,v)必包含在最小生成树中。Prim算法原创 2015-03-11 15:42:00 · 470 阅读 · 0 评论 -
广义表的基本操作
广义表的基本操作: (1)创建广义表 (2)获取广义表的长度 (3)获取广义表的宽度 (4)打印广义表 (5)复制广义表# include<stdio.h># include<string.h># include<malloc.h># define MAX 100typedef struct lnode{ int tag; union{ struct原创 2016-01-05 19:13:46 · 1433 阅读 · 0 评论 -
并查集
/*功能:并查集的算法和实现作者:pussy日期:2015-12-21*/# include<stdio.h># include<malloc.h>//并查集节点类型定义typedef struct{ int data;//节点对应的数据 int parent;//节点的双亲下标 int rank;//节点的秩(用来表示以该节点为根节点的子树的高度)}UFSTr原创 2015-12-01 17:10:07 · 406 阅读 · 0 评论 -
线段树
定义 线段树是一颗二叉树,它将区间划分成若干个[i,i+1]的单元区间,每个单元区间对应于二叉树中的一个叶子节点。每个节点用一个变量cover来记录覆盖该节点的线段的条数。 设根为[a,b]的线段树记为T(a,b),区间的长度b-a为L(atypedef struct LineNode{ int left,right;//表示区间[left,right] int cover;//原创 2015-11-30 21:42:11 · 402 阅读 · 0 评论 -
哈夫曼编码
/*功能:(1)构建哈夫曼树 (2)获取哈夫曼编码 (3)计算带权路径长度作者:pussy日期:2015-11-29*/# include<stdio.h># include<stdlib.h># define MAX 100# define INF 65535typedef struct BiNode{ char data[MAX]; int we原创 2015-11-29 21:41:37 · 9515 阅读 · 0 评论 -
二叉树基本操作(输出所有叶子节点到根节点的路径)
/*功能:(1)输出二叉树的所有叶子节点 (2)输出所有从叶子节点到根节点的路径 (3)输出(2)中最长的一条路径作者:pussy日期:2015-11-28*/# include<stdio.h># include<malloc.h>typedef struct BiNode{ char data; struct BiNode *lchild,*rch原创 2015-11-28 16:53:39 · 21212 阅读 · 8 评论 -
二叉树的一些基本操作(括号表示法,宽度,深度,结点个数,叶子节点个数)
问题描述 (1)根据二叉树的括号表示法建立二叉树 (2)根据二叉树获取其括号表示法字符串 (3)输出二叉树的深度 (4)输出二叉树的宽度 (5)输出二叉树的结点的个数 (6)输出二叉树叶子结点的个数代码/*功能:(1)根据二叉树的括号表示法建立二叉树 (2)根据二叉树获取其括号表示法字符串 (3)输出二叉树的深度 (4)输出二叉树的宽度原创 2015-11-23 21:11:01 · 8301 阅读 · 0 评论 -
二叉树重建(二)
问题描述二叉树重建(根据后序和中序遍历序列获取先序遍历序列)主要算法先建树->先序遍历 建树算法:二叉树的后序遍历序列的最后一个元素是二叉树的根。根据这个元素结合中序遍历序列可以将二叉树划分为左子树、根、右子树。再通过后序遍历倒数第二个元素将左子树或者右子树划分成更小的左子树、根、右子树。如此下去,逆序扫描后序遍历序列,不断的划分子树。代码/*功能:二叉树重建(根据后序遍历和中序遍历获取二叉树的原创 2015-11-22 16:01:21 · 315 阅读 · 0 评论 -
二叉树重建(一)
/*功能:二叉树重建(根据先序遍历和中序遍历获取二叉树的后序遍历)作者:pussy日期:2015-11-21*/# include<stdio.h># include<malloc.h># include<string.h># define MAX 100char pre[MAX];int i=0;typedef struct BiTNode{ char data;原创 2015-11-21 20:09:39 · 266 阅读 · 0 评论 -
栈的应用之表达式求值(算符优先法)
为了简化问题,我们只考虑+、-、*、/四种运算,他们的优先级规则: (1)先乘除,后加减 (2)从左算到右 (3)先括号内,再括号外为了实现算符优先算法,需要两个工作栈,一个用来存放操作数(CZS),一个用来存放运算符(YSF)。 算法的基本思想: (1)首先置操作数栈、运算符栈均为空,将‘#’压入运算符栈。 (2)依次读入表达式中的每个字符,如果是操作数则直接压入操作数栈(当然,操作数原创 2015-10-30 16:11:39 · 7477 阅读 · 3 评论 -
迷宫求解(栈的应用)
先上代码#include<stdio.h>//迷宫,0表示墙,1表示通道int maze[10][10]={{0,0,0,0,0,0,0,0,0,0}, {0,1,1,0,1,1,1,0,1,0}, {0,1,1,0,1,1,1,0,1,0}, {0,1,1,1,1,0,0,1,1,0},原创 2015-10-28 20:35:06 · 461 阅读 · 0 评论 -
二叉树的建立和遍历(递归、非递归)
从二叉树的遍历的定义可知,3种遍历算法的不同之处在于访问根节点和左右子树的先后关系。如果在算法中暂时忽略访问根节点的printf语句,则3种遍历算法完全相同。因此,从递归执行的角度来看,先序、中序和后序遍历是完全相同的。上图中的用带箭头的虚线表示这3种遍历算法执行的过程。其中,向下的箭头表示更深一层的递归调用,向上的箭头表示从递归调用退出返回;虚线旁的三角形、圆形和方形内的字符分别表示先序、中序和后原创 2015-11-09 21:29:36 · 473 阅读 · 0 评论 -
平衡二叉树
#include<stdio.h>#include<malloc.h>typedef struct BSTNode{ int data; int bf;//平衡因子 struct BSTNode *lchild,*rchild;}BSTNode,*BSTTree;int InsertBST(BSTTree &T,int key,int &taller);void L_R原创 2015-03-19 16:45:02 · 346 阅读 · 0 评论 -
微软公司数据结构+算法面试题
1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode转载 2016-02-13 16:00:44 · 751 阅读 · 0 评论