- 博客(17)
- 收藏
- 关注
原创 在Ubuntu上搭建Rust开发环境
早几个月前就对Rust产生了极大的兴趣,一直没有时间来学习一下,今天偶然又看到了一篇关于Rust的推文,实在忍不住了。具体的教程当然是官网的最为详细:https://rustlang-cn.org/环境搭建:https://rustlang-cn.org/office/rust/book/getting-started/ch01-01-installation.html开始编程:htt...
2019-08-02 19:00:42
3612
原创 信号量的几点理解
信号量在各种操作系中都作为基本同步或通信机制,经过一段时间的应用和总结,现归纳如下,有错误之处来日再改。信号量用于进程/线程同步/通信,大到Linux,Windows,小到FreeRTOS,RT-Thread等等都能见到她靓丽的身影。根据用途和常见使用场合细分为以下几种:1. 二值信号量二值信号量一般用于中断,在硬件中断中give信号量(V操作),在软中断(即中断处理操作)中take信...
2019-07-22 10:57:19
1051
原创 对Linux线程进程的个人理解
0 对Linux线程进程的几点个人理解事情太多,好久没写博客了。接触Linux也有几年时间了,虽然因为各种原因不能一直专心来研究Linux,但也做了不少了解,几分心得体会暂且记下,日后再补。1.1 进程线程创建Linux的进程创建方式和Windows很不一样,Windows对进程和线程创建有着明确的界定,分别用CreateProcess和CreateThread。Linux使用fork...
2019-06-26 17:09:28
148
原创 排序(8)--快速排序优化
对快速排序的优化可以从以下4点着手:枢轴选取优化; 优化不必要的交换; 对小数组排序的优化方案; 优化递归操作。 1、快速排序的性能在很大程度上取决于枢轴的选取,若枢轴值正好处于序列的中间,那就可以将序列分为差不多相等的小数值集合和大数值集合;最坏情况下是枢轴选择了最大值或最小值。因此选取固定位置的值作为枢轴的方法是不合理的。改进的方法很多,有随机选取法、三数取中法、九数取中法等等...
2018-08-10 21:27:55
196
原创 排序(7)--快速排序
一、基本快速排序1、快速排序本质上是冒泡排序的升级版,都属于交换排序;它的实现是增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,将关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动交换次数。2、快速排序的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的小,则可对这两部分记录进行排序,以达到整个序列有序的目的。...
2018-08-08 20:52:08
247
原创 排序(6)--归并排序
1、前面说到直接插入排序的效率要比选择和冒泡高,特别是对于基本有序的序列,直接插入排序更有优势;而归并排序就是利用这种特点,先使子序列基本有序,然后逐渐合并序列(利用插入),最后使整个序列有序。归并在数据结构中的定义就是将两个或两个以上的有序表组合成一个新表的过程;归并排序就是利用归并的思想实现的排序的方法,它的原理是:假设有n个记录,则可以看成n个有序子序列(每个子序列长度为1),然后两两归并得...
2018-07-29 19:39:09
217
原创 排序(5)--堆排序
1.堆堆这种数据结构其实就是完全二叉树,堆分为两种,大顶堆和小顶堆。因此,堆是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值称为大顶堆;每个节点的值都小于或等于其左右孩子节点的值称为小顶堆。2.堆排序算法堆排序就是利用堆这种数据结构进行排序的方法。它的基本思想是:将待排序序列构造成一个大顶堆或小顶堆,此时最大值或最小值就是堆顶的根节点,然后将其取出放入数组;然后对...
2018-07-26 18:45:01
404
原创 排序(4)--直接插入排序和希尔排序
一、直接插入排序每趟都会判断一下要处理的记录与前面已经排好的记录之间的大小关系,若需要排序,则更改下标(数组下标),将已处理的记录后(前)移;下标移动完成后,然后再将记录插入到正确的(空出的)位置。void insert_sort(SqList *L){ int i,j; for(i=2;i <= L->length;i++){ if(L-&...
2018-07-25 19:41:26
120
原创 排序(3)--简单选择排序
简单选择排序原理很简单,就是该出手时再出手,话不多说,先上代码:void SelectSort(SqList *L){ int i,j,min; //min为最小值下标 for(i=1;i < L->length;i++){ min=i; //将最小值下标置为当前下标 for(j=i+1;j <= L->length...
2018-07-20 14:30:04
135
原创 排序(2)--冒泡排序
冒泡排序有三种写法,第一种严格意义上来说不是冒泡排序,只是简单的交换排序,效率低下,此处不说,只介绍第二和三种。1.基本冒泡排序//对表L做冒泡排序void BubbleSort(SqList *L){ int i, j; for(i=1;i < L->length;i++){ for(j=L->length-1;j >= i;...
2018-07-20 10:49:23
119
原创 排序(1)--基本概念
1.对含有n个记录的序列,使其成为一个按关键字有序的序列的操作称为排序。2.排序可以按一个关键字,也可以按多个关键字组合排序。3.直接在内存中操作的称为内排序,需要内外存交互的称为外排序。4.基本的简单排序算法有:冒泡排序、简单选择排序、直接插入排序;改进的排序算法有:希尔排序、堆排序、归并排序、快速排序、等等。5.排序经常用到的数据结构:#define MAXSIZE 10...
2018-07-20 09:51:45
208
原创 查找(5)--散列查找
1.基本概念散列又称哈希(hash),散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置addr=f(key)。散列技术既是一种存储方法又是一种查找方法:存储时通过散列函数(哈希函数)计算出记录的散列地址,并将记录存入此地址;查找时,同样通过散列函数计算出记录的散列地址,然后按此地址访问该记录。上述方法在理想情况下的效率非常高,但是实际...
2018-07-19 17:08:52
340
原创 查找(4)--动态查找与B树
前面所述的二叉排序树和平衡二叉树对于动态查找表是不错的解决方法,但是它们都需要在内存中来处理,当数据量很大时这是不可行的,这种情况下可使用B树来解决。B树是一种平衡的多路查找树,在有限内存的情况下非常适合。它的数据组织结构类似于一级级的链表(不恰当的类比),只不过数据之间的指针不是指向本链表的下一个节点,而是指向下一级链表(例如硬盘的下一页)。在一个典型的B树应用中,要处理的硬盘中的数据量巨大...
2018-07-19 16:21:37
273
原创 查找(3)--动态查找表与二叉搜索树
一、二叉排序树前面说过在查找时需要进行插入和删除操作的的查找表--动态查找表,对于动态查找表数据结构的组织我们使用二叉排序树。二叉排序树又称二叉查找树,当其非空时具有以下性质:若左子树非空则左子树上所有节点的值均小于它的根节点的值; 若右子树非空则右子树上所有节点的值均大于它的根节点的值; 它的左右子树也分别为二叉排序树。构造二叉排序树不是为了排序,而是为了方便查找和插入删除操作...
2018-07-18 22:38:46
213
原创 查找(2)--查找算法
1.顺序表查找又称线性查找,是最基本最简单的查找技术,它从表中的第一个或最后一个开始逐个与给定项比对。2.有序表查找:对线性表做了有序排列后再做查找。常用的方法有折半查找(二分查找)、插值查找、斐波那契查找等。3.索引查找事实上服务器等的数据增长非常快,这种海量数据通常是按时间先后顺序存储的,对其排序的代价高昂。对于这样的查找表一般使用索引技术。索引就是把一个关键字与它对应的记录相关联...
2018-07-18 16:12:31
153
原创 查找(1)--入门概念
查找分为静态查找和动态查找。静态查找的主要操作有:(1)查询某个特定的数据元素是否在对象查找表中(2)检索某个特定的数据元素和各种属性动态查找是在查找的过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素:(1)查找时插入数据元素(2)查找时删除数据元素 为提高查找效率要设计适合查找的数据结构,这种面向查找的数据结构称之为查找结构。对于静...
2018-07-17 11:07:30
116
原创 图论最短路径问题
Dijkstra算法是一种贪心算法,常用于解决单源最短路径问题,算法复杂度O(n2)。Floyd算法是一种动态规划算法,常用于解决多源最短路径问题,其本质上是一种类似于对Dijkstra算法的再一次调用,故其算法复杂度为O(n3)。...
2018-07-16 19:55:05
185
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人