- 博客(5)
- 资源 (4)
- 收藏
- 关注
原创 堆排序
方法:1.首先将数组a[1,...,N]看成一个完全二叉树,利用完全二叉树的双亲节点与孩子节点间的关系来建立一个最大推,最大堆中任意的双亲节点的值都不小于孩子节点的值。下标为i的节点的左孩子的下标为(2i+1),右孩子的下标为(2i+2)。 2.建立最大堆之后,将堆的最后一个元素(即数组中的最后一个元素)与堆顶元素(即数组的首个元素)进行交换,此时堆的最后一个元素(即数组的最后一个元素)即为最大
2015-10-13 20:40:53 287
原创 数组的归并排序
归并排序:利用递归与分治的思想,先将数组对半划分,再对半划分的数组排序,从而使左右两个子数组各自有序,最后再将两排序号的子数组进行归并成一个大的有序数组。 具体代码如下: #include #include using namespace std; void mergeSort(vector &arr, int start, int end); void merge(vector &ar
2015-10-13 15:10:57 1407
原创 合并两个有序链表
方法1:递归求解 首先设两个单链表的头节点分别为head1、head2。如果head1为空,则直接返回head2,若head2为空,则直接返回head1。若head1与head2都不为空,则比较head1-.val 与head2->val的大小,来决定head1和head2谁为合并后的单链表的头节点。分两种情况: 1.若head1->val val,则头节点head = head1,接着递归去
2015-10-13 12:25:07 417
原创 如何判断两个单链表(无环)是否交叉
利用两个链表交叉的性质,若两个链表交叉,那么从链表的交叉点到链表尾部,都是相同的节点。因此,链表的形状是Y型的。因为是单链表,我们无法从链表尾部开始向前遍历,找到第一个相同的节点。因此,我们可以先遍历单链表1,计算出其长度len1,再遍历单链表2,计算出长度len2,判断哪个链表是长链表,哪个链表是短链表,我们记长链表的头节点为cur1,长度为len1,短链表的头节点为cur2,长度为len2。长
2015-10-13 11:04:10 1179
原创 如何判断一个单链表是否有环
题目要求:给定一个单链表的头指针head,要求写一个函数判断这个单链表是否是一个有环单链表。 单链表中的节点定义如下: struct listNode { int val; struct listNode *next; }; 方法1:首先定义一个map map,然后从单链表的头指针开始往后遍历,每次遇到一个指针p,就判断map[pCur]是否为0,若为0,则将map[pCur]赋
2015-10-12 22:50:21 973
Unix编程艺术.pdf
2015-01-08
数据结构严蔚敏ppt
2014-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人