数据结构
文章平均质量分 64
ivolcano
努力努力再努力
展开
-
交换类排序之快速排序
#includevoid QuickSort(int R[],int l,int r) //快排{ int i=l,j=r; int temp; if(l<r) { temp=R[l]; //以temp为关键字,也就是最左边的那个数 while(i!=j) //直到i=j为止结束 { //数组中小于temp的元素放在左边,大于temp的元素放右边 wh原创 2016-03-25 21:35:22 · 529 阅读 · 0 评论 -
剑指offer13:在O(1)时间删除链表结点
题目:在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该节点。链表的结点定义如下: struct ListNode { int val; ListNode *next; }; 要分析几种情况: 1.空链表 2.只有一个结点 3.删除的结点是尾结点void DeleteNode(ListNode *pNode,原创 2017-04-18 21:37:42 · 459 阅读 · 0 评论 -
leetcode之reorder-list
题目描述Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do this in-place without altering the nodes’ values. For example, Given{1,2,3,4}, reorder it to{1,原创 2017-03-04 16:13:20 · 255 阅读 · 0 评论 -
leetcode之insertion-sort-list
题目描述Sort a linked list using insertion sort. 思路:新建一个链表,遍历原链表,将每个节点加入新链表正确的位置。class Solution {public: ListNode *insertionSortList(ListNode *head) { if(!head || !head ->next) {原创 2017-03-04 15:18:09 · 274 阅读 · 0 评论 -
leetcode之sort-list
题目描述 Sort a linked list in O(n log n) time using constant space complexity.因为题目要求复杂度为O(nlogn),故可以考虑归并排序的思想。 归并排序的一般步骤为: 1)将待排序数组(链表)取中点并一分为二; 2)递归地对左半部分进行归并排序; 3)递归地对右半部分进行归并排序; 4)将两个半部分进行合并(merg原创 2017-03-04 14:14:15 · 224 阅读 · 0 评论 -
AVL树,红黑树,B树,B+树,Trie树应用场景简介
AVL树,红黑树,B树,B+树,Trie树应用场景简介 1.AVL树:平衡二叉树,一般是用平衡因子差值决定并通过旋转来实现,左右子树树高差不超过1,那么和红黑树比较它是严格的平衡二叉树,平衡条件非常严格(树高差只有1),只要插入或删除不满足上面的条件就要通过旋转来保持平衡。由于旋转是非常耗费时间的。我们可以推出AVL树适合用于插入删除次数比较少,但查找多的情况。原创 2016-12-19 22:05:30 · 603 阅读 · 0 评论 -
题目1156:谁是你的潜在朋友(hash)
题目描述: “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。 首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M。同时,按照原创 2016-10-12 22:26:29 · 391 阅读 · 0 评论 -
(Hash大数排序)Sort
题目描述:给你n个整数,请按从小到大的顺序输出其中前m大的数。输入:每组测试数据有两行,第一行有两个数n,m(0各不相同的,且大小处于[-500000,500000]的整数。输出:对每组数据按从大到小的顺序输出前m大的数。样例输入:5 33 -35 92 213 -644样例输出:213 92 3思考:在本例中,如果用排序来解决该题,由于待排序数字的数原创 2016-10-12 21:45:04 · 1005 阅读 · 0 评论 -
设计一个算法,将R中的序列循环左移P个
即将R中的数据由{X0,X1,……,Xn-1}变换为{Xp,Xp+1,……,Xn-1,X0,X1,……,Xp-1}分析:要实现R中序列循环左移P个位置,只需先将R中前P个元素逆置,再将剩下的元素逆置,最后将R中所有的元素再整体做一次逆置操作即可,本题算法描述如下:#include#include# define N 50int main(){ void reverse(int R原创 2016-04-12 22:45:40 · 3980 阅读 · 2 评论 -
选择类排序之选择排序
#includevoid SelectSort(int R[],int n){ int i,j,k; int temp; for(i=0;i<n;++i) { k=i; //这个循环是算法的关键,它从无序序列中挑出一个最小的元素 for(j=i+1;j<n;++j) if(R[k]>R[j]) k=j; //下面三句完成最小元素与无序序列第一个元素的原创 2016-03-25 22:02:43 · 333 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程: 归并: 1.比较a[i]和a[j]的大小; 2.若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i原创 2017-09-17 20:25:40 · 237 阅读 · 0 评论