
数据结构
文章平均质量分 92
liverpool的T9
努力学习的小萌新
展开
-
实现二叉查找树C++
实现二叉查找树 \qquad本文主要实现二叉查找树,实现二叉查找树的构建、查找和删除功能。 分析 构建和查找功能按照二叉查找树的性质即可。 删除时需要判断是1.类情况还是2.类情况,当是2.类情况时,需要找到待删除节点,判断是否具有左右子节点,找到大于待删除节点最小节点,节点互换后删除后找到的节点,最后还要挂载删除节点的左右节点。 FindBinaryTree 构建树数据结构 class FindBinaryTree { public: FindBinaryTree(int val) .原创 2020-10-19 22:31:28 · 384 阅读 · 0 评论 -
计数排序分析C++
排序算法 \qquad本文主要展示计数排序。 分析 计数排序为什么可以实现计算复杂度为O(n)O(n)O(n)??? 计数排序算法最核心的内容为使用中间数组保存数组元素到最小元素的距离,经过一次遍历(计算nnn次即可),最后再便历一次将未排序的数组复制到指定距离数组确定的下标,实现排序。 CountingSort(int* Array, int ArrayLength) 计数排序函数 void CountingSort(int* Array, int ArrayLength) { int *Temp原创 2020-10-18 16:40:57 · 243 阅读 · 0 评论 -
归并排序和快速排序C++
排序算法 \qquad本文主要展示归并排序和快速排序。 分析 快速排序和归并排序为什么可以将时间复杂度由其他算法的O(n2)O(n^2)O(n2)降低到O(nlog2n)O(nlog_{2}{n})O(nlog2n)??? 快速排序的时间复杂度跟每次排序选取的元素在排序后数组的位置有关,越靠近数组中间,排序的速度越快。当每次元素选择最佳(排序区域的中间),只需要log2nlog_{2}nlog2n次便能达到最小分区(start==endstart == endstart==end),每次分区需要nnn原创 2020-10-17 18:26:17 · 151 阅读 · 0 评论 -
使用链表实现队列C++
要求 \quad使用链表实现队列,需要能够实现插入、删除元素,输出当前队列长度. 分析 使用链表作为实现队列的数据结构,按照先入先出的原则,插入元素在链表尾部插入,然后更新链表尾部指针,出队列时,在链表头部输出对应元素,然后更新头链表指针。为实现以上操作需要定义两个指针变量,ListNode* head指向链表头,ListNode* tail指向链表尾。 在出队列过程中,一边出队列,一边回收开辟的内存。 ListNode 数据结构 class ListNode { public: // 链表 Li原创 2020-10-16 22:27:03 · 1522 阅读 · 0 评论 -
使用数组实现队列C++
要求 \quad使用数组实现队列,需要能够实现插入、删除元素,输出当前队列长度,当元素插入大于队列当前设定长度时实现自动扩容(但是小于设定的最大队列长度)等操作. 分析 使用数组作为连续存储空间,插入元素只需要按顺序插入即可,当删除元素时需要涉及数组元素的移动。为实现以上操作需要定义两个坐标变量,QueueHead指向数组的第一个元素,QueueTail指向当前需要插入的元素。 在队列(其实就是数组)扩展时,需要原数组空间的释放和新空间的开辟 ArrayQueue 结构体 class ArrayQueu原创 2020-10-15 12:53:41 · 1109 阅读 · 0 评论