数据结构学习日志
路痴楷
这个作者很懒,什么都没留下…
展开
-
除留余数哈希表
void creat_data(vector<int>&v)//将生成的20个随机数存入vector。实验要求:随机生成20个两位整数,使用除留玉树法的哈下函数以及链表法解决哈希冲突,生成哈希表。//将v容器的数据全部储存到hash中,并按余数插入链表。int creat_num()//创造两位数的整数。//创建10个链表,用于储存取余后的整数。原创 2023-12-23 17:16:56 · 457 阅读 · 0 评论 -
P4715 【深基16.例1】淘汰赛
再来,从题干可以知道,我们所采用的结构体除了需要有树的两个左右节点指针外,还需要两个变量用来储存“能力值”和“编号”在这道题中,我们需要将所有父节点都先赋值为NULL,然后对所有的叶子节点赋值。首先从题干要求入手,我们可以了解到题目要求是二进一,不难想到这是二叉树的题。然后对左右节点进行比较,将大的值赋给父节点,并递归调用该函数。最后,访问根节点的左右子树,判断那个小,输出它的编号即可。原创 2023-12-05 20:23:11 · 128 阅读 · 0 评论 -
PTA-是否同一棵二叉搜索树
写了一个多小时的shi山代码,暂时没精力总结和修改了,等以后再优化一下吧、结合了树的构建,遍历输出,指针的传递等知识点。原创 2023-10-11 22:26:23 · 70 阅读 · 0 评论 -
两种简单排序——冒泡排序与插入排序
简述排序算法的实现思路与优缺点原创 2023-10-11 15:29:33 · 41 阅读 · 0 评论 -
链表的基础
这样的操作可以方便我们将所有的链表操作统一化,让链表为空时也能正常的使用函数。=NULL)//有可能空间申请失败。链表的存在是为了实现空间内存的动态分配,它的存储是不连续的。当我们要建立一个空链表时,通常是建立一个指针,指向一个空节点。最常规的结构为 数据域+指针域。附上创建空链表的代码。原创 2023-09-24 15:58:22 · 27 阅读 · 0 评论 -
二叉树搜索树的删除
/也可以找到右子树中最小的节点,即 tmp=FindMin(bst->right) 这两节点的值都是子树里最接近被删除节点的。if (bst->left == NULL && bst->right == NULL)//没有子节点,直接删除。else if (bst->left&&bst->rigth==NULL)//只有左节点时,直接赋值左节点的值。//释放掉被找到的左子树中最大的节点,这样就能将原来指向该节点的根节点指向空。//这里我们只考虑二叉搜索树,故若节点只有一个,即该节点下面不可能还有节点。原创 2023-09-16 11:21:59 · 253 阅读 · 0 评论 -
二叉树的遍历
一般的二叉树遍历都是采用递归思想实现的,而递归的本质也是用堆栈的数据存储结构来实现的。因此我们也可以通过堆栈。当我们想要对二叉树的每一层进行遍历时,若采用堆栈式的存储则无法再对子节点经行访问。当我们要输出父节点时,将父节点的子节点都入队,这样就能实现层序遍历。常见的二叉树遍历方式有:先序遍历 中序遍历 后序遍历。因此,我们需要采用队列的存储方式。原创 2023-09-10 22:35:27 · 35 阅读 · 0 评论 -
二叉树的引入-儿子兄弟表示法
于是我们引入了儿子-兄弟表示法,即一个指针指向第一个子节点,一个指针指向和它平行的兄弟节点。当树的每个节点的度不同时,若采用统一的数据结构存储则会造成大量的空间浪费。这样,将这种存储方式的示意图旋转45°,即可得到二叉树的结构。原创 2023-09-10 10:53:55 · 41 阅读 · 0 评论 -
树的引入-二分查找
当数组的元素过多时,时间复杂度为O(n),于是我们引入了从中间开始,动态判断元素的方法——二分查找,其时间复杂度为O(log n)当所求元素小于mid所指元素时,right=mid-1;当所求元素大于mid所指元素时,left=mid+1;设立left mid right 三个指针,分别指向数组的前 中 后三个位置的元素。当所求元素等于mid所求元素时,返回mid,即可找到所求元素在数组中的位置。而当我们在这些元素节点上添加或删除元素时,数组的结构不方便我们操作。原创 2023-09-10 00:00:43 · 30 阅读 · 0 评论