![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
ww020202
这个作者很懒,什么都没留下…
展开
-
浅谈队列及循环队列实现
一队列基本概念队列是队头和队尾的区别。队头进行元素的删除,队尾进行元素的插入操作。队列遵循先进先出的原则(FIFO)队列分类:1 顺序队列 2 循环队列 3 链式队列在这里,我们主要介绍循环队列。上图为循环队列的模型。循环队列的3种判断满或者空的方法:(capacity为容量)(1)少用一个存储单元, (rear+1)%capacity=原创 2017-04-22 16:39:06 · 287 阅读 · 0 评论 -
堆的应用----TopK问题和堆排序
用堆的数据结构常见解决问题是 TopK 和堆排序。1 TopK 问题 此问题需要在N个数中找出最大或者最小的K 个数。这里我们用找最大的K个数来举例。void AdjustDown(int* hp, int K, int i){ int parent = i; int child = i * 2 + 1; while (child < K) { if (child原创 2017-07-04 13:54:59 · 328 阅读 · 0 评论 -
Heap---堆的基本结构
堆数据结构是一种数组对象,可以被视为一颗完全二叉树。大堆:每个父节点都大于孩子节点小堆:每个父节点都小于孩子节点如上图为小堆存储:下面编写堆的基本代码:#include#include#includeusing namespace std;template //利用仿函数,可以完成代码的复用,这里我们假设建立大堆。struct Greater{ bo原创 2017-07-04 12:26:29 · 376 阅读 · 0 评论 -
归并排序
归并算法:对于数据较大的输入,归并排序是比较快的一个算法。该算法采用的是分治法的思想。归并排序的原理:先将数据分开排序,然后再合并起来,最后形成一个排好的序列。void _Merge(int* a, int* tmp, int begin1, int end1, int begin2, int end2)//7-2区间合并{ int原创 2017-07-13 12:01:12 · 243 阅读 · 0 评论 -
交换排序(2)--快速排序3种实现方案及其优化
快速排序 快排的整体思想是找出一个key值,比key的值小的都在它的左边,比key大的值都在它的右边。这样就划分了左右两个区域,分别找左右两个区域的key值继续划分左右区间。 找中间值的位置有三种方法(1)左右指针法原创 2017-07-11 22:30:06 · 647 阅读 · 0 评论 -
交换排序(1)---冒泡排序
冒泡排序冒泡排序算法的运作如下:(从后往前) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 void Bub原创 2017-07-11 22:18:42 · 223 阅读 · 0 评论 -
选择排序(选择排序和堆排序)
选择排序原创 2017-07-11 21:17:28 · 270 阅读 · 0 评论 -
插入排序(直接插入排序,希尔排序)
直接插入排序 直接插入排序是把一组数据的第一个数看做有序(同时这个数是有序区的最后一个数end),拿要插入的数与end比较大小。(1)比end大,直接放在end的后面(2)比end小,把end这个数放在end的后一个位置,再把要插入的数与end的前一个数比较。void InsertSort(int* a,int n)//1 直接插入排序{ for (int i原创 2017-07-11 13:30:35 · 609 阅读 · 0 评论 -
二叉树基本结构
#include#include#includeusing namespace std;//编写二叉树节点的结构体templatestruct BinaryTreeNode{ typedef BinaryTreeNode Node; T _data; Node* _left;//左孩子 Node* _right;//右孩子 BinaryTreeNode(const T&原创 2017-05-28 16:46:15 · 244 阅读 · 0 评论 -
斐波那契数列实现与分析
斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...这个数列从第三项开始,每一项都等于前两项之和。下面将用递归算法和非递归算法分别实现,并求其时间与空间复杂度。////斐波那契递归算法////时间复杂度 O(2^N)////空间复杂度 O(N)#includeusing namespace std;int原创 2017-05-13 16:16:25 · 308 阅读 · 0 评论 -
二分查找实现与算法分析
二分查找又名折半查找。找到中间值与要找的数值进行比较,不过的缩小查找空间。这里我们用递归与非递归分别实现,并分析空间复杂度与时间复杂度//二分查找递归算法//时间复杂度 O(lg N)//空间复杂度 O(1g N)#includeusing namespace std;int Binary(int* arr, int data, size_t size, int left原创 2017-05-13 16:36:47 · 315 阅读 · 0 评论 -
单链表常见面试题(二)
1.判断单链表是否带环?若带环,求环的长度?求环的入口点?(1)判断是否带环Node* IfRing(Node* list){ Node* slow = list; Node* fast = list; while (fast&&fast->next) { slow = slow->next; //慢指针一次走一步 fast = fast->nex原创 2017-07-08 09:55:20 · 287 阅读 · 0 评论