自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 单链表反转

单链表的翻转是一道很基本的算法题。        方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。        方法2:使用三个指针遍历单链表,逐个链接点进行反转。        方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。       方法1的问题是浪费空间。方法2和方法3效率相当。一般方法2

2013-04-25 16:20:26 51495 10

原创 生产者/消费者模型

产者/消费者模型描述如下:有一个或多个生产者生产某种类型的数据,并防止在缓冲区(可以是数组也可以是队列等数据结构)中;有一个消费者可以从缓冲区中取数据,每次取一项;系统保证避免对缓冲区的重复操作,也就是说在任何时候只有一个主体(生产者或消费者)可以访问缓冲区。问题要确保缓冲区不溢出,即当缓冲区满时,生成者不会继续向其中添加数据;当缓冲区空时,消费者不会从中移走数据。

2013-04-25 14:19:12 10267 2

原创 C操作符优先级

C语言操作符优先级优先级运算符含    义要求运算对象的个数结合方向1()[]->.圆括号下标运算符指向结构体成员运算符结构体成员运算符 自左至右2!逻辑非运算符1(单目运

2013-04-19 16:08:32 1559

原创 两道关于位操作的面试题

最近看到两道面试题,用到了同一个为操作公式:XXXX1000&(XXXX1000-1)=XXXX0000。1.输入一个数字判定该数字是否是2^N类型。#include using namespace std;bool func1(int a);int main(){ int ary[5]={9,16,57,256,1024}; for (int i=0;i<5;i+

2013-04-19 15:52:10 1552 1

原创 内存管理

1.内存管理的需求       内存管理要满足5种需求:重定位、保护、共享、逻辑组织、物理组织。①为什么需要重定位进程的能力?答:通常情况下,并不能事先知道在某个程序执行期间会有哪个程序驻留在主存中。此外还希望通过提供一个巨大的就绪进程池,能够把活动进程换入和换出主存,以便使处理器的利用率最大化。在这两种情况下,进程在主存中的确切位置是不可预知的。②允许两个或多个进程访问进程的某一

2013-04-16 11:32:08 3165

原创 死锁

1.死锁的条件       死锁有三个必要条件:1) 互斥——一次只有一个进程可以使用一个资源。其他进程不可访问已分配给其他进程的资源。2) 占有且等待——当一个进程等待其他进程时,继续占有已经分配给自己的资源不释放。3) 不可抢占——进程不能强行抢占别的进程所占有的资源。       这三个条件都是死锁存在的必要条件,但不是充分条件,对死锁的产生还需要第四

2013-04-16 09:07:58 1740

原创 互斥与并发(4)—消息传递

1.消息传递       进程交互时必须满足两个基本要求:同步和通信。为实施同步,进程间需要互斥;为了合作,进程间需要交换信息,提供这种功能的一种方法是消息传递。消息传递还有一个优点,即可以在分布式系统、共享内存的多处理器系统和单处理器系统中实现。为什么?因为消息只要指明源和目的就可以了,而信号量是要两个进程修改同一位置的控制数据的。       消息传递的实际功能以一对原语的形式

2013-04-16 09:04:38 1893

原创 互斥与并发(3)—管程

1.管程(Monitor)       用信号量设计一个正确的程序是很困难的,难点是semWait和semSignal操作可能分布在整个程序中,但是很难看出这些在信号量上的操作所产生的整体效果。但是管程确易于设计。       管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块,其主要特点如下:1)  局部数据变量只能被管程的过程访问,任何外部过程都不能访问(封装,

2013-04-15 15:21:32 2120

原创 互斥与并发(2)—信号量

1.信号量(Semaphore)       为了达到信号量的预期效果,可把信号量看做具有整数值得变量,在它之上定义三个操作:1)  一个信号量可以初始化为一个非负数2)  semWait操作使信号量减1(国内的教材将该操作称为P)。如果变成负数,那么执行semWait的进程被阻塞,并被移入阻塞队列。否则该进程继续执行3)  semSignal操作使信号量加1(国内的教材将该操

2013-04-15 15:08:18 1702

原创 排序

总结一下排序的各类算法,包括冒泡排序、插入排序、快速排序,关于堆排序见博客:堆及其算法。1.冒泡排序       冒泡排序是效率很低(n^2)的排序,一般情况下都不会使用的,在小数据时还可以考虑,不过没有见过算法库使用冒泡排序的,一般的算法库在小数据情况下使用插入排序。       冒泡排序的思想很简单,逆序两两交换,两层循环。       源码:void Bubb

2013-04-15 10:14:27 1262

原创 自己实现的堆结构

之前写过一个堆及其算法的博客(参考:堆及其算法),但是STL源码考虑的问题很多,所以没有突出堆的核心内容。在此用C++实现了堆。#include using namespace std;template class heap{private: int m_capacity; //堆的最大容量 int m_n;

2013-04-15 09:40:41 1724

原创 互斥与并发(1)硬件支持

1.和并发相关的一些关键术语原子操作:一个或多个指令的序列,对外是不可分的;即没有其他进程(线程)可以看到其中间状态或中断此操作。临界区:是一段代码,在这段代码中进程将访问共享资源,当一个进程已经在这段代码中运行时,其他进程就不能在这段代码中执行。死锁:两个或多个进程因其中每个进程都在等待其他进程做完某些事情而不能继续执行。通俗地讲就是分割整体资源,各占有部分。活锁:两个或多个进程

2013-04-12 10:55:15 1544

转载 静态变量与静态成员函数

函数调用的结果不会访问或者修改任何对象(非static)数据成员,这样的成员声明为静态成员函数比较好。且如果static int func(....)不是出现在类中,则它不是一个静态成员函数,只是一个普通的全局函数,只不过由于 static 的限制,它只能在文件所在的编译单位内使用,不能在其它编译单位内使用。       静态成员函数的声明除了在类体的函数声明前加上关键字static,以及

2013-04-11 21:49:23 1142

转载 malloc与new的区别

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。       对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的

2013-04-11 21:43:55 1148

原创 取样(算法)

取样问题并不是随机产生一些一定范围的整数即可。取样问题要求在n个连续有序整数中等概率取出m项,且该m项样本有序。        关键是等概率的问题。考虑m=2,n=5的情况。        如果使用if(rand()%5)        正确的形式应该是这样:void select1(int m, int n){ for(int i=0;i<n;i++) { /*这

2013-04-11 21:38:17 1498

原创 vector的构造与内存管理

1.vector的数据结构template class vector {...protected: iterator start; //表示目前已使用空间的头 iterator finish; //表示目前已使用空间的尾iterator end_of_storage; //表示目前可用空间的尾(已

2013-04-07 21:09:58 5013

原创 vector的clear操作的内部过程

最近在论坛看到一个提问帖子,问题是vector中存储了对象的指针,调用clear后这些指针如何删除?class Test{public: Test() {} ~Test() { cout << "Test des" << endl; }}; int main(){ vector vec; vec.push_back(new Test());

2013-04-07 21:05:33 11441

空空如也

空空如也

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

TA关注的人

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