摘要: 三个基本元素:1. 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。2. 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。3. 多态:多态性是指允许不同类的对象对同一消息作出响应 阅读全文
posted @ 2013-09-29 08:43 虫不知 阅读(1044) 评论(0) 推荐(0) 编辑
摘要: 产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。产生死锁的四个必要条件:(1)互斥条件:一个资源每次只能被一个进程使用。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3)不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。避免死锁:死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只 阅读全文
posted @ 2013-09-29 08:36 虫不知 阅读(6553) 评论(0) 推荐(0) 编辑
摘要: 1. 火车运煤问题你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?酷壳 – CoolShell.cn2. 赛马问题一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问,最少得比多少场才能知道跑得最快的5匹马?(不能使用撞大运的算法)酷壳 – CoolShell.cn3. 海盗分宝5 阅读全文
posted @ 2013-09-06 14:32 虫不知 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 约瑟夫环:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至最后一个元素并输出该元素的值。一、循环链表:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果计数值为M,则输出并删除该元素,继续循环(其实是N-1次),当当前元素与下一元素相同时退出循环。#include #include #include typedef struct temp{ int data; struct temp *next;}Node;void JosephRing(int n, int m){ //建立约瑟夫环 int i; Node *head, *p1, *p2; assert(n 阅读全文
posted @ 2013-08-21 14:36 虫不知 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 1. 判断两个均不含有环的单链表是否相交——编程之美3.6两个没有环的链表相交于一节点,则在这个节点之后的所有结点都是两个链表所共有的。如果它们相交,则最后一个结点一定是共有的,则只需要判断最后一个结点是否相同即可。时间复杂度为O(len1+len2)。struct Node{ int data; Node *next;};bool isCross(Node *head1, Node *head2){ Node *p1 = head1, *p2 = head2; while (p1->next) p1 = p1->next; while (p2->next) p2 = p2- 阅读全文
posted @ 2013-08-20 21:43 虫不知 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 1. 带头结点单链表基本操作1.1 头文件声明及结构体定义#include #include typedef struct temp{ int data; struct temp *next;}Node;1.2 输入数据创建单链表,遇0结束Node *creat(){ int data; Node *head, *p, *q; head = (Node *)malloc(sizeof(Node)); head->next = NULL; p = head; while (scanf("%d", &data) && data) { q = (No 阅读全文
posted @ 2013-08-20 17:15 虫不知 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 1. 写出String的具体实现类的定义:#include #include using namespace std;class String{ friend ostream & operator#include #include using namespace std;//simple bubble sortvoid sort(vector &data){ int temp, n = data.size(); for (int i = 1; i data[j+1]) { temp = data[j]; data[j] = data[j+1]; data[j+1] = ... 阅读全文
posted @ 2013-08-19 19:53 虫不知 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 指针数组:首先它是一个数组,数组的元素都是指针。它是“储存指针的数组”的简称。int *p1[10];数组指针:首先它是一个指针,它指向一个数组。它是“指向数组的指针”的简称。 int (*p2)[10];这里需要明白一个符号之间的优先级问题,关键在于p1、p2先和谁结合。“[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,int *修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含 10 个指向 int 类型数据的指针,即指针数组。至于 p2 就更好理解了,在这里“()”的优先级比“[]”高,“*”号和 p2 构成一个指针的定义, 阅读全文
posted @ 2013-08-18 21:01 虫不知 阅读(211) 评论(0) 推荐(1) 编辑
摘要: 1. union关键字union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在 union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。例子如下:union StateMachine{ char character; int number; char *str; double exp;};一个 union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,最大长度是 double 型态,所以 StateMachine 的空间大小就是 double 数据类型的大小。在 C++里,unio... 阅读全文
posted @ 2013-08-18 13:01 虫不知 阅读(769) 评论(0) 推荐(0) 编辑
摘要: 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。编译的完整过程:C源程序-->预编译处理(.c)-->编译、优化程序(.asm、.s)-->汇编程序(.obj、.o、.a)-->链接程序(.exe等可执行文件)1. 编译预处理(Preprocess) 读取C源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。主要包括四类:宏定义、条件编译指令、头文件和特殊符号。 预编译程序所完成的基本上是对源程序的“替代”工作。经过此 阅读全文
posted @ 2013-08-17 17:00 虫不知 阅读(3779) 评论(0) 推荐(1) 编辑