数据结构
数据结构相关知识点及代码
ZD_012
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
求链表中倒数第k个结点
#输入一个链表,输出该链表中倒数第k个结点###解题思路:定义两个指针——快指针和慢指针。快指针先从头走到第K个节点处,然后快、慢指针同时向后移动,直到快指针走到最后一个节点,此时第二个指针正好是倒数第K个节点注意:链表可能并没有K个节点,需要进行判断 struct ListNode { int val; struct ListNode *next; ListN...原创 2019-01-09 18:17:48 · 282 阅读 · 0 评论 -
数据结构之带头双向循环链表(源代码)
List.h//带头双向循环链表#ifndef __LIST_H__#define __LIST_H__#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<malloc.h>typedef int LTDataType;typedef struct Lis...原创 2020-01-30 16:27:04 · 233 阅读 · 0 评论 -
数据结构之无头单向非循环链表(源代码)
SList.h//无头单向非循环链表#ifndef __SLIST_H__#define __SLIST_H__#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<malloc.h>typedef int SLTDataType;typedef struc...原创 2020-01-30 16:13:37 · 211 阅读 · 0 评论 -
二叉树的层序遍历
层序遍历基本思想:在访问过程中,我们只需要将同一层中的节点同时入队列即可。在将该queue中所有元素出队列的同时,将下一层的元素进队列,完成交接。代码:class Solution {public: vector<int> levelOrder(TreeNode* root) { queue<TreeNode*> Q; Tr...原创 2020-02-10 15:53:20 · 117 阅读 · 0 评论 -
二叉树的遍历
题目描述给定一个二叉树,返回它的前序遍历。示例完整代码递归:非递归:算法思想:先访问根节点后,然后访问其左子树,当左子树遍历完成后,需要访问右子树,此时就需要拿到父节点的信息,通过父节点我们从而访问其右子树。这样整棵树完成遍历后,继续回退到上一层。直至当前子树访问完成,同时栈为空。/** * Definition for a binary tree node. * struct...原创 2020-02-10 15:33:26 · 134 阅读 · 0 评论 -
非比较排序算法之计数排序
计数排序基本思想:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。操作步骤:1、统计相同元素出现次数2、根据统计的结果将序列回收到原来的序列中//计数排序void CountSort(int* a, int n){ int max = a[0], min = a[0]; for (int i = 0; i < n; i++) { if (a[i] > m...原创 2020-02-04 15:13:01 · 169 阅读 · 0 评论 -
排序算法之归并排序
归并排序基本思想:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使用每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。//归并排序void _MergeSort(int* a, int begin, int end, int* tmp){ if (begin >...原创 2020-02-04 14:52:16 · 151 阅读 · 0 评论 -
排序算法之快速排序
快速排序快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两个子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置为止。将区间按照基准值划分为左右两半部分的常见方式有:1、hoare版本2、挖坑法3、前后指针法...原创 2020-02-03 17:19:42 · 219 阅读 · 0 评论 -
排序算法之冒泡排序
交换排序基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。冒泡排序void Swap(int* x, int* y){ int tmp = *x; *x = *y; *y = tmp;}void BubbleSort(int* a, int n){ i...原创 2020-02-02 15:42:43 · 180 阅读 · 0 评论 -
排序算法之直接选择排序
选择排序基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。直接选择排序基本思想:1、在元素集合array[i] – array[n-1]中选择关键码最大(小)的数据元素。2、若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换,3、在剩余的array[i] – array[n-2]...原创 2020-01-31 17:57:16 · 272 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数gap1,把待排序文件中所有记录分成gap1个组,所有距离为gap1倍数的记录分在同一组内,并对每一组内的记录进行排序。然后,取第二个增量gap2(<gap1),重复上述分组和排序的工作。当gap= 1时,所有记录在同一组内排好序。...原创 2020-01-31 14:21:57 · 273 阅读 · 0 评论 -
排序算法之直接插入排序
排序算法之直接插入排序直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插完为止,得到一个新的有序序列。步骤:当插入第i(i >= 1)个元素时,前面的array[0],array[1],… ,array[i - 1]已经排好序,此时用array[i]的排序码与array[i - 1],array[i -...原创 2020-01-30 15:58:42 · 233 阅读 · 0 评论 -
堆排序
堆排序算法思想:升序用大根堆,降序用小根堆。其中每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆。以降序为例:1、构造初始堆。将给定无序序列构造成一个小根堆,则此时这组无序序列中值最小的元素处于堆顶位置。2、将堆顶元素与末尾元素进行交换,使末尾元素最小。然后继续调整堆,再将堆顶元素与末尾元素(该末尾元素实际上是序列中倒数...原创 2020-01-27 18:09:14 · 3325 阅读 · 0 评论
分享