- 博客(15)
- 收藏
- 关注
原创 数据结构学习笔记:堆排序
堆的定义: 堆是一棵完全二叉树。每个结点的值都大于等于该结点的孩子结点的堆称为大顶堆,反之则称为小顶堆。 为了使用简便,我们就用数组Heap来存储堆结构,Heap[1]存储堆的根结点,如果当前遍历的结点为Heap[i],则Heap[2i]和Heap[2i+1]分别为其左右孩子结点。堆排序 在了解了堆结构定义之后,我们就可以利用堆结构来进行排
2016-01-27 19:41:46
248
原创 数据结构学习笔记:平衡二叉树
何为平衡二叉树 平衡二叉树(AVL树)是对二叉排序树的一种改进。二叉排序树有一个缺陷,那就是针对一个集合中数据不同的顺序,二叉排序树创建出来的形态会有很大的差别,而深度与完全二叉树相同的形态的查找速度是最快的,而最差的形态就是形如链表的斜树。例如下图: 如果要查找7结点,则形如左图的二叉排序树的查找函数只用比较3次,而右图则需要查找7次。平衡二叉树就是为了
2016-01-23 20:23:50
363
原创 数据结构学习笔记:平衡二叉树
何为平衡二叉树 平衡二叉树(AVL树)是对二叉排序树的一种改进。二叉排序树有一个缺陷,那就是针对一个集合中数据不同的顺序,二叉排序树创建出来的形态会有很大的差别,而深度与完全二叉树相同的形态的查找速度是最快的,而最差的形态就是形如链表的斜树。例如下图: 如果要查找7结点,则形如左图的二叉排序树的查找函数只用比较3次,而右图则需要查找7次。平衡二叉树就是为了
2016-01-22 21:21:51
143
原创 数据结构学习笔记:二叉排序树
何为二叉排序树 二叉排序树(Binary Sort Tree),又称二叉搜索树。它是一棵具有以下性质的二叉树:若根结点的左子树非空,则其左子树上所有结点的值都小于它。若根结点的右子树非空,则其右子树上所有结点的值都大于它。根结点的左,右子树也分别都为二叉排序树。
2016-01-22 20:16:14
315
原创 数据结构学习笔记:利用哈夫曼编码实现文件的压缩与解压
原理: 利用哈夫曼树对文件中的字符进行重新编码,也就是根据文件中出现的所有字符的频率来创建哈夫曼树,然后生成哈夫曼编码来对文件中的所有字符进行重新编码,使文件中出现频率高的字符的编码变短,从而实现文件的压缩存储。相应的,解压过程也就是对文件按照哈夫曼编码的译码过程。分析: 无论是什么文件,它最终都是以二进制形式存储到
2015-12-01 19:57:39
1805
原创 c++学习笔记:函数传参三种方式的不同
c++中的三种传参方式:值传递。形如: void func(int temp) ;地址传递。形如:void func(int *temp) ;引用传递。形如:void func(int &temp) ;三种传参方式的作用与优点:值传递:在传递时会自动将传入的实参复制一份,只将实参的副本传入函数,在函数中对参数的修改不会影响到原变量。(此种传递方式需要注意,在
2015-11-03 17:40:56
688
原创 数据结构学习笔记:马踏棋盘
课题描述: 从任意初始位置开始,将象棋中的马按照移动规则走完尺寸为8*8的棋盘。运算完成后输出正确路径。课题分析与设计方案: 针对题目,我们来一步一步地进行分析。首先,从题目我们可以很容易分析出“马踏棋盘”问题实际上是实现一个深度优先搜索的过程。马在每一次进行移动的时候,有八个后继点供选择(其中有的后继点越界或已经走过,需要加入判断函数来筛选合法后继点
2015-10-21 20:07:13
462
原创 数据结构与算法学习笔记:栈与队列
基本定义: 首先,栈与队列都属于线性表的范畴。所以,它们都具有线性表的基本属性:线性表中的每一个元素都是一对一的关系,除了表头结点与表尾结点 (如果有的话,线性表可以为空,即含有零个元素) 之外,表中每一个结点的都有且仅有一个前驱结点和一个后继结点。 而栈和队列这两种数据结构,是在线性表的基础上,对其操作方法进行了限制,从而产生了不同的用法和用途
2015-09-17 20:19:50
284
原创 Linux学习笔记:信号基础
信号简介:1> 信号的来源:2> 信号的种类:信号处理:1> 信号的捕捉与处理:2> 信号的发送:3> 信号的屏蔽:
2015-08-04 14:31:24
356
1
原创 Linux学习笔记:线程互斥锁
线程互斥锁作用:线程互斥锁通过锁机制来实现线程间的同步。在同一时刻,线程互斥锁只允许一个线程执行一个关键部分的代码。线程互斥锁用法:1) 操作互斥锁的函数:pthread_mutex_init () //初始化一个互斥锁 pthread_mutex_destory() //注销一个互斥锁pthread_mutex_lock() //给指定互斥锁加锁,如果不成功,则线程阻塞等
2015-08-03 11:11:17
310
1
原创 Linux学习笔记:线程私有数据
在学习线程操作的过程中,我一直对线程私有数据的作用很困惑,不知道它到底有什么作用,但经过一段时间的探索后,我总结了一部分关于线程私有数据的用法,如果有不对或者不够详细的地方,请指出。线程私有数据的实现:线程的私有数据采用了一种被称为 "一键多值" 的技术,即一个键对应多个数值。操作线程私有数据的函数主要有4个:1> pthread_key_create();
2015-07-30 17:04:20
342
2
原创 Linux学习笔记:文件权限 知识点小结
Linux文件的基本权限有9个,分别是owner,group,others三种身份各自的三种权限:r (read,读),w (write,写),x (execute,执行)。 其中,可以用数字来代表各个权限: r : 4 w : 2 x : 1
2015-07-27 11:06:12
357
1
原创 c语言学习笔记:命令行参数与命令行分析函数getopt()
初识c语言时,我一直将main函数写作 int main(void),但随着学习的深入,我了解到main函数身为一个函数,当然也可以接收输入的参数,它的参数就是进程开始时输入的命令。所以main函数的完整形式应该写作:int main(int argc,char *argv[]),其中argc是一个int型变量,储存命令参数的个数,argv是一个指针数组名(所以char *argv[]
2015-07-23 11:39:50
535
2
原创 Linux学习笔记:shell重定向功能中dup/dup2系统调用的作用
dup和dup2两个系统调用的作用都是拷贝文件描述符。 在man手册中查询dup和dup2的原型如下: #include int dup(int oldfd); int dup2(int oldfd, int newfd); dup用于复制oldfd参数所指的文件描述符,当复制成功时返回最小的尚未被使用
2015-07-21 19:48:42
711
1
原创 Linux下实现getch()函数功能
学习c语言之初,我在写一些小程序时常会用到getch()函数,用以达到暂停程序或按任意键继续的效果。但是getch()函数并非c标准函数,故在Linux系统中想要实现getch()函数的功能需要自己进行编写。 首先需要清楚的是c标准库中的getchar()函数和getch()函数的区别。 getchar()函数,是从键盘缓冲区中读取一个字符,遇到回车键时返回该字符的ASCII码,若
2015-07-19 09:19:59
1444
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人