
数据结构
Timplan
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最大堆和堆排序
最大堆 #define maxdata 10000000 struct heapstruct { elementtype *elements; //存储堆元素的数组 int size; //堆的当前元素个数 int capacity; //堆的最大容量 }; 最大堆的建立 struct heapstcuct *create(int maxsi...原创 2018-09-24 15:08:14 · 312 阅读 · 0 评论 -
树 先序 中序 推出后序遍历
//prel:先序遍历数组开始元素下标位置 //inl:中序遍历数组开始元素下标位置 //postl:后序遍历数组开始元素下标位置 void solve(int prel ,int inl ,int postl ,int n) { if(n == 0) //如果要判断的数组中元素个数为0 则退出 { return ; } ...原创 2018-10-24 22:08:20 · 222 阅读 · 0 评论 -
邻接表建立图
#include <iostream> typedef int vertex; //用顶点下标表示顶点 typedef struct adjvnode * ptrtoadjvnode; struct adjvnode { vertex adjv; //邻接点下标 weighttype weight; //边权重 ptrtoadjvno...原创 2018-10-31 22:49:35 · 1374 阅读 · 0 评论 -
二叉搜索树
struct treenode { elementtype element; tree left; tree right; }; typedef struct treenode bintree; bintree Delete(elementtype x,bintree bst) { position tmp; if(!bst) pri...原创 2018-10-31 22:45:59 · 169 阅读 · 0 评论 -
0-1背包 动态规划
本题提供思想 看看你看完能不能写出来!!! 有N件物品和一个容积为M的背包。第i件物品的体积w[i],价值为d[i].求解将那些物体装入背包可是价值总和最大。每种物品只有一件,可以选择放或者不放。(N <= 3500, M <= 13000) 用F[i][j]表示取前i种物品,使他们的总体积不超过j的最优取法取得的价值总和。则要求F[N][M] 边界:if(w[1] <...原创 2018-10-23 23:05:33 · 264 阅读 · 0 评论 -
归并排序 递归算法
数组排序任务可以如下完成: (1):将前一半排好序 (2):将后一半排好序 (3):把两半归并到一个新的有序数组中,然后再拷贝回原来的数组,排序完成 利用递归思想将数组一直划分为要排序的另一半,最后就回将问题化简为相邻两个数的排序,然后将排好序的数组归并到一个数组中,然后继续向上递归直至排序完成。 int a[10]={15, 18, 45, 96, 23, 58, 75, 1, ...原创 2018-10-23 22:51:49 · 2607 阅读 · 0 评论 -
数字三角形 动态规划
用二维数组存放数组三角形; D(r, j):第r行第j个数字(r,jcing1开始算) MaxSum(r,j):从D(r, j)到底边的各条路径中,最佳路径的数字之和。 所以问题化成求MaxSum(1,1): D(r,j)出发,下一步只能走D(r+1, j)或者D(r, j+1) if(r ==N) MaxSum(r,j)= D(r, j); else MaxSum...原创 2018-10-22 21:48:10 · 484 阅读 · 0 评论 -
N皇后 递归算法
int n; int queenpos[100]; //用来存放算好的皇后位置。最左上角是(0.0) void nqueen (int k); int main() { cin >> n; nqueen(0); return 0; } void nqueen (int k) //在0~k~1行皇后已经摆好的情况下,摆第k...原创 2018-10-22 21:35:39 · 1621 阅读 · 1 评论 -
图 Floyd多源最短路径
多源最短路径 void floyd() { for(i = 0; i < n; i++) { for(j = 0; j < n; j++) { d[i][j] = g[i][j]; //g[i][j]是图的邻接矩阵 path[i][j] = -1; } ...原创 2018-10-22 21:25:52 · 330 阅读 · 0 评论 -
图 Dijkstra单源最短路径
有权图单源最短路径 int dist[w] = s到w的最短距离 int path[w] = s到w的路径经过的结点 memset(dist,/*正无穷*/,sizeof(dist)); memset(path,-1,sizeof(path)); void dijkstra(vertex s) { while(1) { v = //未收录的顶点中dist最小的 ...原创 2018-10-22 21:24:29 · 230 阅读 · 0 评论 -
图 无权图单源最短路径
int dist[w] = s到w的最短距离 int path[w] = s到w的路径经过的结点 memset(dist,-1,sizeof(dist)); memset(path,-1,sizeof(path)); dist[s] = 0; //调用s之前 void unweight(vertex s) { inqueue(q ,s); //将结点加入队列 w...原创 2018-10-22 21:20:28 · 418 阅读 · 0 评论 -
邻接矩阵建立图
邻接矩阵建立图 typedef struct gnode * mgraph; struct gnode { int nv; //顶点数 int ne; //边数 weighttype g[maxnum][maxnum]; datatype data[maxnum]; //存顶点的数据 }; typedef int vertex; //建...原创 2018-09-26 22:14:07 · 1395 阅读 · 0 评论 -
归并排序
int a[10]={15, 18, 45, 96, 23, 58, 75, 1, 52, 69}; int b[10]; void Merge(int a[], int s, int m, int e, int tmp[]) { //将数组a的局部a[s,m]和a[m+1,e]合并到tmp,并保证tmp有序,然后再拷贝回a[s,m] ...原创 2018-09-26 22:00:52 · 158 阅读 · 0 评论 -
树的遍历
先序遍历 void pretrversal(bintree t) { if(t) { printf("%d",t); pretraversal(t->left); pretraversal(t->right); } } 中序遍历 void midtrversal(bintree t...原创 2018-10-01 13:37:52 · 199 阅读 · 0 评论 -
哈夫曼树
哈夫曼树 struct treenode { int weight; struct treenode *left, *right; }; struct treenode *huffman(minheap h) { //假设h->size个权值已经存在h->elements[]->weight里 int i; struct treenode...原创 2018-10-24 22:47:05 · 212 阅读 · 0 评论