数据结构
文章平均质量分 85
solar一抹阳光
这个作者很懒,什么都没留下…
展开
-
单链表常见面试题及答案
一、单链表结点的删除0、删除单链表p指向的那个元素,(时间和空间复杂度尽量小)二、单链表的存取1、找出单链表的倒数第K个元素,(仅允许遍历一遍链表)2、找出单链表的中间元素,(仅允许遍历一遍链表)三、单链表与环的问题3、判断单链表是否有环(6形状)?4、如何找到环的入口?5、如何知道环的长度?6、带环链表的转载 2014-03-10 20:15:23 · 1441 阅读 · 0 评论 -
优秀博客推荐:各种数据结构与算法知识入门经典(不断更新)
转自:http://www.cppblog.com/cxiaojia/archive/2011/11/16/rumen.html转载 2014-05-26 15:18:00 · 1122 阅读 · 1 评论 -
教你如何迅速秒杀掉:99%的海量数据处理面试题
教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的转载 2014-05-26 15:27:26 · 837 阅读 · 0 评论 -
动态规划之矩阵链相乘
问题描述(详见算法导论P197-P198):已知:给定n个矩阵构成的一个矩阵链(A1, A2, ..., An),矩阵Ai的维数为pi-1×pi求:决定该矩阵链的乘法结合顺序(即加括号),使得矩阵链乘法的运行时间最短原创 2014-06-09 01:32:30 · 1706 阅读 · 0 评论 -
动态规划详解
一:lilu原创 2014-06-07 21:33:10 · 2636 阅读 · 0 评论 -
队列的链式存储与顺序存储
队列也有两种结构:顺序存储和链式存储一:队列的链式存储结构原创 2014-06-11 18:03:59 · 1270 阅读 · 0 评论 -
线性表的表示与实现
总的来说,线性表分为两大类:原创 2014-06-11 11:53:46 · 695 阅读 · 0 评论 -
栈的介绍
栈(stack),是一种线性存储结构,它有以下几个特点:(01) 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。(02) 向栈中添加/删除数据时,只能从栈顶进行操作。栈通常包括的三种操作:push、peek、pop。push -- 向栈中添加元素。peek -- 返回栈顶元素。pop -- 返回并删除栈顶元素的操作。原创 2014-06-11 15:45:53 · 624 阅读 · 0 评论 -
交换两个变量方法
将两个变量的值互换,相当简单的问题。假设有变量a、b: int a; int b;将a、b的值互换,代码为: int tmp = a; a = b; b = tmp;然而,如果要求不用中间变量,就交换变量的值,该怎么做呢?一个比较有效率且众所周知的方法就是三次异或操作: a = a ^ b; //a ^= b;原创 2014-05-28 11:30:54 · 923 阅读 · 0 评论 -
各种内部排序方法简述以及优越性比较和选取
首先回顾下各种排序的主要思路:一. 冒泡排序冒泡排序主要思路是:通过交换使相邻的两个数变成小数在前大数在后,这样每次遍历后,最大的数就“沉”到最后面了。重复N次即可以使数组有序。冒泡排序改进1:在某次遍历中如果没有数据交换,说明整个数组已经有序。因此通过设置标志位来记录此次遍历有无数据交换就可以判断是否要继续循环。冒泡排序原创 2014-05-29 17:38:56 · 1201 阅读 · 0 评论 -
bitmap应用及实现(哈希表)
当实现时间复杂度优化的时候,经常会用到hash表来存储一些数据,然后原创 2014-07-03 17:12:40 · 2378 阅读 · 0 评论 -
排序算法之交换排序
交换排序分为两类:1:冒泡排序2:快速排序原创 2014-05-27 18:04:20 · 1108 阅读 · 0 评论 -
二叉树的递归和非递归遍历
参考:原创 2014-06-12 23:36:00 · 877 阅读 · 0 评论 -
二叉树的深度优先遍历与广度优先遍历
深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。如右图所示的原创 2014-08-29 10:58:41 · 514 阅读 · 0 评论 -
排序归纳之插入排序
插入排序分为以下几类:1:直接插入排序2:折半插入排序3: 2-路原创 2014-05-26 17:41:56 · 1028 阅读 · 0 评论 -
动态规划之三角形求值问题
1:三角形求值问题将一个由N行数字组成的三角形,如图所以,设计一个算法,计算出三角形的由顶至底的一条路径,使该路径经过的数字总和最大。分析:拿到这个题目以后,先考虑要求解的问题:找一条路径,使路径上的结点数字之和最大。方法一:最简单也是最复杂的方法,利用分治法来解决。通过分析,不难写出如下表达式:sum[i] = a[i] + max(left.sum[i-1],r原创 2014-06-08 22:52:35 · 1562 阅读 · 0 评论 -
动态规划之最长公共子序列
一、最长公共子序列(LCS) 如果Z是X的一个子序列又是Y的一个最长公共子序列。例如,如果X = {A, B, C, B, D, A, B},Y = {B, D, C, A, B, A},则{B,C, B, A}是X和Y的一个LCS, 序列{B, D, A, B}也是,因为没有长度为5的或更大公共序列里。原创 2014-06-09 10:21:05 · 943 阅读 · 0 评论 -
c语言建立单链表及基于单链表的操作
Status InsertNode_rise(linklist head,ELEMENT ch){ linklist p,q,r; p = (linklist)malloc(sizeof(listnode)); if(!p){ printf("Memory allocation failure!\n"); exit(OVERFLOW);原创 2014-03-10 11:48:47 · 858 阅读 · 0 评论 -
平衡二叉树(AVL树)
目录1. AVL树的介绍2. AVL树的C实现3. AVL树的C实现(完整源码)4. AVL树的C测试程序参考:原创 2014-06-03 16:14:57 · 1327 阅读 · 0 评论 -
二叉查找树
参考链接:原创 2014-05-30 22:58:58 · 1217 阅读 · 0 评论 -
红黑树系列之原理和算法详细介绍
目录1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除概述:R-B Tree,又称为“红黑树”。本文参考了《算法导论》中红黑树相关知识,加之自己的理解,然后以图文的形式对红黑树进行说明。本文的主要内容包括:红黑树的特性,红黑树的时间复杂度和它的原创 2014-06-04 21:33:32 · 2502 阅读 · 1 评论 -
算法归纳
一:《算法归纳》之排序算法1:排序归纳之插入排序原创 2014-05-29 11:55:54 · 1279 阅读 · 0 评论 -
排序算法之归并排序
归并排序(Merge Sort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。一:原理1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。(1)合原创 2014-05-29 11:53:49 · 850 阅读 · 0 评论 -
B树原理及分析
B树是为磁盘或其他直接存储辅助存储设备而设计的一种平衡二叉查找树(通常说的B树是B-树,在1972年由R.Bayer和E.M.McCreight提出,B+树是B树的一种变形),B树与红黑树类似,但在降低磁盘I/O操作次数方面要更好一些,数据库就是通常用B树来进行存储信息。 B树的结点可以有许多子女,从几个到几千个不等,一个B树结点可以拥有的子女数是由磁盘页的大小所决定,这是因为一原创 2014-06-06 17:52:24 · 1311 阅读 · 0 评论 -
斐波那契堆(Fibonacci heaps)
canh原创 2014-06-07 12:12:10 · 5889 阅读 · 0 评论 -
贪心算法之活动安排问题
问题表述:设有n个活动的集合E = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si >= fj或sj >原创 2014-06-09 17:38:57 · 994 阅读 · 0 评论 -
贪心算法详解
贪心算法的两个重要因素:原创 2014-06-09 17:31:20 · 1340 阅读 · 0 评论 -
动态规划之装配线调度
题目:装配一辆汽车,有两条装配线分别有n个装配点,每条装配线在进出所花时间为e[i],x[i] (i=0,1),每个装配点所需时间a[i][j](i=0,1;j=0,1,...,n-1),从一条装配线i的第j个装配点到另一条装配线的第j+1个装配点所需时间t[i][j]。原创 2014-06-08 13:54:30 · 2215 阅读 · 0 评论 -
动态规划之钢条切割问题
钢条切割问题:给定一段长度为n英寸的钢条和一个价格表Pi( i=1, 2, ..., n ),求切割钢条方案,使得销售收益最大.例如:长度i12345678910价格Pi1589101717202430原创 2014-06-08 23:19:51 · 998 阅读 · 0 评论 -
动态规划之最优二叉搜索树
在看这张之前,最好看看我写的动态规划详解,里面都是讲理论基础,我下面的分析都是在此基础上进展的。原创 2014-06-09 10:46:46 · 2244 阅读 · 0 评论 -
学习算法之路(转)
第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来. 1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内)转载 2014-05-26 15:13:24 · 616 阅读 · 0 评论 -
排序算法之选择排序
选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 常用的选择排序方法:直接选择排序和堆排序。一:直接选择排序直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排原创 2014-05-29 11:50:49 · 1007 阅读 · 0 评论