[置顶] CCPP Blog 目录

CCPP Blog 结构、算法、C、CPP 博客中的所有系列和专栏的目录都可在这里找到...
阅读(2495) 评论(0)

挑战面试编程:查找数组中第k大的数

查找数组中第k大的数 问题: 查找出一给定数组中第k大的数。例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8…… 思路: 1. 直接从大到小排序,排好序后,第K大的数就是arr[k-1]。 2. 只需找到第k大的数,不必把所有的数排好序。我们借助快速排序中partition过程,一般情况下,在把所有数都排好序前,就可以找到第k大的数。我们依据的逻辑是,经过一次...
阅读(1736) 评论(2)

LeetCode-Linked List

Linked ListLinked List Swap Nodes in Pairs Sort List Rotate List Reverse Nodes in k-Group Reverse Linked List Reverse Linked List II Reorder List Remove Nth Node From End of List Remove Linked List Ele...
阅读(3649) 评论(0)

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

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

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

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

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

线程同步-读写锁(rwlock)读写锁读写锁是互斥量的细化:显然,只有对全局资然进行写入操作时,才需要同步;在对全局资然进行读取操作时,是不需要锁的。pthread_rwlock_t pthread_rwlock_init pthread_rwlock_destroy pthread_rwlock_rdlock pthread_rwlock_wrlock pthread_rwlock_tryrdl...
阅读(791) 评论(0)

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

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

linux系统编程:线程原语

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

linux系统编程:进程原语

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

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

进程间通信-mmap #include 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表示...
阅读(1081) 评论(0)

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

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

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

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

前缀、中缀、后缀表达式

前缀、中缀、后缀表达式 1.定义 所谓的前、中、后,是指表达式中运算符相对于运算对象的位置。 中缀 运算符位于运算对象中间,即是中缀表达式。如(1+2)*3-4 最普遍的、最易被人脑理解的是中缀表达式。 前缀 运算符位于运算对象之前,即是前缀表达式。如-*+1234 后缀 运算符位于运算对象之后,即是后缀表达式。如12+3*4- 2.总结 前缀、后缀不易被人脑理解,但易于被计算机解析。 只有对中缀表达式进行合理的转换,才可得到相应的前、后缀表达式。...
阅读(1876) 评论(0)

挑战面试编程:左移字符串

挑战面试编程:左移字符串 问题描述: 左移字符串:如有字符串“abcdefg”,可把它看作是一首尾相连的字符串,左移三个字符后,变为“defgabc”,请编程实现。 方法一: 利用额外的内存空间,实现中转。 步骤1:把“abc”存储到额外空间; 步骤2:把“defg”移动到字符串的首部。至此,“defg”到达最终位置。 步骤3:把“abc”strcat到“defg”的尾部。...
阅读(885) 评论(0)

挑战面试编程:大整数的加、减、乘、除

大整数的加、减、乘、除 一切都是有限的,哪怕是看起来无限的时间或空间都很可能是有限的。在计算机中内置类型的加、减、乘、除都是有限的。我们来实现一个“无限”的大整数加、减、乘、除。 以下使用C++代码实现...
阅读(2621) 评论(1)

C++拾遗--类成员指针

C++拾遗--类成员指针 前言 类成员的类型与一般类型不同,那么类成员的指针类型自然与一般类型的指针有所区别。我们有必要来探讨下类成员指针的使用。 正文 类成员指针是指可以指向类的非静态成员的指针。它的类型包括了类类型和所指向的成员类型。一般而言,指针指向的是对象,而类成员指针指向的是类成员而非类对象。 需要指出,类成员指针不是可调用对象,要想通过类成员指针调用类成员,需结合类对象或类指针。静态类型成员属于类,类型与普通指针相似。 数据成员指针 一般的声明形式: 成员类型 classname:...
阅读(954) 评论(0)
109条 共8页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:226094次
    • 积分:3623
    • 等级:
    • 排名:第9027名
    • 原创:109篇
    • 转载:0篇
    • 译文:0篇
    • 评论:134条
    等你连接
    我的新浪微博
    http://weibo.com/zhangxiagDavid
    我的邮箱
    zhangxiangdavid@126.com


    为何没力气去捉紧这一点火花

    天高海深

    有什么可拥有

    我的新浪微博
    博客专栏
    最新评论