
数据结构
si_ma_tong_ming
谁把谁的明媚尽收眼底,
谁把谁的难过感同身受。。。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
背包问题总结
1.01背包 有n种物品,一个容量为c的背包,每种物品的体积是v,重量是w,且每种物品只有一件,可以选择放或者不放。求那些物品放入背包可以让背包重量最大。初始化问题:这里有两种情况1)恰好装满:这时就只有背包容量为0的可以被0个物品恰好装满,所以容量为零的背包初始化为0,其余的均不符合合法状态所以初始化为负无穷大。2)不要求恰好装满:这时每个容量的背包都有什么都不装的合法解所以初始化为0。例题:h原创 2017-03-28 14:54:49 · 401 阅读 · 0 评论 -
堆排序(大顶堆)
一:堆 堆可以看做一个完全二叉树,同时该完全二叉树满足双亲结点大于等于孩子结点(大顶堆),或者双亲结点小于等于孩子结点(小顶堆)。 二:堆排序(以大顶堆为例) 大顶堆产生顺序序列,小顶堆产生逆序序列。 已知序列[a0,a1,…,an]。测试序列为{5,9,3,7,6,5}; a)将序列初始化,从最后面的非叶子结点开始调整产生大顶堆。 b)原创 2017-05-16 16:51:04 · 9422 阅读 · 1 评论 -
二叉树的恢复
1.先序+后序//先序和中序恢复,a是先序序列,b是后序序列,n是结点个数 node * restore(char a[],char b[],int n) { if(n<=0) { return NULL; } node *root = new node(); root->data=*a; int i; for(i=0; i<原创 2017-03-26 21:06:44 · 483 阅读 · 0 评论 -
完全二叉树的简单应用
例题:http://acm.nyist.net/JudgeOnline/problem.php?pid=63 小猴子下落 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全原创 2017-03-25 11:03:47 · 1787 阅读 · 0 评论 -
二叉链表的基本操作
#include<iostream>using namespace std;struct node { node *lChild; node *rChild; char data; }; //先序递归创建树 node *createTree() { char ch; cin>>ch; node *root; if(ch=='#')原创 2017-03-25 10:49:16 · 1245 阅读 · 0 评论 -
二维树状数组
C[x][y] = ∑ a[i][j], 其中, x-lowbit(x) + 1 <= i <= x, y-lowbit(y) + 1 <= j <= y.二维树状数组的更新和求和函数:int lowbit(int x) { return x&(-x); }void update(int x,int y,int val) { for(int i=x; i<=原创 2017-03-23 21:47:58 · 284 阅读 · 0 评论 -
一维树状数组
树状数组是为了在数组元素更新后更快速的求某个区间的和 在使用如图所示的树状数组时,对于a[]数组并没有创建,而是只创建了c数组,c数组中的每个元素都有各自的管辖范围。 比如:c[1]=a[1];c[4]=a[1]+a[2]+a[3]+a[4];。。。 这里有一个主要的计算:x&(-x),这个表达式求的是x的最后一个1表示的值,比如:6的二进制表示为(0110),6&(-6)=2说这个主要是为了原创 2017-03-23 11:28:59 · 254 阅读 · 0 评论 -
链栈的基本操作
#include<iostream>using namespace std;struct node { int val; node *next; };node * push(node *top,int val) { node *p = new node(); if(p!=NULL) { p->val=val; p->next=t原创 2017-03-22 22:37:39 · 333 阅读 · 0 评论 -
链队列的基本操作
#include<iostream>using namespace std;struct QueueNode { int val; QueueNode *next; };struct QueueLink { QueueNode *front; //队头 QueueNode *rear; //队尾 };int Init(QueueLink *queue) {原创 2017-03-22 21:45:06 · 301 阅读 · 0 评论 -
链表的基本操作
#include<iostream>using namespace std;struct node { int val; node *next; };node *head,*q; //head是头结点,q指向链表最后一个结点 void Init() //初始化链表,头结点不存值 { head = new node(); q = head; }void Insert(原创 2017-03-22 20:23:47 · 251 阅读 · 0 评论 -
二叉查找树(BST)
二叉查找树(Binary Search Tree缩写:BST):也称二叉排序树,特征:1)如果左子树不为空,左子树的值小于对应的父节点;2)如果右子树不为空,右子树大于对应的父节点;也就是左<中<右;插入操作:类似二叉链表,就是在二叉链表的基础上加上判断条件typedef int dataType; typedef struct Node { dataType data; struc原创 2017-08-09 21:24:08 · 315 阅读 · 0 评论