2018年2月23日

数据结构的扩张

摘要: 前言:通常我们会遇到一些问题,采用一些标准的数据结构,如双链表、散列表或二叉查找数时,不能够满足操作要求,需要对这些数据结构进行扩张,添加一些额外的信息使得能够完成新的操作。附加的信息需要对数据结构的某些操作进行调整,这个是非常关键的步骤,决定着数据结构扩张是否能够实现。本章主要讨论了红黑树结构的扩 阅读全文

posted @ 2018-02-23 14:51 AlanTu 阅读(471) 评论(0) 推荐(0) 编辑

红黑树 - C++代码实现

摘要: 红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。 红黑树的每个节点上都有存 阅读全文

posted @ 2018-02-23 14:48 AlanTu 阅读(6801) 评论(0) 推荐(2) 编辑

红黑树

摘要: R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。 红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL 阅读全文

posted @ 2018-02-23 14:45 AlanTu 阅读(204) 评论(0) 推荐(0) 编辑

二叉搜索树

摘要: 摘要: 本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造的二叉查找树的期望高度为O(lgn),从而基 阅读全文

posted @ 2018-02-23 14:42 AlanTu 阅读(354) 评论(0) 推荐(0) 编辑

散列表

摘要: 摘要: 本章介绍了散列表(hash table)的概念、散列函数的设计及散列冲突的处理。散列表类似与字典的目录,查找的元素都有一个key与之对应,在实践当中,散列技术的效率是很高的,合理的设计散函数和冲突处理方法,可以使得在散列表中查找一个元素的期望时间为O(1)。散列表是普通数组概念的推广,在散列 阅读全文

posted @ 2018-02-23 14:41 AlanTu 阅读(2310) 评论(0) 推荐(0) 编辑

基本数据结构 - 二叉树

摘要: 摘要 书中第10章10.4小节介绍了有根树,简单介绍了二叉树和分支数目无限制的有根树的存储结构,而没有关于二叉树的遍历过程。为此对二叉树做个简单的总结,介绍一下二叉树基本概念、性质、二叉树的存储结构和遍历过程,主要包括先根遍历、中根遍历、后根遍历和层次遍历。 1、二叉树的定义 二叉树(Binary 阅读全文

posted @ 2018-02-23 14:39 AlanTu 阅读(300) 评论(0) 推荐(0) 编辑

基本数据结构 - 链表

摘要: 链表 链表与数组的区别是链表中的元素顺序是有各对象中的指针决定的,相邻元素之间在物理内存上不一定相邻。采用链表可以灵活地表示动态集合。链表有单链表和双链表及循环链表。书中着重介绍了双链表的概念及操作,双链表L的每一个元素是一个对象,每个对象包含一个关键字和两个指针:next和prev。链表的操作包括 阅读全文

posted @ 2018-02-23 14:35 AlanTu 阅读(246) 评论(0) 推荐(0) 编辑

基本数据结构 - 栈和队列

摘要: 摘要 本章介绍了几种基本的数据结构,包括栈、队列、链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合。本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下。 1、栈和队列 栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIF 阅读全文

posted @ 2018-02-23 14:34 AlanTu 阅读(299) 评论(0) 推荐(0) 编辑

中位数和顺序统计量

摘要: 摘要: 本章所讨论的问题是在一个由n个不同数值构成的集合中选择第i个顺序统计量问题。主要讲的内容是如何在线性时间内O(n)时间内在集合S中选择第i小的元素,最基本的是选择集合的最大值和最小值。一般情况下选择的元素是随机的,最大值和最小值是特殊情况,书中重点介绍了如何采用分治算法来实现选择第i小的元素 阅读全文

posted @ 2018-02-23 14:33 AlanTu 阅读(559) 评论(0) 推荐(0) 编辑

线性时间排序

摘要: 摘要: 本章先回顾了前面介绍的合并排序、堆排序和快速排序的特点及运行运行时间。合并排序和堆排序在最坏情况下达到O(nlgn),而快速排序最坏情况下达到O(n^2),平均情况下达到O(nlgn),因此合并排序和堆排序是渐进最优的。这些排序在执行过程中各元素的次序基于输入元素间的比较,称这种算法为比较排 阅读全文

posted @ 2018-02-23 14:30 AlanTu 阅读(370) 评论(0) 推荐(0) 编辑

快速排序

摘要: 快速排序 对于n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n2)的排序算法,虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序中最好的选择,因为它的平均性能非常好:它的期望时间复杂度是O(nlgn),而且O(nlgn)中隐含的常数因子非常小。 1、快速排序的描述 快速排序算法采用 阅读全文

