![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 77
canger_
Linux C/C++、golang、云原生
展开
-
Linux多线程间同步
竞争与同步当多个线程同时访问其所共享的进程资源时,需要相互协调,以防止出现数据不一致、不完整的问题。这就需要线程同步。一、信号量信号量是一个计数器,用于控制访问有限共享资源的线程数。头文件:semaphore.h int sem_init (sem_t* sem, int pshared,unsigned int value);功能:创建信号量sem - 信号量ID,输出。pshared - 一般取0,表示调用进程的信号量。 非0表示该信号量可以共享内存的方式, 为多个进程所共享原创 2021-03-13 00:24:56 · 361 阅读 · 0 评论 -
斐波那契数列与台阶问题
关于斐波那契数列,以下来自于百度百科斐波那契数列(Fibonacci sequence),又称黄金分割数列、指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)即第三个数为前两个数的和斐波那契数列编程实现题目:现在要求输入一个整数n,请你...原创 2018-09-27 13:25:06 · 1336 阅读 · 0 评论 -
堆排序原理
堆堆实际上是一棵完全二叉树。其任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。大顶堆:堆的每个父节点都大于其孩子节点,因此根节点为堆中最大值;小顶堆:堆的每个父节点都小于其孩子节点,根节点为堆中最小值;堆的存储:一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结点下标分别为2i+1和2i + 2。如下为堆和其数组的表达(堆的根节点以下标0开...原创 2018-09-21 00:21:22 · 5907 阅读 · 2 评论 -
前序中序构建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:二叉树根节点为前序遍历序列的第一个,则通过根节点的值找到根节点在中序遍历中的位置,由中序遍历特点,在根节点左边的都是根节点的左子树,右边的都是右子树...原创 2018-08-26 23:42:17 · 951 阅读 · 0 评论 -
树、二叉树概念与遍历
树 定义:树是结点的有限集合(n>0),它有且只有一个根结点,记为T。 特点: 除根结点T外,树的其余结点分成为m(m>0)个互不相交的集合T1,T2, …,Tm,每个集合又都是树,此时根结点T称为Ti的父结点,Ti称为T的子结点(1≤i≤m)。 概念: 度: 一个结点的子结点个数称为该结点的度 ...原创 2018-07-20 18:33:04 · 374 阅读 · 0 评论 -
链表逆序、链表按指定个数逆序
链表:是一种链式存储的结构,它不要求逻辑上相邻的元素在物理位置上也相邻。因此,为了表示每个数据元素ai与其后继数据元素ai+1之间的逻辑关系,对于数据元素ai来说,它不仅要存储自己的本身信息,还需要存储一个指示其直接后继的信息,这两部分组成数据元素ai的存储映像,称为结点。结点包括两个域:存储本身信息的数据域和存储直接后继位置的指针域。有这样n个结点链接成的链表为线性表的链式存储。一般...原创 2018-07-05 23:54:26 · 409 阅读 · 0 评论 -
排序算法02——插入排序(直接、折半)、快速排序
插入排序:插入排序的思路就是,前面的数组已经有序(从第二个数看来,第一个数已经有序了,它只要找到自己的插入点插入就行了;然后第三个数看前两个数都已经有序了....以此类推),下标为i的这个值依次与前面的值比较,找到合适的地方就可以直接插入了。但是,数组的插入是需要插入位以后的数据全部后移的,所以我们要边比较边移位,这样才能在找到合适位置的情况下直接插入。代码如下:void insert_sort(...原创 2018-06-04 20:04:12 · 1465 阅读 · 0 评论 -
排序算法01——冒泡排序、选择排序、鸡尾酒排序、计数排序
选择排序:选择排序算是非常简单入门的排序方法了。原创 2018-06-04 12:47:33 · 510 阅读 · 1 评论