![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DataStructure
文章平均质量分 91
leon_wdbt
这个作者很懒,什么都没留下…
展开
-
算法与数据结构-并查集(并查集森林)(按秩合并)(路径压缩)(C++)
描述并查集是一种用于处理一些不相交集合的合并和查询问题的树型数据结构。通常在使用中以森林来表示。用森林的好处是降低了在合并(Union)操作时的时间复杂度。本文以并查集森林实现为例,学习该数据结构。思路用顺序表的形式来存储每个结点,每个结点的内容为该结点的直接父结点。例如,parent[i]表示第i个节点的父结点的索引。为了使并(Union)操作时尽可能保持较低的树高度,新增一个size...原创 2020-05-01 21:11:33 · 328 阅读 · 0 评论 -
二叉搜索树删除操作(C++)
描述删除给定键值的树结点,并维护二叉搜索树的特性。需要分多个情况考虑:1.当结点没有左子树(或右子树)时:这时候直接把右子树(或左子树)(即使为空也没有关系)替换当前结点返回,并释放当前结点的空间。具体操作代码:if(node->left == NULL) { Node* rightNode = node->right; count--; delete...原创 2020-04-29 23:48:53 · 1852 阅读 · 0 评论 -
二叉搜索树的实现与遍历(前中后序遍历)(层序遍历)(C++)
描述二叉搜索树(Binary Search Tree)又称为:二叉查找树、二叉排序树。它的每个结点的值都大于其左子树上的所有结点的值,并且小于其右子树上所有结点的值,就称为二叉搜索树。二叉搜索树是一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势,所以应用十分广泛。思路定义一个树结点包含(key,value,*left,*right),分别表示树结点的键、值...原创 2020-04-29 11:44:13 · 418 阅读 · 0 评论 -
算法与数据结构-队列应用(打印杨辉三角)(C++)
实现代码#include<iostream>#include<queue>using namespace std;void yhTriangle(int n) { queue<int> q; q.push(1); int temp; //打印n层 for(int i = 1; i <= n; i++) {...原创 2020-04-27 23:15:10 · 748 阅读 · 0 评论 -
算法与数据结构-索引堆优化(C++)
描述如果我们想要在索引堆中修改索引为i的元素,我们就需要找到索引i(也可以理解为索引为i的元素)在堆中的位置,并对其进行维护以保持堆特性。就是我们需要对索引进行遍历直到indexes[j] == i表示索引i在堆中的位置为j,并对位置为j的索引进行维护,这样一来就需要耗费O(n)的时间复杂度。为了提高这一操作的效率,我们可以引入一个reverse[i]表示索引i在堆中的位置,就可以非常方便地定...原创 2020-04-26 23:58:48 · 342 阅读 · 0 评论 -
算法与数据结构-索引堆(堆排序)(C++)
描述堆的概念就不多说了。有的时候堆存放的数据比较复杂,直接对堆中的元素进行操作将造成过大的时空开销,或者我们需要保持堆中数据的原有顺序不变。我们就可以用索引堆这种数据结构来解决,下面以最大索引堆为例介绍索引堆。思路初始化时,为每个元素顺序分配索引。arr[0…n-1]对应堆中data[1…n],索引为indexes[1…n]。插入操作。设定count指向最后一个元素的位置,data[++...原创 2020-04-25 23:50:22 · 447 阅读 · 0 评论 -
利用(循环队列)和(多线程编程)模拟实现打印作业任务管理
实现代码#include<stdio.h>#include<iostream>#include "Windows.h"int my_exit = 0;CRITICAL_SECTION my_printer; //创建临界区对象typedef int QElemType;#define MAXSIZE 3 typedef struct { QEl...原创 2020-04-25 18:04:17 · 2104 阅读 · 4 评论 -
数据结构练习-原地堆排序
描述将需要排序的数组用构造成最大堆的算法进行原地排序。具体思路对于传入的数组arr[0…n-1],从第(n-1-1)/2个元素(即最后一个非叶子结点)开始往前进行堆化,构造成最大堆。这样一来arr[0]为最大元素。设定一个索引i = n-1交换arr[0]和arr[i],就把最大值放到了最后,同时对arr[0…i-1]进行堆化(只需要总0开始)。再让i - -,重复上一步,直到 i =...原创 2020-04-25 09:08:14 · 395 阅读 · 0 评论 -
数据结构练习-堆 (最大堆) (堆排序)
介绍我们所说的堆这种数据结构,通常指的是二叉堆,二叉堆是一棵完全二叉树。堆又可以分为最大堆和最小堆,本文以最大堆为例介绍堆这种数据结构。思路用数组存放堆中的元素,创建一个大小为n+1的连续空间data[0…n],data[1…n]用于存放堆中元素。插入操作。设定一个count指向最后一个元素位置,data[++count] = 新插入的元素。插入后堆需要进行调整,保证满足最大堆的性质。...原创 2020-04-23 08:10:50 · 856 阅读 · 0 评论 -
数据结构练习-循环队列
介绍循环队列是在顺序队列的基础上,解决“假溢出”问题的一种数据结构。在逻辑上可以看做一个环,如下图所示:思路分配一个大小为MAXSIZE的连续空间,初始化q.front = q.rear = 0。进队q.base[rear++] = x,rear始终指向下一次要入队的位置。出队x = q.base[front++]。边界判断,这里采用设标志位的方法。当q.rear == q.fron...原创 2020-04-21 14:10:29 · 686 阅读 · 0 评论