posted @ 2018-02-23 14:29 AlanTu 阅读(286) 评论(0) 推荐(0) 编辑

优先队列

摘要: 1、概述 队列是一种满足先进先出(FIFO)的数据结构,数据从队列头部取出,新的数据从队列尾部插入,数据之间是平等的,不存在优先级的。这个就类似于普通老百姓到火车站排队买票,先来的先买票,每个人之间是平等的,不存在优先的权利,整个过程是固定不变的。而优先级队列可以理解为在队列的基础上给每个数据赋一个 阅读全文

posted @ 2018-02-23 14:27 AlanTu 阅读(399) 评论(0) 推荐(0) 编辑

堆排序

摘要: 一 堆 堆给人的感觉是一个二叉树,但是其本质是一种数组对象,因为对堆进行操作的时候将堆视为一颗完全二叉树,树中每个节点与数组中的存放该节点值的那个元素对应。所以堆又称为二叉堆,堆与完全二叉树的对应关系如下图所示: 二叉堆可以分为两种形式:最大堆和最小堆。在这两种堆中,结点的值都要满足堆的性质。 在最 阅读全文

posted @ 2018-02-23 14:26 AlanTu 阅读(194) 评论(0) 推荐(0) 编辑

树、二叉树基础

摘要: 刚看到堆排序,顺便记录一下关于树的一些基本概念: 前言 前面介绍的栈、队列都是线性结构(linear structure)。而树是非线性结构(non-linear structure)。因此,树中的元素之间一般不存在类似于线性结构的一对一的关系,更多地表现为多对多的关系。直观地看,它是数据元素(在树 阅读全文

posted @ 2018-02-23 14:24 AlanTu 阅读(335) 评论(0) 推荐(0) 编辑

分治法

摘要: 最大子数组问题 方法一:暴力求解方法 我们可以很容易地设计出一个暴力方法来求解本问题:简单地尝试没对可能的子数组,共有O(n2)种 #include<iostream> using namespace std; #define INT_MIN 0x80000000 int main() { int 阅读全文

posted @ 2018-02-23 14:15 AlanTu 阅读(2046) 评论(0) 推荐(0) 编辑

递归算法详细分析

摘要: 递归的理解与设计 递归算法:是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。 1,参考于书籍中的讲解: 递归的原理,其实就是一个栈(stack), 比如求5的阶乘,要知道5的阶乘,就要知道4的阶乘,4又要是到3的,以此 阅读全文

posted @ 2018-02-23 14:13 AlanTu 阅读(6778) 评论(0) 推荐(1) 编辑

算法基础

摘要: 2.1 插入排序 C++实现: #include<iostream> using namespace std; void InsertSort(int arr[],int n) { int i,j,key; for(i=1;i<n;++i) { key=arr[i]; j=i-1; while(j> 阅读全文

posted @ 2018-02-23 14:10 AlanTu 阅读(452) 评论(0) 推荐(0) 编辑

Linux文件系统详解

摘要: 从操作系统的角度详解Linux文件系统层次、文件系统分类、文件系统的存储结构、不同存储介质的区别(RAM、ROM、Flash)、存储节点inode。本文参考: http://blog.chinaunix.net/uid-8698570-id-1763151.html http://www.iteye 阅读全文

posted @ 2018-02-23 14:06 AlanTu 阅读(96916) 评论(3) 推荐(12) 编辑

fs/ext2/inode.c相关函数注释

摘要: 用数组chain[4]描述四种不同的索引,即直接索引、一级间接索引、二级间接索引、三级间接索引。举例说明这个结构各个域的含义。如果文件内的块号为8,则不需要间接索引,所以只用chain[0]一个Indirect结构,p指向直接索引表下标为8处,即&inode->u.ext2_i.i_data[8]; 阅读全文

posted @ 2018-02-23 14:00 AlanTu 阅读(639) 评论(0) 推荐(0) 编辑

块设备的读流程分析

摘要: 关于VFS的通用读,我们不做考虑,本文以如下函数为根,往下分析: do_generic_mapping_read(*ppos,*mapping,*desc) do_generic_mapping_read(*ppos,*mapping,*desc) do_generic_mapping_read(* 阅读全文

posted @ 2018-02-23 13:52 AlanTu 阅读(831) 评论(0) 推荐(1) 编辑

linux文件系统管理的工作原理

摘要: 一、系统在初始化时如何识别硬盘 1、系统初始时根据MBR的信息来识别硬盘,其中包括了一些执行文件就来载入系统,这些执行文件就是MBR里前面446bytes里的boot loader 程式,而后面的16X4的空间就是存储分区表信息的位置;如下图 2、在分区表中,主要储存了以下信息:(1)分区号,常见的 阅读全文

posted @ 2018-02-23 13:50 AlanTu 阅读(8283) 评论(0) 推荐(0) 编辑

Ext4文件系统架构分析(三)

摘要: ioctl源码分析之交换两个文件的物理extents 1. 交换两个文件的extents Ext4 的EXT4_IOC_MOVE_EXT命令用于交换两个文件的extents,实际上是交换两个文件的对应逻辑长度的数据的物理存储空间(见下图),也是EXT4文件系统碎片整理的基础。 用户可以通过ioctl 阅读全文

posted @ 2018-02-23 13:25 AlanTu 阅读(2971) 评论(0) 推荐(1) 编辑

Ext4文件系统架构分析(二)

摘要: Ext4 文件系统 ioctl功能概述 ioctl.c 源码功能概述 Ext4的ioctl提供给用户以下接口,以方便用户更改文件系统的各种设置和状态: (1) EXT4_IOC_GETFLAGS: 获取inode的标志位,用户获取当前的inode标志位信息; (2) EXT4_IOC_SETFLAG 阅读全文

posted @ 2018-02-23 13:23 AlanTu 阅读(4271) 评论(0) 推荐(1) 编辑

Ext4文件系统架构分析(一)

摘要: 本文描述Ext4文件系统磁盘布局和元数据的一些分析,同样适用于Ext3和Ext2文件系统,除了它们不支持的Ext4的特性外。整个分析分两篇博文,分别概述布局和详细介绍各个布局的数据结构及组织寻址方式等。感兴趣的看官敬请留意和指导! 1. Ext4文件系统布局综述 一个Ext4文件系统被分成一系列块组 阅读全文

posted @ 2018-02-23 11:15 AlanTu 阅读(26405) 评论(2) 推荐(0) 编辑

程序员面试宝典 - 总结

摘要: 1 x=x+1,x+=1,x++,哪个效率最高?为什么? 解析: x=x+1最低,因为它的执行过程如下: 1)读取右x的地址。 2)x+1 3)读取左x的地址 4)将右值传给左边的x(编译器并不左右x的地址相同)。 x+=1其次,其执行过程如下: 1)读取右x的地址 2)x+1 3)将得到的值传给x 阅读全文

