kongkong
首页
归档
分类
标签
关于
Linux内核中的互斥操作(2)——自旋锁
* 本篇来看看多次在内核中出现的spin_lock——自旋锁,到底是个什么东西。。。→_→ * 内核中的spin_lock() spin_lock()源代码 static inline void spin_lock(spinlock_t *lock)//自旋锁的类型定义见下方 { #if SPINLOCK_DEBUG __label__ here; here: if
2020-07-01
Linux
Kernel
Linux内核中的互斥操作(1)——信号量
* 看了一段时间Linux内核源代码了,经常会在代码中看到down()、up()、spin_lock()、spin_unlock()、read_lock()、write_lock()、read_unlock()、write_unlock()等函数。本篇就先来看down()、up()是干什么的。。。它们的底层都是如何实现的。。。→_→ * down()(P操作) 内核中通过信号量(semapho
2020-07-01
Linux
Kernel
剑指Offer——(44)翻转单词顺序列
题目描述: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 实现如下: //这
2020-07-01
Data Structures and Algorithms
剑指Offer
剑指Offer——(43)左旋转字符串
题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 实现如下: //寻找规律 //将字符序列按向左移动的K位,划分为两部分 //将这两个部分分别
2020-07-01
Data Structures and Algorithms
剑指Offer
剑指Offer——(42)和为S的连续正数序列
题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?Good Luck! 实现如下: //初始little数值为1
2020-07-01
Data Structures and Algorithms
剑指Offer
剑指Offer——(41)和为S的两个数字
题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得它们的和正好是S。如果有多对数字的和等于S,输出任意一对即可 实现如下: //使用两个指针,分别指向排序数组的第一个元素和最后一个元素,它们是最小值和最大值 //将指针指向的值相加的和与S进行比较 //如果和比S小,则后移前指针 //如果和比S大,则前移后指针 //注意 //1.有可能不存在和为S的两个数,所有路径都有返回
2020-07-01
Data Structures and Algorithms
剑指Offer
剑指Offer——(40)数组中只出现一次的数字
题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 实现如下: //关键点是使用异或位运算符 //相同的数字异或结果为零 //如果数组中只有一个数字出现一次,那么异或的遍历这个数组,最后的结果就是那个数字 //如果此时变成有两个数字都出现了一次,那还按照之前的办法,最后的结果就是这两个数字的异或值 //解决方法: //将数组异或的遍历,求其
2020-07-01
Data Structures and Algorithms
剑指Offer
剑指Offer——(39)平衡二叉树
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 实现如下: //如果二叉树中的任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树 //利用对二叉树的后序遍历,自底向上的判断是否为平衡二叉树 //若某一结点不满足条件,则此树不是平衡二叉树 //若某一结点满足条件,就要计算此结点的深度,为后面的计算做准备 class Solution { public: bo
2020-07-01
Data Structures and Algorithms
剑指Offer
剑指Offer——(38)二叉树的深度
题目描述: 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 实现如下: //这代码真没有什么要说的。。。 //本题就是树的遍历的应用 //最长路径的长度为树的深度,所以当节点的左子树深度和右子树深度中的最大值求得后,加1即就是此节点的深度 class Solution { public: int TreeD
2020-07-01
Data Structures and Algorithms
剑指Offer
设计模式——抽象工厂模式
* 工厂模式解决了一部分问题,但还有一些缺点,所以这时抽象工厂模式应运而生。。。→_→ * 在阅读本文之前,需要了解一些知识点。。。请戳传送门——工厂模式 工厂模式与抽象工厂模式的区别 工厂模式中,在工厂子类中无论多么辛苦的制造产品子类,其实它们都同属一个父类 而在现实生活中,工厂不可能只制造一种产品。所以一个工厂子类有可能制造多种产品子类,而它们来源于不同的父类 抽象工厂模式的作用 将
2020-07-01
Design Patterns
设计模式
1
2
3
4
5
6
…
12
搜索
×
关键词