![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
爱吃鱼的喵996
这个作者很懒,什么都没留下…
展开
-
好理解的基于二叉树的0-1背包求解问题
问题描述:给定n(n<=100)种物品和一个背包。物品i的重量是wi,价值为vi,背包的容量为C(C<=1000)。问:应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有两个选择:装入或不装入。不能将物品i装入多次,也不能只装入部分物品i。输入样例1:在这里给出一组输入。例如:5 102 62 36 55 44 6输出样例1:15输入样例2:6 6015 3217 3720 4612 269 2114 30原创 2020-12-05 10:48:41 · 941 阅读 · 0 评论 -
数据结构 常用排序算法的想法
冒泡排序#include<iostream>using namespace std;/* 完成冒泡排序 输入参数:r为一维数组,n为数组长度 返回值:void*/void BubbleSort(int *r, int n){ bool change = true; int temp; for(int i=0; i<n&&change; i++){ change = false; for(int j=0; j<n-i; j++){ i原创 2020-11-12 18:32:09 · 215 阅读 · 0 评论 -
数据结构 哈希法的想法
二分法查找、二叉排序树、B树等这些查找算法,本质上是记录在列表中的相对位置是随机的。记录与关键字的大小没有直接关系。这就导致查找的效率依赖于查找过程中对关键字所进行的比较次数。由此提出另一种新的算法——哈希法,负责解决因为与关键字比较次数过多而影响查询效率的问题。哈希法哈希法(又称散列法、杂凑发、关键字地址计算法,由哈希法生成的表又称为哈希表、散列表、杂凑表等)。基本思想:首选在元素的关键字k和元素的存储位置p之间建立一个对应关系H,使得 p = H(k),H称为哈希函数。创建哈希表的时候原创 2020-11-07 10:35:55 · 591 阅读 · 0 评论 -
数据结构 B树、B+树、B*树的想法
在此之前,我们需要先了解一下二叉排序树和平衡二叉排序树的思想和性质。m叉排序树现在我们将二叉排序树升级到—— “m叉排序树”,这个也叫m路查找树。m叉排序树满足以下性质:① 结点最多有m棵子树,m-1个关键字,其结构如下图:其中,n为关键字个数,Pi (0 <= i <= n) 为指向子树根结点的指针,Ki (1 <= i <= n) 为关键字。② K(i) < K(i+1),1 <= i <= n-1③ 子树Pi 中的所有关键字均大于Ki,小于K(原创 2020-11-05 18:42:01 · 351 阅读 · 0 评论 -
数据结构 平衡二叉排序树有话说
平衡二叉排序树又称AVL树。平衡二叉排序树性质:① 左右子树的高度之差的绝对值小于等于1。② 左右子树也是平衡二叉排序树。平衡二叉排序树比普通的二叉排序树查询效率要高。平衡因子:结点的左子树深度与右子树深度之差。对于一棵平衡二叉排序树,其所有结点的平衡因子只能是-1、0或1。求平衡二叉排序树各结点因子:每个结点旁边的数字就是每个结点的平衡因子。计算过程:如A结点,它的左右子树是根节点为B和C的子树对于根节点为B的子树,树的深度是1,对于C,深度是2,则可以得到A..原创 2020-11-02 18:25:37 · 306 阅读 · 0 评论 -
数据结构 平衡二叉排序树的操作
#include<iostream>#include<stdlib.h>using namespace std;//定义二叉树每一个节点typedef struct TreeNode{ int data; TreeNode *LChild;//左节点 TreeNode *RChild;//右节点}TreeNode;/** 给二叉树插入一个值* 参数:二叉树根结点Node,要插入的值data* 插入成功,返回1* 插入失败,函数返回0* 这里是原创 2020-11-02 16:09:40 · 389 阅读 · 0 评论 -
数据结构 图有些想法
1.图的基本定义图是一种网状数据结构有向图:有箭头边指向的图无向图:无箭头边指向的图2.图的基本术语:完全图:分有向完全图和无向完全图,完全图就是所有节点与其他节点都有线连接。稀疏图:在完全图里面,如果少了几条边,那么就是稀疏图稠密图:不是稀疏图的就是稠密图度:在无向图里面,一个节点有几条边度就是几。入度:(限有向图)出度:(限有向图)权:网:路径:回路:连通图:...原创 2020-10-31 22:18:03 · 332 阅读 · 1 评论 -
数据结构 树与森林有想法
一、树的遍历有一棵树1.先根遍历若树非空,遍历方法如下:① 访问根结点② 从左到右,依次先根遍历根结点的每一棵树如上图,结果是:ABECFHGD2.后根遍历若树非空,遍历方法如下:① 从左到右,依次先根遍历根结点的每一棵树② 访问根结点如上图,结果是:EBHFGCDA3.对应关系树的遍历结果与由树转换而得的二叉树有如下关系:树的先根遍历 <——> 转换后二叉树的前序遍历树的后根遍历 <——> 转换后二叉树的中序遍历4.树与二叉树转换原创 2020-10-31 13:28:05 · 256 阅读 · 0 评论 -
数据结构 哈夫曼树的想法
几个概念路径:从根结点到该结点的分值序列。路径长度:根结点到该结点所经过的分支数目。结点的权:自己给某个结点赋予一个实数表示权的大小带权路径长度:该结点的权与路径长度的乘积。计算方式:如下二叉树:我给A、B、C结点赋权值为5、3、4因为A、B结点在树中的深度为2(从根节点往下数第三层,也就是路径长度为2),C的深度为1所以该树的带权路径长度计算为:5*2+3*2+4*1=20基于以上概念,引申出哈夫曼树哈夫曼树概念:有n个带权叶子结点构成的所有二叉树中,带权路径长度最短的二叉树就原创 2020-10-23 13:43:37 · 291 阅读 · 0 评论 -
数据结构 二叉树有遍历的想法
#include<iostream>#include<stdlib.h>using namespace std;#define LEN 30typedef struct TreeNode{ int data; TreeNode *LChild;//左节点 TreeNode *RChild;//右节点}TreeNode;//按照从左到右,从上到下给二叉树赋值TreeNode *init(int *init_arr,int lens){ TreeNode *Tree原创 2020-10-22 19:18:26 · 200 阅读 · 0 评论 -
数据结构 二叉树的想法
1.二叉树遍历先序遍历(DLR)遍历顺序:根节点-》左子树-》右子树中序遍历(LDR)遍历顺序:左子树-》根节点-》右子树后序遍历(LRD)遍历顺序:左子树-》右子树-》根节点小技巧:比如先序遍历是DLR,D是根节点,在最前面,先遍历。然后L在中间,所以第二个遍历的是左子树,R在末尾,所以最后遍历右子树。其他遍历以此类推。例子:先序遍历结果:ABDCE中序遍历结果:BDACE后序遍历结果:DBECA2.线索二叉树使用理由:二叉链表不能够直接得到结点在遍历序列中的前驱和后继信息原创 2020-10-22 19:18:16 · 256 阅读 · 0 评论 -
数据结构 链栈初始化及入出栈
#include<iostream>#include<stdlib.h>using namespace std;typedef struct chain_stack{ int data; chain_stack *next;}chain_stack;int push(chain_stack *S,int x){//头插法 // chain_stack *head2; chain_stack *node=(chain_stack *)malloc(sizeof(c原创 2020-06-18 12:38:24 · 588 阅读 · 0 评论 -
数据结构 双端栈初始化和入出栈
#include<iostream>#include<stdlib.h>using namespace std;#define Stack_size 20 //栈大小typedef struct double_Stacke{ int Stack[Stack_size]; int top[2];}double_Stacke;double_Stacke *init(){ //双端栈初始化 double_Stacke *S=(double_Stacke *)malloc原创 2020-06-18 12:34:41 · 414 阅读 · 0 评论 -
数据结构 顺序栈初始化及入出栈
#include<iostream>#include<stdlib.h>using namespace std;#define Stack_size 20typedef struct Stack{ int elem[Stack_size]; int top;}Stack;Stack * init(){//初始化一个空栈 Stack *S=(Stack *)malloc(sizeof(Stack)); S->top=-1; return S;}void原创 2020-06-18 12:32:51 · 516 阅读 · 0 评论 -
数据结构 双链表的增删改查
#include<iostream>#include<stdlib.h>using namespace std;typedef struct Node2{ int num; Node2 *next; Node2 *pre;}Node2;//定义节点/* 输入:头节点,初始化长度 返回:空*/void init(Node2 *head,int len){//初始化链表长度 Node2 *head2=head; for(int i=0;i<len;i+原创 2020-06-16 14:58:41 · 282 阅读 · 0 评论 -
数据结构 双链表初始化
#include<iostream>#include<stdlib.h>using namespace std;typedef struct Node2{ int num; Node2 *next; Node2 *pre;}Node2;//定义节点void init(Node2 *head,int len){//初始化链表长度 Node2 *head2=head; for(int i=0;i<len;i++){//尾插法 Node2 *node=(Nod原创 2020-06-16 14:49:57 · 981 阅读 · 0 评论 -
数据结构 单链表自己的想法---增删改查
#include<iostream>#include<stdlib.h>using namespace std;typedef struct Node{ int num; Node *next;}Node;//定义节点void init(Node *head,int number){//初始化链表长度 Node *head2=head; for(int i=0;i<number;i++){//尾插法 Node *node=(Node *)malloc(si原创 2020-06-15 14:53:21 · 256 阅读 · 0 评论 -
数据结构 如何初始化单链表
#include<iostream>#include<stdlib.h>using namespace std;typedef struct Node{ int num; Node *next;}Node;//定义节点/* init(头结点,初始化节点个数) 使用尾插法初始化链表*/void init(Node *head,int number){//初始化链表长度 Node *head2=head; for(int i=0;i<number;i++)原创 2020-06-15 14:52:13 · 2726 阅读 · 0 评论