数据结构与算法
文章平均质量分 80
如小丧
这个作者很懒,什么都没留下…
展开
-
return在递归调用时需注意的地方
注意点一:一层一层返回return:从调用函数原创 2014-11-09 19:50:51 · 4260 阅读 · 1 评论 -
二叉树的左旋和右旋
树的旋转,分为左旋和右旋,以下借助图来做形象的解释和介绍:1.左旋(右子为轴,当前结点左旋)如上图所示:当在某个结点pivot上,做左旋操作时,我们假设它的右孩子y不是NIL[T],pivot可以为树内任意右孩子而不是NIL[T]的结点。左旋以pivot到y之间的链为“支轴”进行,它使y成为该孩子树新的根,而y的左孩子b则成为pivot的右孩子。来看算法导论对此操作的算法实转载 2015-07-26 16:55:21 · 2142 阅读 · 0 评论 -
优化的直接插入排序(二分查找插入排序,希尔排序)
优化的直接插入排序(二分查找插入排序,希尔排序) 本博文向大家介绍了插入排序的三种实现:直接插入排序,二分查找插入排序,希尔排序。详细分析的其实现过程、时间复杂度和空间复杂度、稳定性以及优化改进策略。最后简单的做了下性能测试。 直接插入排序(一)概念及实现直接插入排序的原理:先将原序列分为有序区和无序区,然后再经过比较和后移操作将无序区元素插入到有序区中。转载 2015-08-01 15:45:57 · 1294 阅读 · 0 评论 -
单链表实现插入排序
这里给出了一种单链表插入排序的实现。另一种类似的实现参见《C算法(第一卷:基础、数据结构、排序和搜索)(第三版)》程序3-11。 #include #include typedef struct list LIST;typedef LIST *link; struct list{ int item;转载 2015-08-01 01:28:27 · 1085 阅读 · 0 评论 -
找工作知识储备(3)---从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
作者:寒小阳时间:2013年9月。出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251。声明:版权所有,转载请注明出处,谢谢。0、前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算转载 2015-08-01 01:28:46 · 912 阅读 · 0 评论 -
Hash算法冲突解决方法分析
就不自己写了,直接贴下吧看了ConcurrentHashMap的实现, 使用的是拉链法.虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的。当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时。冲突就难免会发 生。另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记录,不仅发生冲突,而且还会发生溢出。因此,处理冲突和溢出是 哈希技转载 2015-07-23 20:41:40 · 408 阅读 · 0 评论 -
树状数组 求逆序数
树状数组 求逆序数 poj 2299这里说的很好,把求逆序的步骤说的很明白,我也是看完才懂的,之前自己想了很久就是不明白为什么可以用树状数组求逆序 转载:树状数组,具体的说是 离散化+树状数组。这也是学习树状数组的第一题.算法的大体流程就是:1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的,2.接着,运用树状数组的标准操作来累计数组的逆序数。算法详细解转载 2015-08-04 23:04:43 · 455 阅读 · 0 评论 -
树状数组 详解
对于普通数组,其修改的时间复杂度位O(1),而求数组中某一段的数值和的时间复杂度为O(n),因此对于n的值过大的情况,普通数组的时间复杂度我们是接受不了的。在此,我们引入了树状数组的数据结构,它能在O(logn)内对数组的值进行修改和查询某一段数值的和。树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组a[1..n],那么查询a[1]+...+a[n]的时间是log级别的,转载 2015-08-04 23:06:18 · 843 阅读 · 0 评论 -
HASH表的实现(拉链法) - C/C++
本文的一些基本概念参考了一部分百度百科,当然只保留了最有价值的部分,代码部分完全是自己实现!简介哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,有点类似于数组,并且能在O(1)(冲突情况另算)下查找到元素。 基本概念设所有可能出现的关键字集合记为u(简称全集)。实际发生(即实转载 2015-08-05 19:34:47 · 5847 阅读 · 3 评论 -
桶排序算法详解
1. 桶排序介绍桶排序(Bucket sort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。当要被排序的数据内的数值是均匀分配的时候,桶排序时间复杂度为Θ(n)。桶排序不同于快速排序,并不是比较排序,不受到时间复杂度 O(nlogn) 下限的影响。桶排序按下面4步进行:转载 2015-08-06 17:15:30 · 11877 阅读 · 1 评论 -
【经典算法】——KMP,深入讲解next数组的求解
前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k;但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导论,32章 字符串匹配虽然讲到了对前后缀计算的正确性,但是大量的推理证明不大好理解,没有与程序结合起来讲。今天我在这里讲一讲我的一些理解,希望大家多多指教,如果有不清楚的或错误的请给转载 2015-06-09 11:53:02 · 403 阅读 · 0 评论 -
用户态和内核态堆栈
1、高位地址:栈(存放着局部变量和函数参数等数据),向下生长 (可读可写可执行)2、 堆(给动态分配内存是使用),向上生长 (可读可写可执行)3、 数据段(保存全局数据和静态数据) (可读可写不可执行)4、低位地址:代码段(保存代码)转载 2015-02-10 15:57:45 · 843 阅读 · 0 评论 -
C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域。数据段属于静态内存分配。 代码段: 代码段(code segment/tex转载 2015-02-10 15:46:50 · 503 阅读 · 1 评论 -
浅谈算法和数据结构: 四 快速排序
快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交换排序。快速排序也是一种采用分治法解决问题的一个典型应用。在很多编程语言中,对数组,列表进行的非稳定排序在内部实现中都使用的是快速排序。而且快速排序在面试中经常会遇到。本文首先介绍快速排序的思路,算法的实现、分析、优化及改进,最后分析了.NET 中列表排序的内部实现。转载 2014-11-09 21:01:12 · 585 阅读 · 0 评论 -
快速排序(C.A.R.Hoare版)
这个快速排序是快速排序的最初版本,是由C.A.R.Hoare设计的。基本思路: 1.将待排序数据存入一维数组中,然后以第一个值为基准值。起初i指向第一个元素,j指向最后一个元素之后的位置。 2.分别从两端遍历数组,直到i所指向的值比基准值大,以及j所指向的值比基准值小时,分别停止遍历,然后交换i,j所指向的值。 3.重复步骤2,直到i转载 2014-11-09 22:50:42 · 891 阅读 · 0 评论 -
快速排序 解析
快速排序法原理也是用了分治法,主要原理是将数组分为A[p..q-1] 和A[q+1..r],然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]。然后不断的递归,到最后就排序完成。上代码:[cpp] view plaincopy// QuickSort.cpp : 定义控制台应用程序的入口点。 //转载 2014-11-10 14:41:54 · 380 阅读 · 0 评论 -
char *c和char c[]区别
问题引入:在实习过程中发现了一个以前一直默认的错误,同样char *c = "abc"和char c[]="abc",前者改变其内容程序是会崩溃的,而后者完全正确。程序演示:测试环境Devc++代码运行结果2293628 4199056 abc2293624 2293624 abc2293620 4199056 abc#include using nam转载 2014-10-05 21:33:31 · 448 阅读 · 0 评论 -
全排列(含递归和非递归的解法)
全排列(含递归和非递归的解法)作者:bakari时间:2012.8.2-23:48 转载请注明出处:http://www.cnblogs.com/bakari/archive/2012/08/02/2620826.html 谢谢!全排列在近几年各大网络公司的笔试中出现的比较频繁首先来看看题目是如何要求的(百度迅雷校招笔试题)。用C++写一个函数,转载 2014-11-04 19:21:02 · 592 阅读 · 0 评论 -
第十六~第二十章:全排列,跳台阶,奇偶排序,第一个只出现一次等问题
第十六~第二十章:全排列,跳台阶,奇偶排序,第一个只出现一次等问题作者:July、2011.10.16。出处:http://blog.csdn.net/v_JULY_v。引言 最近这几天闲职在家,一忙着投简历,二为准备面试而搜集整理各种面试题。故常常关注个人所建的Algorithms1-14群内朋友关于笔试,面试,宣讲会,offer转载 2014-11-04 22:34:23 · 578 阅读 · 0 评论 -
typedef struct 用法详解和用法小结
1. 基本解释typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。2. typede转载 2014-11-27 20:54:32 · 457 阅读 · 0 评论 -
链表逆序
设链表节点为[cpp] view plaincopytypedef struct tagListNode{ int data; struct tagListNode* next; }ListNode, *List; 要求将一带链表头List head的单向链表逆序。分析: 1). 若链表为空或只有一个元素,则直接返回; 2转载 2014-11-27 17:08:00 · 344 阅读 · 0 评论 -
邻接表无向图之 C语言详解
上面的图G1包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)"共7条边。上图右边的矩阵是G1在内存中的邻接表示意图。每一个顶点都包含一条链表,该链表记录了"该顶点的邻接点的序号"。例如,第2个顶点(顶点C)包含的链表所包含的节点的数据分别是"0,1,3";而这"0,1,3"分别对应"A,B,D"的转载 2014-12-01 11:42:40 · 2691 阅读 · 1 评论 -
在一个文件中有10G个整数,乱序排列,要求找出中位数
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。关于中位数:数据排序后,位置在最中间的数值。即将数据分成两部分,一部分大于该数值,一部分小于该数值。中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位数为N/2与转载 2015-08-06 18:12:38 · 872 阅读 · 0 评论