数据结构
Timplan
这个作者很懒,什么都没留下…
展开
-
最大堆和堆排序
最大堆#define maxdata 10000000struct heapstruct{ elementtype *elements; //存储堆元素的数组 int size; //堆的当前元素个数 int capacity; //堆的最大容量 };最大堆的建立struct heapstcuct *create(int maxsi...原创 2018-09-24 15:08:14 · 263 阅读 · 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 · 182 阅读 · 0 评论 -
邻接表建立图
#include <iostream>typedef int vertex; //用顶点下标表示顶点 typedef struct adjvnode * ptrtoadjvnode;struct adjvnode{ vertex adjv; //邻接点下标 weighttype weight; //边权重 ptrtoadjvno...原创 2018-10-31 22:49:35 · 1323 阅读 · 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 · 130 阅读 · 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 · 193 阅读 · 0 评论 -
归并排序 递归算法
数组排序任务可以如下完成:(1):将前一半排好序(2):将后一半排好序(3):把两半归并到一个新的有序数组中,然后再拷贝回原来的数组,排序完成利用递归思想将数组一直划分为要排序的另一半,最后就回将问题化简为相邻两个数的排序,然后将排好序的数组归并到一个数组中,然后继续向上递归直至排序完成。 int a[10]={15, 18, 45, 96, 23, 58, 75, 1, ...原创 2018-10-23 22:51:49 · 2361 阅读 · 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 · 422 阅读 · 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 · 1565 阅读 · 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 · 268 阅读 · 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 · 179 阅读 · 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 · 359 阅读 · 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 · 1320 阅读 · 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 · 117 阅读 · 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 · 166 阅读 · 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 · 159 阅读 · 0 评论