- 博客(25)
- 收藏
- 关注
原创 八皇后问题
#include#includeusing namespace std; using std::cout; const int size=8;int abs(int x){ return (x>0?x:-x);}bool isValid(int *data,int row,int col){ for(int i=0;i!=row;i++) { if(data[i]==
2015-05-21 12:41:38 536
原创 分页系统中的设计问题
1. 局部分配策略与全局分配策略局部页面置换算法:为每个进程分配固定的内存片段,每个进程页框数固定。全局页面置换算法:在可运行进程之间动态分配页框,分配给每个进程的页框数是随时间变化的。 一般情况下,全局页面置换算法比较好,当工作集的大小随进程运行时间变化明显时更加明显。如此时使用局部页面置换算法,即使有大量空闲页面在,也可能会颠簸,工作集变小时,每个进程都会有大量的页框
2015-05-20 22:50:24 1350
原创 分页系统的实际实现问题
分页系统的实际实现问题 操作系统在四个阶段要做与分页相关的工作:进程创建,缺页中断时,进程执行,进程结束时。 当在分页系统创建一个新进程时,操作系统首先要确定程序和数据在初始时有多大,并为他们创建一个页表,然后在内存中为页表分配内存空间以及初始化,当进程被换出时,页表不用留内存中。另外,操作系统要在磁盘交换区分配空间,以便在某进程交换出区时有磁盘空间可以用,操作系统还要用程序
2015-05-20 22:28:04 1276
原创 shell排序
shell排序是插入排序的改进方法,但是不稳定#includeusing namespace std;void insertDxSort(int *data,int start,int end,int dx){ //以增量dx进行增量排序 int key=0; int j=0; for(int i=start+dx;i<=end;i+=dx) {
2015-05-16 19:35:58 615
原创 二叉树公共祖先节点的查找
#include #include using std::endl;using std::vector;using std::cin;using std::cout;struct treeNode{int value;treeNode*left;treeNode*right;};bool isAncestor(treeNode*root,treeNode*p){ if(
2015-05-13 15:49:00 792
原创 二叉树中和为某一值的路径
#include #include using std::endl;using std::vector;using std::cin;using std::cout;struct treeNode{int value;treeNode*left;treeNode*right;};void Path(treeNode * root ,int exceptSum,int ¤tS
2015-05-12 11:45:12 441
原创 如何判断一棵二叉树树是否为另一棵二叉树的子树
#include #include using namespace std; struct treeNode{ int value; treeNode* left; treeNode* right; treeNode* parent; };//节点结构 void insert(treeNode **root,int value) { treeNode*
2015-05-11 21:00:05 577
原创 操作系统中10种页面置换算法的总结
页面置换算法总结当发生缺页中断时,操作系统必须将内存中选择一个页面置换出去为要调入的新页面腾出空间。 那究竟选择哪一个淘汰哪一个一面比较好呢?1. 最优页面置换算法选择最长时间内不会被访问的页面丢掉。越久越好。但是理论上不能实现。2. 最近未使用页面置换算法(NRU)算法找到最久没有使用的页面置换出去,页面被访问时设置R位,修改时设置M位,R位定期清
2015-05-11 12:16:45 9971
原创 按层输出二叉树
#include #include using namespace std; struct treeNode{int value;treeNode* left;treeNode* right;}; int getHeight(treeNode * root) { if(root==NULL) return 0; else ret
2015-05-10 15:38:34 975
原创 操作系统的存储管理概述
现代操作系统采用“分层储存器体系“ 计算机拥有若干兆快速、昂贵且易失性的高速缓存,价格与速度适中的同易失性的内存以及不易失访问速度慢的大容量的磁盘存储操作系统中分层存储器体系的部分称为存储管理器。任务是记录哪些内存正在使用,哪些可分配,在进程需要时分配内存,进程使用完毕释放内存。 1.地址空间早期的操作系统是直接将物理地址直接暴露给进程,但是缺陷很多。为了要保证多个应用程序同时处于
2015-05-09 17:03:05 593
原创 图的BFS和DFS在数据结构为邻接矩阵时的实现
#include #include using namespace std;//因为只是为了练习DFS和BFS 数据结构定义的很随意 没有优化类啦 能用就行 class Graph{private: static const int MAX=100; int weight[MAX][MAX];//任意一个图最大节点数为MA int nodes; int vertexs;
2015-05-08 11:07:47 920
原创 汉诺塔实现
#include using namespace std;int count=0;void moveByOne(char begin,char end){ cout<<" move "<<begin<<" to "<<end<<endl; count++; cout<<count<<endl;}void Move(char begin,char b
2015-05-06 23:58:06 359
原创 带MIN函数的栈实现(push pop min 操作都只花O(1))
struct listNode{ int value; listNode * next; listNode *min; //多一个指针就可以 };class Stack{ public: Stack():top(NULL){}; void pop(); void push(int k); listNode* Top(); ~Stack() { l
2015-05-06 23:28:45 388
原创 如何将搜索二叉树转化为排序双向链表
#include #include using namespace std; struct treeNode { int value; treeNode* left; treeNode*right; }; treeNode * treeInsert(treeNode* head,int n) { tr
2015-05-01 21:39:13 380
原创 二叉树的遍历 插入 查找 删除 最大值 最小值 前驱 后继节点的查找
#include #includeusing namespace std;//binery search-tree ADTstruct treeNode{ int value; treeNode* left; treeNode*right; treeNode*parent;};//fun1 二叉树的插入即建立treeNode * treeInsert(treeNode*
2015-04-29 21:57:44 820
原创 如何判断数组序列是否为后序遍历
#include using namespace std;bool isPostOrder(int *data,int start,int end){ if(start==end||start==end-1)//终止条件哦 只有两个或一个元素 当然无论怎么样都可以构成后序 return true; int i=start,key=data[end]; while(i
2015-04-27 11:16:40 585
原创 如何按层遍历输出二叉树元素
#include #include #includeusing namespace std; //建树以及判断是不是二叉树 //根据前序和中序 建树 struct treeNode { int value; treeNode* left; treeNode*right; }; void PrintfTreeByFloor(t
2015-04-26 22:08:36 665
原创 2015暑期实习生招聘阿里一面面试题之如何判判树是否为二叉搜索树 如何利用前序中序建二叉树
判断树是否为二叉搜索树,主要利用搜索树的中序遍历是递增的这一性质 #include #include using namespace std;//建树以及判断是不是二叉树//根据前序和中序 建树 struct treeNode{ int value; treeNode* left; treeNode*right; };//vector ivec;void
2015-04-22 15:19:58 498
原创 如何找到链表的倒数第k个元素
给出一个链表如何找到倒数第k个元素,有两种思路,1.直接遍历链表统计出节点个数n.然后再从头遍历到第n-k个元素。但此时最坏时间复杂度有O(2n)非常烂。 2.使用一前一后两个指针,让第一个先走k步,然后两个指针一起走 直到前一个指针到达终点。#include using namespace std;struct listNode{ int value; l
2015-04-20 11:46:54 460
原创 链表遍历打印 翻转及 插入元素
#include using namespace std;struct listNode{ int value; listNode* next;};listNode *reverse(listNode* head)//链表翻转 { if(head==NULL)//特殊输入处理 要时刻有记得处理异常输入 return NULL; listNode * p1=he
2015-04-20 11:40:59 440
原创 归并排序分析
#include using namespace std;void Merge(int *data,int start,int between,int end){ int length1=between-start+2; int length2=end-between+1; int Left[length1]; int Right[length2];
2015-04-16 23:32:17 263
原创 冒泡排序和快速排序
using namespace std; void IdiotSort(int *data,int start,int end) { int length=end-start+1; for(int i=0;i<length;++i) for(int j=0;j<length-i;j++) { if(data
2015-04-15 23:41:00 408
转载 进程间通信的几种方式
进程间的几种通信 1.管道(pipe)是一种半双工的通信方式,数据只能单向流动,并且只限于带有亲缘关系之间的父子进程之间。 2,有名管道(named)也是半双工,单向流动,但不限于父子进程。 3.信号量(smophore),信号量是一个计数器,用来控制多个进程对共享资源的访问,它常作为一种锁机制,防止共享资源同时被多个进程访问,主要作为不同进程或同一进程中不同线
2015-04-15 21:39:32 462
原创 TCP协议建立连接的三次握手四次挥手机制
1,三次握手建立连接 初始状态:服务器调用LISTEN原语。由CLOSED状态进入被动等待连接请求状态。 第一次握手:此时客户执行一个CONNECT原语,同时指定一下参数,我要连接的IP地址呀,端口呀,我愿意接受的最大TCP分段长度呀,等等各种必需的信息,放在一个TCP数据段上发送出去,这个数据段上的SYN=X。此时客户端进入SYN_SENT状态【应用程序已经打开
2015-04-14 17:25:50 887
原创 sleep()和wait()的区别——我的粗浅理解
sleep()和wait()都用于进行线程控制,其本质区别是sleep()不释放同步锁,wait()释放同步锁 也就是说sleep()执行的时候,其他线程是不可以使用同步控制块或者方法,就是说某线程执行sleep()时,我只是占着床(资源即CPU等)睡觉,还不许别人用。 而wait()则不然,线程执行wait(),我就把床(资源即CPU)让出来。其他进程可以使用,我在旁
2015-04-14 16:45:35 382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人