posted @ 2018-02-23 10:57 AlanTu 阅读(2395) 评论(0) 推荐(1) 编辑

循环、递归、概率

摘要: 递归是程序设计中的一种算法。一个过程或函数直接调用自己本身或通过其他的过程或函数调用语句间接地调用自己的过程或函数,称为递归过程或函数。 例子一:打靶 面试1:一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种? 解析:靶上一共有10种可能——1环到10环,还有可能脱靶,那就是 阅读全文

posted @ 2018-02-23 10:53 AlanTu 阅读(436) 评论(0) 推荐(0) 编辑

面向对象总结

摘要: 1 structure和class的区别? structure和class的唯一区别就是默认的访问控制不同,structure默认是public,class默认是Private;structure也可以有构造函数、析构函数、成员函数等。 2 继承体系中为什么将析构函数声明为虚函数? 当你可能通过基类 阅读全文

posted @ 2018-02-23 10:50 AlanTu 阅读(256) 评论(0) 推荐(0) 编辑

队列中取最大值操作问题

摘要: 题目描述: 假设有这样一个拥有3个操作的队列: 1 Enqueue(v): 将v加入队列 2 DeQueue:使队列中的队首元素删除并返回此元素 3 MaxElement:返回队列中的最大元素 请设计一种数据结构和算法,让MaxElement操作的时间复杂度尽可能地低。 队列是遵守“先入先出”原则的 阅读全文

posted @ 2018-02-23 10:49 AlanTu 阅读(3334) 评论(0) 推荐(0) 编辑

优先队列的实现

