数据结构
胡思先生
这个作者很懒,什么都没留下…
展开
-
顺序表各个接口的建立
顺序表:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。一般可分为两种1.静态顺序表:定长数组储存。#define N 1000typedef int SLDataType;typedef struct SeqList{ SLDataTyepe a[N];//定长数组 size_t size;//有效数字}S...原创 2019-01-11 17:23:07 · 155 阅读 · 0 评论 -
八种排序的比较:冒泡,直接插入,直接选择,希尔,堆排,计数排序,归并排序,快速排序
计数排序: 平均和最好一致 O(MAX(范围)),空间复杂度O(范围),稳定性:稳定原创 2019-03-18 20:14:39 · 212 阅读 · 0 评论 -
选择排序:三种构建方法和非递归写法
选择排序思想将排序序列中的某元素作为基本值,按照该基本值将排序组合分成两个子序列,左子序列均小于基准值,右子序列均大于基准值,然后左右序列重复这个操作,直到数组有序为止。确定基本值//根据左值,右值,中值判断哪个位置的值为第二大的数,返回这个位置,将其作为基本数int RealKey(int* a, int begin, int end){ int mid = begin + ...原创 2019-03-16 12:38:55 · 195 阅读 · 0 评论 -
归并排序
归并排序思想将已有的数组依次拆分到不可拆分为止,再使得每个子序列有序,再使子序列段有序,最终将子序列段组合成为有序的数组。核心步骤代码实现:void _MergeSort(int* a, int begin, int end, int* tmp){ if (begin >= end)//设置递归返回条件 return; int mid = begin + ((end -...原创 2019-03-16 11:47:06 · 76 阅读 · 0 评论 -
计数排序:非比较排序
计数排序1.统计相同元素出现的个数 2.根据统计结果将序列回收到原来的序列中整体思路如下图:void CountSort(int* a3, int n){ int min = 0; int max = 0; int i = 0; while (i < n)//记录最大最小值 { if (min > a3[i]) { min = a3[i]; } ...原创 2019-03-14 13:16:17 · 131 阅读 · 0 评论 -
直接插入排序:简单的插入排序
直接插入排序当出入第i个元素的时候,前面的a[0], a[1]...a[i - 1]已经排好序了,此时用a[i]的排序码与之前的排序码顺序进行比较,好到适合插位置将array[i]插入,如下图:实现代码如下:void InsertSort(int* a, int n){ for (int i = 0; i < n - 1; i++) { int cur = i + 1;//...原创 2019-03-14 12:50:55 · 780 阅读 · 0 评论 -
堆排序:利用堆实现的排序
堆排序特点:堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据重点!排升序要建大堆,排降序建小堆(升序)从小到大(降序)从大到小1.建立小堆void HeapBuilt(int* a, int n, int i)//建小堆{ int parent = i; int child = parent * 2 +...原创 2019-01-12 17:04:08 · 529 阅读 · 0 评论 -
希尔排序:优化版的直接插入排序
希尔排序(缩小增量法)中心思想先选定一个数组,把待排序的数据分为gap个组,将所有距离为gap的数据记录在同一个组内,并对每一组内的记录进行排序,然后取(gap/3)+1,再进行上述操作。当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了取(gap/3)+1,重复该操作代码实现:(交换思想)void ShellSort(...原创 2019-01-12 15:11:41 · 202 阅读 · 0 评论 -
最low的排序:直接选择排序
选择排序基本思想每一次从待排序的数据元素中选出最小(最大)的元素,存放在序列的起始位置,直到待排序的数据元素全部排完。代码实现:void ChooseSort(int* a,int n){ for (int i = 0; i < n; i++)//将第i个数剔除,从i+1开始选择排序。 { for (int j = i; j < n; j++) { if...原创 2019-01-11 23:33:48 · 159 阅读 · 0 评论 -
二叉树的最近公共祖先
例子代码如下:Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*///查找树的位置int FindTree(struct TreeNode* alt, struct ...原创 2019-01-06 23:22:18 · 151 阅读 · 0 评论 -
最简单的排序:冒泡排序
冒泡排序:核心思想:交换思想:通过比较数组中两个数的大小来对换两个数的位置。特点:将较大的数向序列的尾部移动,将较小的数向序列前方移动。void BullSort(int* a, int n){ for (int i = 0; i &lt; n; i++)//每次循环,将已经筛选出的最大的数剔除。 { //记住,j需要-1,保证a[j+1]不会越界访问。 for (int j...原创 2019-01-11 18:05:11 · 265 阅读 · 0 评论 -
STL——仿函数(函数对象)
仿函数(函数对象)定义:一种具有函数特征的对象,调用者可以像函数一样使用该对象,为了能够“行为类似函数”,该对象所在类必须自定义函数调用运算符operator(),就可以在仿函数对象后面加上一对小括号,以此调用仿函数定义的operator()操作。class Mul2{public: void operator()(int& date) { date <<= ...原创 2019-05-14 14:37:43 · 434 阅读 · 0 评论