摘要: 《Linux/Unix系统编程手册》读书笔记 目录第5章:主要介绍了文件I/O更深入的一些内容。原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行;这样可以避免竞争状态(两个或多个共享资源的进程或线程的运行结果是一个无法预期的顺序)。以独占方式创建一个文件:对文件是否存在的检查和创建文件属于同一个原子操作。防止新建文件的时候因为检查文件是否存在和新建文件之间发生中断(而其他进程也在新建相同文件名的文件),导致两个进程都认为自己是文件的创建者。向文件尾部追加数据:将文件的偏移量的移动与数据的写操作属于同一个原子操作。防止多个进程同时往同一个文件尾部添加数据导致数据混乱。 阅读全文
posted @ 2014-04-09 23:36 alan_forever 阅读(1862) 评论(1) 推荐(2) 编辑
摘要: 《Linux/Unix系统编程手册》读书笔记1 (创建于4月3日,最后更新4月7日)《Linux/Unix系统编程手册》读书笔记2 (创建于4月9日,最后更新4月10日)《Linux/Unix系统编程手册》读书笔记3 (创建于4月15日)《Linux/Unix系统编程手册》读书笔记4 (创建于4月2... 阅读全文
posted @ 2014-04-07 18:13 alan_forever 阅读(2725) 评论(2) 推荐(1) 编辑
摘要: 《Linux/Unix系统编程手册》读书笔记 目录最近这一个月在看《Linux/Unix系统编程手册》,在学习关于Linux的系统编程。之前学习Linux的时候就打算写关于Linux的学习记录,因为觉得自己学得不好,老是写不出东西。但是现在觉得学习记录应该坚持写,慢慢就会有收获,坚持写才可以锻炼自己的表达能力。《Linux/Unix系统编程手册》这本书的评价很高,但是个人觉得翻译得不太好。其实终究是因为自己的英文阅读能力太差和没什么钱,只能看翻译版。看了接近一个月,觉得这本书介绍的接口很详细,程序清单基本会提及到介绍的接口。个人觉得作为入门书应该是可以的,起码看完一遍会有初步的认识,而且作为参 阅读全文
posted @ 2014-04-03 16:48 alan_forever 阅读(5512) 评论(0) 推荐(1) 编辑
摘要: 《算法导论》学习记录目录红黑树是"平衡的"二叉查找树(PS: 关于二叉查找树的内容见链接)。普通的二叉查找树,在最坏情况下基本操作的运行时间为Θ(n),大部分的操作的最坏情况运行时间与树的高度成正比,对于相同的数据如何构造出一棵高效的二叉查找树(即高度尽量小)(如下图)图a为高效的二叉查找树,图b为低效的二叉查找树造成图b中的二叉查找树低效的原因在于建树的时候结点插入的顺序不恰当,选取关键字为2的结点(最小关键字结点)作为根结点使得所有的结点都位于根结点的右子树里。更糟糕是所有的结点都在同一条路上,这时候就相当于在链表上进行操作。但是普通的二叉查找树不会自动调整,使自己的尽 阅读全文
posted @ 2013-11-23 00:54 alan_forever 阅读(2595) 评论(0) 推荐(3) 编辑
摘要: 《算法导论》学习记录目录查找树是一种支持包括查找、插入、找最小值、找出最大值、找出前趋、找出后继、删除动态集合操作的数据结构。基本操作的时间与树的高度成正比,对于一棵含有n个结点的完全二叉树,基本操作的最坏情况运行时间为Θ(lgn),对于含有n个结点的树(不是完全二叉树),最坏的情况(线性链)运行时间为Θ(n)。二叉查找树的性质:x为二叉查找树的一个结点,x_l 为x的左子树中的一个结点,那么x_l存储的关键字小于或者等于x存储的关键字;x_r为x的右子树中的一个结点,那么x_r存储的关键字大于或者等于x存储的关键字。如下图所示:二叉树可以用链表结构来表示,每个结点除了关键字和卫星数据外,还有 阅读全文
posted @ 2013-11-07 22:58 alan_forever 阅读(1830) 评论(2) 推荐(5) 编辑
摘要: 《算法导论》学习记录目录散列表(哈希表)是根据关键字直接访问内存存储位置的数据结构,仅支持插入、查找、删除操作。在最坏情况下,查找一个元素的时间为Θ(n),而在一些合理的假设下,查找一个元素的期望时间为O(1)。散列表是普通数组的推广。对于普通数组: 1、我们可以将关键字为k的元素存到数组下标为k的位置里。 2、如果有一个关键字k,我们直接查看数组下标为k的位置。这种方式为直接寻址方式。但是这种方式有不足:只适用于关键字的全域比较小,而且没有两个元素的关键字完全相同。而显示中存储的关键字集合会比关键字的全域相对小很多。下图为直接寻址表:代码实现如下:(刚开始打算直接开个装元素的数组... 阅读全文
posted @ 2013-10-27 20:49 alan_forever 阅读(5227) 评论(3) 推荐(2) 编辑
摘要: 《算法导论》学习记录目录基本的数据结构是很基础的东西,而且运行时间也很容易看出来,所以本文也是简单地提及一些性质,主要还是通过一些练习来熟悉它们的性质。(PS:无聊翻开TAOCP的第一卷,发现第二章也是讲一些数据结构,而且讲得很详细。如果明年年初计划可以完成,就应该开始看TAOCP,继续努力吧!)栈栈是先进后出(后进先出),就好像洗盘子的时候,你最先放的盘子在最底,下次拿出来洗,就是最后才拿出来。(例子举得有点搓。。。)具体操作为进栈、出栈(也叫压入、弹出)。因为是基于数组来实现栈,所以不仅仅要注意下溢(空栈出栈),还要注意上溢(满栈进栈)。 1 #include 2 #include 3.. 阅读全文
posted @ 2013-10-20 11:49 alan_forever 阅读(2563) 评论(4) 推荐(0) 编辑
摘要: 《算法导论》学习记录目录本章主要讲了如何在一个集合里找出第i个顺序统计量(即第i个小的元素),可以定义选择问题(n个元素中的第i个小的元素,即在n个元素里找出一个元素,这个元素大于其他i-1个元素)。如果我们用堆排序或合并排序(Ο(nlgn))对该集合进行排序,然后直接找出第i个元素即可。这样一来,选择问题运行时间为Ο(nlgn)。但是本章讲其他两种方法可以使的选择问题的运行时间为O(n),分别为以期望线性时间做选择和最坏情况线性时间的选择。(PS:本人能力不足,对于最坏情况线性时间的选择的算法还在看,不能将其实现。。。。所以下文不会出现。。。)最小值最大值最小值和最大值都可以通过n-1次比较 阅读全文
posted @ 2013-10-11 22:03 alan_forever 阅读(1945) 评论(2) 推荐(0) 编辑
摘要: 大一下学期买了《算法导论》打算玩ACM的时候学,后来ACM玩得不伦不类,算导也看得不伦不类,只看算法实现,忽略了很多东西。现在(大三),觉得之前大一大二都浪费了很多时间,也渐渐发现之前忽略很多基础。不知道为什么想把算法导论认真看一遍,把练习、思考题也做一做、看一看。顺便巩固一下C的编程能力,还有提高一下自己的表达能力。毕竟就算已经大三了,也还是要好好学习,不停地学习才是真正的生活。该文章为本人学习《算法导论》的记录的目录,所有关于《算导》的文章都会在下文的链接里。(本人能力有限,如有错误,欢迎指出。)第二章 插入排序(3种代码实现) 习题第六章 堆排序(代码实现) 习题与... 阅读全文
posted @ 2013-10-10 13:56 alan_forever 阅读(4212) 评论(3) 推荐(2) 编辑
摘要: 《算法导论》学习记录目录比较排序:各个元素的次序基于输入元素间的比较。下界为Ω(nlgn)。线性排序:用非比较的操作来确定元素的顺序。决策树比较排序可以抽象地视为决策树,表示某排序算法对输入元素的所有比较。下图为插入排序对于三个元素的输入序列上的决策树:对于n个元素,排序结果有n!种排列,对应与决策树上的每一个叶子。一个正确的排序算法必须可以产生每一种排列,对于决策树来说就是从根结点出发可以到达每一个叶结点。在决策树中,从根到任一个叶结点之间最长路径的长度表示对应的排序算法中最坏情况下的比较次数。因此,一个比较排序的最坏情况比较次数与其决策树的高度相等。所以可得任意一个比较排序在最坏情况下,都 阅读全文
posted @ 2013-10-02 23:30 alan_forever 阅读(2263) 评论(0) 推荐(0) 编辑