数据结构
adyw2565876
这个作者很懒,什么都没留下…
展开
-
哈希表
本文转载自http://blog.chinaunix.net/uid-24951403-id-2212565.html 哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。 对哈希表的使用者一一人来说,这是一瞬间的转载 2015-05-18 21:29:38 · 408 阅读 · 0 评论 -
用两个队列实现一个栈
题目:用两个队列实现一个栈 代码: #include #include using namespace std; template class Mystack { public: Mystack(){}; ~Mystack(){}; void push(T t); T top(); void pop(); private: deque A;原创 2015-05-22 12:37:31 · 300 阅读 · 0 评论 -
如何判断一个单链表是否有环
题目要求:给定一个单链表的头指针head,要求写一个函数判断这个单链表是否是一个有环单链表。 单链表中的节点定义如下: struct listNode { int val; struct listNode *next; }; 方法1:首先定义一个map map,然后从单链表的头指针开始往后遍历,每次遇到一个指针p,就判断map[pCur]是否为0,若为0,则将map[pCur]赋原创 2015-10-12 22:50:21 · 970 阅读 · 0 评论 -
如何判断两个单链表(无环)是否交叉
利用两个链表交叉的性质,若两个链表交叉,那么从链表的交叉点到链表尾部,都是相同的节点。因此,链表的形状是Y型的。因为是单链表,我们无法从链表尾部开始向前遍历,找到第一个相同的节点。因此,我们可以先遍历单链表1,计算出其长度len1,再遍历单链表2,计算出长度len2,判断哪个链表是长链表,哪个链表是短链表,我们记长链表的头节点为cur1,长度为len1,短链表的头节点为cur2,长度为len2。长原创 2015-10-13 11:04:10 · 1179 阅读 · 0 评论 -
合并两个有序链表
方法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 阅读 · 0 评论 -
数组的归并排序
归并排序:利用递归与分治的思想,先将数组对半划分,再对半划分的数组排序,从而使左右两个子数组各自有序,最后再将两排序号的子数组进行归并成一个大的有序数组。 具体代码如下: #include #include using namespace std; void mergeSort(vector &arr, int start, int end); void merge(vector &ar原创 2015-10-13 15:10:57 · 1407 阅读 · 0 评论 -
堆排序
方法:1.首先将数组a[1,...,N]看成一个完全二叉树,利用完全二叉树的双亲节点与孩子节点间的关系来建立一个最大推,最大堆中任意的双亲节点的值都不小于孩子节点的值。下标为i的节点的左孩子的下标为(2i+1),右孩子的下标为(2i+2)。 2.建立最大堆之后,将堆的最后一个元素(即数组中的最后一个元素)与堆顶元素(即数组的首个元素)进行交换,此时堆的最后一个元素(即数组的最后一个元素)即为最大原创 2015-10-13 20:40:53 · 287 阅读 · 0 评论