自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CCPP Blog

结构、算法、c、c++

  • 博客(9)
  • 资源 (39)
  • 收藏
  • 关注

原创 linux系统编程:线程同步-信号量(semaphore)

线程同步-信号量(semaphore)生产者与消费者问题再思考在实际生活中,只要有商品,消费者就可以消费,这没问题。但生产者的生产并不是无限的,例如,仓库是有限的,原材料是有限的,生产指标受消费指标限制等等。为了进一步,解决好生产者与消费者问题,引入信号量进机制。信号量信号量(semaphore)是互斥量的升级版:互斥量的状态为0或1,而信号量可以为n。也就是说,使用互斥量时,最多允许一个线程进入关键区,而信号量允许多个,具体值是信号量当前的内部值。相关函数

2015-07-26 18:00:46 3861 1

原创 linux系统编程:线程同步-条件变量(cond)

线程同步-条件变量生产者与消费者问题再引入条件变量之前,我们先看下生产者和消费者问题:生产者不断地生产产品,同时消费者不断地在消费产品。这个问题的同步在于两处:第一,消费者之间需要同步:同一件产品只可由一人消费。第二,当无产品可消费时,消费者需等待生产者生产后,才可继续消费,这又是一个同步问题。详细了解:生产者消费者问题。条件变量条件变量是利用线程间共享的全局变量进行同步的一种机制,并且条件变量总是和互斥锁结合在一起。相关函数

2015-07-26 11:29:10 1803

原创 linux系统编程:线程同步-读写锁(rwlock)

线程同步-读写锁(rwlock)读写锁读写锁是互斥量的细化:显然,只有对全局资然进行写入操作时,才需要同步;在对全局资然进行读取操作时,是不需要锁的。pthread_rwlock_tpthread_rwlock_initpthread_rwlock_destroypthread_rwlock_rdlockpthread_rwlock_wrlockpthread_rwlock_tryrdl

2015-07-25 23:16:53 2238

原创 linux系统编程:线程同步-互斥量(mutex)

线程同步-互斥量(mutex)线程同步多个线程同时访问共享数据时可能会冲突,于是需要实现线程同步。一个线程冲突的示例

2015-07-25 17:49:11 1618

原创 linux系统编程:线程原语

线程原语线程概念 线程(thread),有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。更多详细解释看百度百科:线程。在Linux shell下通过命令 $ ps -Lf pid 查看指定pid号下的所有线程。线程之间的共享与非共享这里的线程是指同一进程下的线程。共享: 1.文件描述符表 2.每种信号的处理方式 3.当前工作目录 4.用户ID和组ID

2015-07-17 19:25:30 2392

原创 linux系统编程:进程原语

进程原语1. 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 2. 进程环境 在libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。用以下代码可以查看当前进程的所有环境变量的信息。

2015-07-15 19:35:48 3512 3

原创 linux系统编程:进程间通信-mmap

进程间通信-mmap#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);int munmap(void *addr, size_t length); mmap本质是把内存与硬盘上的文件同步。某块内存中的内容会同步到硬盘文件上,即把文件映射到内存。故通过对同一文件的读写达到进程间的通信。参数解释:addr:指定对哪儿块内存实行映射。NULL表示

2015-07-15 19:23:38 1875

原创 linux系统编程:进程间通信-fifo

进程间通信-fifo进程间通信的另一种方式是fifo。fifo是另一种管道:有名管道。从名字可以看出,它也是队列。使用fifo通信前,得先创建fifo

2015-07-15 18:23:55 1561

原创 linux系统编程:进程间通信-pipe

进程间通信-pipe进程间通信每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。pipe管道(pipe)就是一项基本的进程间通信的方法。

2015-07-15 17:13:10 1478

前缀、中缀、后缀表达式

利用STL中stack,解析前、后缀表达式,并将中缀表达式转换到相应的前、后缀表达式。

2015-06-23

去除停用词.c

使用C语言,根据停用词表,对指定文件的内容扫描,从而删除文件中出现的停用词。

2015-06-22

大整数的加、减、乘、除

使用C++语言,实现大整数的加、减、乘、除。使用到了标准库的string类型。关键是逻辑上的处理。

2015-06-10

十六进制数转化为八进制数

把位数在10W以内的十六进制数成功转化为八进制数,思想是:先转化为2进制数,再把2进制数转换为8进制数。

2015-03-17

函数模板模拟printf

利用C++中的函数模板简易模拟printf()函数。设计的知识点包括函数模板、可变参数等。

2015-02-17

外排序-多路归并

外排序问题的出现,主要是因为内存不够。当需要排序的数据量过多,以至于无法一次性把所有的数据都放入内存,这导致了外排序问题的出现。解决大数据量排序的方法是:先分块排序,后进行块合并。

2014-08-23

最小生成树:Prim算法

使用Prim算法求解图的最小生成树,其中图用邻接矩阵存储。