摘要: 实现优先队列结构主要是通过堆完成,主要有:二叉堆、d堆、左式堆、斜堆、二项堆、斐波那契堆、pairing 堆等。 1. 二叉堆 1.1. 定义 完全二叉树,根最小。 存储时使用层序。 1.2. 操作 (1). insert(上滤) 插入末尾 26,不断向上比较,大于26则交换位置,小于则停止。 (2 阅读全文

posted @ 2018-02-23 10:48 AlanTu 阅读(2414) 评论(0) 推荐(0) 编辑

尾递归与Continuation

摘要: 怎样在不消除递归的情况下防止栈溢出?(无论如何都要使用递归) 这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,权当一次互联网资料的补充。 递归与尾递归 关于递归操作,相信大家都已经不陌生。简单地说,一个函数直 阅读全文

posted @ 2018-02-23 10:44 AlanTu 阅读(366) 评论(0) 推荐(0) 编辑

进程上下文与中断上下文

摘要: 1、前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文。看着很熟悉,半天又说不出到底是怎么回事,有什么区别。看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,今天好好结合书和网上的资料总结一下,加深理解。 2、用户空间与内核空间 我们知道现在操作系统都是采 阅读全文

posted @ 2018-02-23 10:38 AlanTu 阅读(2307) 评论(0) 推荐(0) 编辑

Linux驱动面试题总结

摘要: 1、 Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备。 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少实现open,close,read和write系统调用。字符终端、串口 阅读全文

posted @ 2018-02-23 10:32 AlanTu 阅读(10654) 评论(0) 推荐(1) 编辑

三十道linux内核面试题

摘要: 1. Linux中主要有哪几种内核锁? Linux的同步机制从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过渡;伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。 阅读全文

posted @ 2018-02-23 10:31 AlanTu 阅读(18333) 评论(0) 推荐(1) 编辑

三大文本处理工具grep、sed及awk的简单介绍

摘要: grep、sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了。只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍。 grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效 阅读全文

posted @ 2018-02-23 10:08 AlanTu 阅读(840) 评论(0) 推荐(0) 编辑

作为应聘者 面试结束时应该问面试官一些什么问题呢

摘要: 几乎所有的面试在结束时候都会留一些时间给应聘者来提问问题,不少应聘者都以没有问题来结束了整个面试过程,其实我感觉这个提问时间还是大有用处的,正确的问一些问题不但能让你对雇主有更好的了解,更有可能为你的面试加分甚至影响面试结果。那到底应该问一些什么问题呢?以下是我个人的一点意见,希望能给大家有所帮助。 阅读全文

posted @ 2018-02-23 10:07 AlanTu 阅读(1759) 评论(0) 推荐(0) 编辑

二叉树中常见的面试题

摘要: 1 用一个函数判断一棵树是否平衡 题目:实现一个函数检查一棵树是否平衡。对于这个问题而言, 平衡指的是这棵树任意两个叶子结点到根结点的距离之差不大于1。 注意,对于这道题,要审清题意。它并不是让你判断一棵树是否为平衡二叉树。平衡二叉树的定义为:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1, 阅读全文

posted @ 2018-02-23 10:05 AlanTu 阅读(11481) 评论(0) 推荐(0) 编辑

指针辨析:悬垂指针、哑指针、野指针、智能指针

摘要: 悬垂指针: 1:提出的原因: 请看下面的代码片段: 输出结果为: 得出结论:第二段程序中,由于fun()函数中的临时变量被销毁,故第二次输出时,p已经成为悬垂指针。 2:定义 指向曾经存在的对象,但该对象已经不再存在了,此类指针称为垂悬指针。结果未定义,往往导致程序错误,而且难以检测。 3:解决策略 阅读全文

posted @ 2018-02-23 10:03 AlanTu 阅读(646) 评论(0) 推荐(0) 编辑

du和df命令的区别

摘要: du和df命令都被用于获得文件系统大小的信息:df用于报告文件系统的总块数及剩余块数,du -s /<filesystem>用于报告文件系统使用的块数。但是,我们可以发现从df命令算出的文件系统使用块数的值与通过du命令得出的值是不一致的。 如下例: # du -s /tmp 返回如下值: 1292 阅读全文

posted @ 2018-02-23 10:00 AlanTu 阅读(2350) 评论(0) 推荐(0) 编辑

字符串函数汇总

摘要: 1 strcpy 为什么strcpy要有返回值? 返回strDest的原始值使函数能够支持链式表达式,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。 链式表达式的形式如: int iLength=strlen(strcpy(strA,strB)); 又如: cha 阅读全文

posted @ 2018-02-23 09:58 AlanTu 阅读(333) 评论(0) 推荐(0) 编辑

死锁原因及解决、避免办法

摘要: 死锁的条件 互斥条件(Mutual exclusion) :资源不能被共享,只能由一个进程使用。 请求与保持条件(Hold and wait):进程已获得了一些资源,但因请求其它资源被阻塞时,对已获得的资源保持不放。 不可抢占条件(No pre-emption) :有些系统资源是不可抢占的,当某个进 阅读全文

posted @ 2018-02-23 09:55 AlanTu 阅读(499) 评论(0) 推荐(0) 编辑

导航