2014-08-05

图:FLoyd算法

使用Floyd算法,求解点对之间的最短距离。图结构使用邻接矩阵存储。

2014-08-04

求解单源最短路径:Dijkstara算法

使用Dijkstra算法求解单源最短路径问题,不仅求出最短路径,同时给出最短路径序列。

2014-08-03

有向图的拓扑排序

对于有向图进行拓扑排序,图使用邻接矩阵的存储结构。

2014-08-03

图的遍历:深度优先、广度优先

在邻接矩阵的存储结构下,实现图的深度优先遍历和广度优先遍历。

2014-08-02

图的实现:邻接表

使用邻接表实现图结构,无向的、有向的、无权的和有权的都可支持。

2014-08-01

图的实现:邻接矩阵

使用邻接矩阵实现图结构,无论是有向图、无向图、带权图还是无权图,都可以指定。

2014-07-31

模式匹配:KMP算法

使用KMP算法实现模式匹配,包括next数组的求解,kmp算法的实现。关键代码有详细注释。

2014-07-23

哈夫曼树&哈弗曼编码

哈夫曼树 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。用c++实现构造哈夫曼树、哈夫曼编码。

2014-07-12

桶排序(二维数组)

桶排序(Bucket Sort)是对基数排序的一个变种。在排序过程中没有用到计数数组,而是用不同的桶来暂时存储关键字。使用二维数组模拟桶。

2014-07-11

桶排序(静态队列)

桶排序(Bucket Sort)是对基数排序的一个变种。在排序过程中没有用到计数数组,而是用不同的桶来暂时存储关键字。使用静态队列模拟桶,实现桶排序。

2014-07-11

二叉堆:最大堆

使用c++实现最大堆。提供常见操作,如插入、删除、堆化数组、堆排序、上下调整、向下调整。

2014-07-08

二叉堆:最小堆

使用c++实现最小堆。提供常见操作,如堆化数组,插入,删除,堆排序,遍历堆。

2014-07-08

二叉搜索树的c++实现

使用二叉链表和c++来实现二叉搜索树,提供插入、删除、遍历、求最小节点、最大最节点等操作。

2014-07-05

二叉树的二叉链表实现

使用二叉链表实现二叉树,提供常见的操作:各种遍历,求树高,节点数。

2014-07-03

一元多项式的加法、减法、乘法

使用链表来实现单元多项式的加法、减法、乘法。其中,加法是其它运算的基础,减法:poly1-poly2=poly1+(-poly2),乘法:poly1*poly2,可用poly1乘以poly2的每一项,相加其乘积结果。

2014-06-17

队列的应用:优先级队列

使用顺序存储实现优先级队列,展示优先级队列和普通队列的区别之处。

2014-06-12

队列的实现:链式队列

用链表的形式实现队列,提供常见操作,出队、入队……

2014-06-09

队列的实现:顺序队列

使用顺序存储的方式实现队列,提供队列的常见操作。

2014-06-07

栈的实现:链式栈

使用链式结构来实现栈,提供常见的栈操作,push() pop() top() empty() size()

2014-06-05

栈结构解析算术表达式

使用栈结构解析算术表达式,加、减、乘、除、求余,并支持多位数运算

2014-05-28

用栈解析算术表达式

用栈解析算术表达式,并且做到了多位数运算,运算包括加、减、乘、除、求余

2014-05-28

栈的实现顺序栈

栈的顺序栈形式,简易的实现,push() pop() top() size() empty()

2014-05-24

约瑟夫问题的静态链解法

这是约瑟夫问题的静态链解法,代码量少,易理解,是一种很好的思路

2014-05-24

单向循环链表解决约瑟夫问题

用单向循环链表解决约瑟夫问题。使用c++语言,结构体,链表的操作。

2014-05-12

线性表-单链表

单链表的类定义和类实现,常见操作,插入、删除。

2014-05-12

查找数组中第k大的数

给定一数组,查找数组中第k大的数。代码中借助快速排序中的partition方法来实现。

2016-01-08

字符串转化为整数

把一个字符串转化为相应的整数。特别注意符号与溢出的问题。

2016-01-06

单双精度浮点数解析.c

对于计算机中常见的浮点数存储格式进行分析,编程提取float和double中的阶码好尾码。

2015-12-16

printf的类模板实现.cpp

使用C++的类模板机制来简单实现库函数printf。

2015-12-16

LeetCode--Linked List.cpp

文件中包含了LeetCode中Tag为LinkedList的题目参考代码。

2015-12-14

LeetCode-Linked List.cpp

这是LeetCode中Linked List所有题目的参考代码。(截止到目前为止:2015年12月14日)。

2015-12-14

在同一段内存上存储不同类型的数据

使用malloc动态分配一段内存,在该段内存的首地址处的四字节下记录不同数据块的个数,使用合适的方式存入数据,并相应读取。

2015-06-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除