自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (13)
  • 收藏
  • 关注

原创 mac mail迁移邮件规则

近期换了个新MAC,但通过ICLOUD无法同步mail中的邮件规则,手工重建非常麻烦。通过新建规则查找修改文件的时间戳,终于找到了邮件规则的存储文件。方法如下首先在旧电脑上找到: ~/Library/Mail/V3/MailData/SyncedRules.plist 在新电脑上关闭icloud,将旧电脑的SyncedRules.plist 同步到对应目录即可

2016-02-23 20:53:27 4292

原创 高级套接口-(sendmsg和recvmsg)举例

这几天学习网络编程,踩了好多坑,网上这部分资料不多,例子也是抄来抄去。sendmsg和recvmsg这两个接口是高级套接口,这两个接口支持一般数据的发送和接收,还支持多缓冲区的报文发送和接收(readv和sendv支持多缓冲区发送和接收),还可以在报文中带辅助数据。 还是先上代码server 端#include <iostream>#include <string.h>#include <ne

2015-11-02 20:06:43 7350

原创 Xcode编译boost

xcode 下使用boost 报如下错误xcode boost/tokenizer.hpp file not found原因为mac 下无boost。需手工编译。方法如下: 安装boost:brew install boost安装完成后,得到如下目录:/usr/local/Cellar/boost/1.58.0修改xcode 项目: HEADER_SEARCH_PATHS中添加/usr/loca

2015-07-14 22:48:01 1403

原创 mac下安装autojump

mac下安装autojump安装命令$brew install autojump安装完在ZSH下不可用,需在.zshrc下添加以下命令$[[ -s `brew --prefix`/etc/autojump.sh ]] && . `brew --prefix`/etc/autojump.sh

2015-05-14 22:01:16 3022

原创 使用jekyll在github上搭建静态博客

1、安装本地jekyll安装jekyll老报失败 [houjinchao@mx jekyll]$> sudo gem install jekyll 15-05-14 21:20 Password: ERROR: Could not find a valid gem ‘jekyll’ (>=

2015-05-14 21:57:26 1267

转载 NEW START

Cmd Markdown 编辑阅读器 - 作业部落出品 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*

2015-04-25 15:07:49 376

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2015-03-24 13:24:48 279

原创 start

从今天开始,每周写一篇博客

2013-11-18 23:29:20 593

原创 找出两个单链表里交叉的第一个元素

要得到交点,先遍历一遍,得到长度L1和L2,长的那个链表先移动|L1-L2|步,再逐个比较,直到两个相等。Node *p=L1,*q;Int num1=0,num2=0;while(p!=null){ p=p->next; num1++;}p=L2;while(p !=null){ p=p->next; num2++;}if(num1>num2){ p=

2012-10-04 14:26:10 892

转载 Java深度复制和浅度复制

关键字: java 潜拷贝和深拷贝 .java里的clone分为: A:浅复制(浅克隆):浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。 Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。必须要遵循下面三点 1.在派生类中覆盖基类的clone()方法,并声明为pu

2012-08-14 10:47:15 554

原创 Integer等默认对象作函数参数时,亦是传值而非传址

执行结果:10   20

2012-08-14 10:43:30 494

原创 Java文件读取

public class ReadFromFile {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。     */    public static void readFileByBytes(String fileName) {        File file = new File(fileName);

2012-08-14 10:42:03 1143

原创 JAVA中的反射机制详解

JAVA反射机制    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一

2012-08-14 10:37:04 206

原创 Java动态创建和访问数组

public static void dyArray(Object a, int length) { Object array = Array.newInstance(a.getClass(), length); for (int i = 0; i < Array.getLength(array); i++) { Array.set(array, i, a); Syste

2012-08-14 10:36:05 355

算符优先分析法 C++ 编译原理

算符优先分析法 C++ 编译原理 运行环境:Visual Studio 2005 #include "SStack.h" #include <iostream> #include <string> using namespace std; class Functor { private : char ** table; string ** production; string prog;//待分析字符串 int p;//字符指针 int num;//终结符个数 int num1;//产生式个数 SStack <char> stack; public: Functor(int m,int n,char ** T,string **prod,string pr) { num=m; num1=n; table=T; production=prod; prog=pr; p=0; stack.push('$'); } void traversal() { while(p<(prog.length())) { stack.display(); cout<<prog.substr(p)<<" "; char ch; if(Getnum(stack.gettop())) { ch=stack.gettop(); } else { ch=stack.getsecond(); } switch(compare(ch,prog[p])) { case 1: case 2:stack.push(prog[p]);p++;cout<<"移入"<<endl;break; case 3:reduct();cout<<"归约"<<endl;break; } } cout<<"分析成功!"<<endl; } int Getnum(char ch) { for(int i=1;i<num;i++) { if(ch==table[i][0]) { return i; } } return 0; } int compare(char col,char row) { int c=Getnum(col); int r=Getnum(row); switch( table[c][r]) { case '>': return 3;break; case '<': return 2;break; case '=': return 1;break; default:cout<<endl<<"输入串有误,程序将终止!"<<endl;system("pause");exit(0);break; } } void reduct() { //待定 string token=""; int temp; string str=""; if(!Getnum(stack.gettop())) { token+=stack.gettop(); stack.pop(); } char ch=stack.gettop(); str+=ch; temp=Haven(str); if(temp!=-1) { token+=production[temp][0]; } else { token+=ch; } stack.pop(); bool Nover=true; while(Nover) { if(Getnum(stack.gettop())) { if(compare(stack.gettop(),ch)==2) { Nover=false; } else { ch=stack.gettop(); str=""; str+=ch; temp=Haven(str); if(temp!=-1) { token+=production[temp][0]; } else { token+=ch; } stack.pop(); } } else { token+=stack.gettop(); stack.pop(); } } string token2=""; //cout<<token<<" "; for(int i=token.length()-1;i>=0;i--) { token2+=token[i]; } //cout<<token2<<endl; if(Haven(token2)!= -1) { stack.push(production[Haven(token2)][0][0]); } else { cout<<"输入串有误!分析终止!"<<endl; system("pause"); exit(0); } } int Haven(string temp) { for(int i=0;i<num1;i++) { int j=1; while(production[i][j]!="") { if(temp==production[i][j]) { return i; } j++; } } return -1; } public: ~Functor(void) { } };

2010-06-20

稀疏矩阵的转置实现 C++ 数据结构

稀疏矩阵的转置实现 C++ 数据结构 运行环境:Visual Studio 2005 #include "Triple.h" #include <iostream> using namespace std; template <typename T> class TSMatrix { private: T **Parray; T **Qarray; Triple<T> *data; Triple<T> *Cdata; int mu,nu,tu; public: TSMatrix(void) { //Parray=NULL; data=new Triple [100]; Cdata=new Triple [100]; mu=0; nu=0; tu=0; } TSMatrix(T**p,T**q,int m,int n) { Parray=p; Qarray=q; mu=m; nu=n; tu=0; for(int p=0;p<mu;p++) { for(int q=0;q<nu;q++) { if(Parray[p][q]!=0) { tu++; } } } data=new Triple<T>[tu+1]; Cdata=new Triple<T>[tu+1]; } void CreateTS() { int opp=0; for(int p=0;p<mu;p++) { for(int q=0;q<nu;q++) { if(Parray[p][q]!=0) { Triple<T> temp(p,q,Parray[p][q]); data[opp]=temp; opp++; } } } } void Change() { int *num=new int [nu+1]; int *cpot=new int [nu+1]; for(int col=0;col<nu;col++) { num[col]=0; } for(int i=0;i<tu;i++) { num[data[i].j]++; } cpot[0]=0; for(int i=1;i<nu;i++) { cpot[i]=cpot[i-1]+num[i-1]; } for(int i=0;i<tu;i++) { int p=cpot[data[i].j]; Cdata[p].i=data[i].j; Cdata[p].j=data[i].i; Cdata[p].e=data[i].e; cpot[data[i].j]++; } for(int i=0;i<tu;i++) { Qarray[Cdata[i].i][Cdata[i].j]=Cdata[i].e; if(!(i%5)){cout<<endl;} cout<< "<" << Cdata[i].i << " "<< Cdata[i].j<< ">"<<Cdata[i].e<<" "; } delete []num; delete []cpot; } void Display() { for(int i=0;i<tu;i++) { if(!(i%5)){cout<<endl;} cout<< "<" << data[i].i << " "<< data[i].j<< ">"<<data[i].e<<" "; } cout<<endl; } public: ~TSMatrix(void) { delete []data; delete []Cdata; } };

2010-06-20

弗洛伊德算法 C++ 数据结构

弗洛伊德算法 C++ 运行环境:Visual Studio 2005 #include <iostream> using namespace std; class FLOYD { private: int Num; double **D; bool ***P; int INFINITY; public: FLOYD(double **aa,int num) { D=aa; Num=num; INFINITY=8888; P=new bool **[Num]; for(int v=0;v<Num;v++) { P[v]=new bool *[Num]; for(int w=0;w<Num;w++) { P[v][w]=new bool [Num]; for(int u=0;u<Num;u++) { P[v][w][u]=false; } } } } void ShortestPath() { for(int v=0;v<Num;v++) { for(int w=0;w<Num;w++) { if(D[v][w]<INFINITY) { P[v][w][v]=true; P[v][w][w]=true; } } } for(int u=0;u<Num;u++) { for(int v=0;v<Num;v++) { for(int w=0;w<Num;w++) { if(D[v][u]+D[u][w]<D[v][w]) { D[v][w]=D[v][u]+D[u][w]; for(int i=0;i<Num;i++) { P[v][w][i]=P[v][u][i]||P[u][w][i]; //cout<<P[v][w][i]<<" "; } //cout<<endl; } } } } } void lookfor(int m,int n) { for(int i=0;i<Num;i++) { if(P[m][n][i]&&m!=i&&n!=i) { lookfor(m,i); cout<<i+1<<"->"; lookfor(i,n); } } } double Getshort(int m,int n) { return D[m][n]; } ~FLOYD(void) { } };

2010-06-20

语义分析 C++ 编译原理

语义分析 C++ 编译原理 运行环境:Visual Studio 2005

2010-04-19

语法分析的递归算法 C++ 编译原理

语法分析的递归算法 C++ 编译原理 运行环境:Visual Studio 2005

2010-04-19

算符优先分析法 C++ 编译原理

算符优先分析法 C++ 编译原理 使用环境:Visual Studio 2005

2010-04-19

词法分析 C++实现 编译原理

词法分析 C++实现 编译原理 使用环境:Visual Studio 2005

2010-04-19

作业调度 操作系统 C++

作业调度算法 C++ 操作系统 运行环境:Visual Studio 2005

2010-04-19

银行家算法的C++实现

#pragma once #include "Processor.h" #include <iostream> using namespace std; class Control { private : Processor * progress; int num; int *Available; public: Control(int n,int *A,int m) { num=n; Available=A; progress=new Processor [num]; string na=""; cout<<"请依次输入各个进程的名字及其资源的最大需求量:"<<endl; for(int i=0;i<num;i++) { cin>>na; int *temp=new int [num]; for(int j=0;j<m;j++) { cin>>temp[j]; } progress[i].Change(m,temp,na); } } void Distribute() { int n=0; while(!Allover()) { int i=n%num; n++; if(!progress[i].Finish) { cout<<"当前进程名:"<<progress[i].name<<endl; progress[i].Request(); cout<<"资源请求:"; for(int j=0;j<progress[i].num;j++) { cout<<progress[i].Req[j]<<" "; } cout<<"资源需要:"; for(int j=0;j<progress[i].num;j++) { cout<<progress[i].Need[j]<<" "; } cout<<endl; if(Finderror(i)) { for(int j=0;j<progress[i].num;j++) { Available[j]=Available[j]-progress[i].Req[j]; progress[i].Allocation[j]=progress[i].Allocation[j]+progress[i].Req[j]; progress[i].Need[j]=progress[i].Need[j]-progress[i].Req[j]; } if(Isover(i)) { progress[i].Finish=true; for(int k=0;k<progress[i].num;k++) { Available[k]=Available[k]+progress[i].Max[k]; } cout<<progress[i].name<<"进程运行结束!"<<endl; } if(!Detecting()) { for(int j=0;j<progress[i].num;j++) { Available[j]=Available[j]+progress[i].Req[j]; progress[i].Allocation[j]=progress[i].Allocation[j]-progress[i].Req[j]; progress[i].Need[j]=progress[i].Need[j]+progress[i].Req[j]; } cout<<"会出现死锁,请求被驳回。进程被暂停!执行下一进程……"<<endl; } } else { cout<<"请求资源出错!进程被暂停!执行下一进程……"<<endl; } } } cout<<"进程全部运行结束!"<<endl; } bool Finderror(int n)//判断请求是否错误 { for(int i=0;i<progress[n].num;i++) { if(progress[n].Need[i]<progress[n].Req[i]) { return false; } } return true; } bool Detecting()//死锁检测 { string name=""; int *Work=new int [progress[0].num]; bool *Finish=new bool [num]; for(int i=0;i<progress[0].num;i++) { Work[i]=Available[i]; } for(int i=0;i<num;i++) { Finish[i]=progress[i].Finish; } int m=num; int n=0; while(m) { int temp=n%num; if(!Finish[temp]) { if(compare(temp,Work)) { Finish[temp]=true; name=name+progress[temp].name+" "; for(int i=0;i<progress[0].num;i++) { Work[i]=Work[i]+progress[temp].Allocation[i]; } m=num; } } n++; m--; } for(int i=0;i<num;i++) { if(!Finish[i]) { return false; } } cout<<"安全序列:"<<name<<endl; return true; } bool compare(int n,int *Work)// { for(int i=0;i<progress[n].num;i++) { if(progress[n].Need[i]>Work[i]) { return false; } } return true; } bool Isover(int n)//判断进程是否可以执行结束 { for(int i=0;i<progress[n].num;i++) { if(progress[n].Allocation[i]!=progress[n].Max[i]) { return false; } } return true; } bool Allover()//判断所有进程是否已执行结束 { for(int i=0;i<num;i++) { if(!progress[i].Finish) { return false; } } return true; } void Display(int n,int * temp) { for(int i=0;i<n;i++) { cout<<temp[i]<<" "; } } public: ~Control(void) { } }; 环境:Visual Studio 2005

2010-04-10

页面置换算法(C++)

时钟算法 页面置换算法 #pragma once #include <iostream> #include "Pclass.h" using namespace std; class Allocation { private: int pnum;//页面数 int bnum;//分配块数 //int ID; int num;//访问页面次数 Pclass * block;//块数组 int *page;//页访问顺序 //int p; public: Allocation(int pn,int bl,int n) { pnum=pn; bnum=bl; num=n; //ID=id; block=new Pclass [bnum]; page=new int [num]; cout<<"页面访问顺序:"; for(int i=0;i<num;i++) { page[i]=rand()%pnum+1; cout<<page[i]<<" "; } cout<<endl; //p=0; } void FIFO() { cout<<"先进先出算法:"<<endl; int p=0; int nm=0; for(int i=0;i<num;i++) { if(Haven(page[i])!=(-1)) { nm++; } else { block[p].num=page[i]; p=(++p)%bnum; } for(int j=0;j<bnum;j++) { if(block[j].num!=0) { cout<<block[j].num<<" "; } } cout<<endl; } cout<<"命中率为:"<<(double)nm/(double)num<<endl; } int Haven(int n) { for(int i=0;i<bnum;i++) { if(block[i].num==n) { return i; } } return -1; } void LRU() { int p=0; int nm=0; for(int i=0;i<bnum;i++) { block[i].num=0; block[i].visited=false; } for(int i=0;i<num;i++) { int temp=Haven(page[i]); if(temp!=(-1)) { block[temp].visited=true; nm++; } else { //int j=0; while(1) { if(block[p].visited==false) { block[p].num=page[i]; p=(++p)%bnum; break; } else { block[p].visited=false; p=(++p)%bnum; } } } for(int j=0;j<bnum;j++) { if(block[j].num!=0) { cout<<block[j].num<<" "; } } cout<<endl; } cout<<"命中率为:"<<(double)nm/(double)num<<endl; } void SLRU() { int p=0; int nm=0; for(int i=0;i<bnum;i++) { block[i].num=0; block[i].visited=false; } for(int i=0;i<num;i++) { int temp=Haven(page[i]); if(temp!=(-1)) { block[temp].visited=true; nm++; } else { for(int j=0;j<bnum;j++) { if(block[p].visited==false&&block[p].changed==false) { block[p].num=page[i]; if(rand()%2) { block[p].changed=true; } p=(++p)%bnum; goto over; } else { block[p].visited=false; p=(++p)%bnum; } } while(1) { if(block[p].changed==false) { block[p].num=page[i]; p=(++p)%bnum; break; } else { block[p].changed=false; p=(++p)%bnum; } } } over: for(int j=0;j<bnum;j++) { if(block[j].num!=0) { cout<<block[j].num<<" "; } } cout<<endl; } cout<<"命中率为:"<<(double)nm/(double)num<<endl; } ~Allocation(void) { } };

2010-04-10

磁盘调度算法(C++)

磁盘调度算法 #pragma once #include <string> using namespace std; class Element { public: string name; int value; bool visited; Element(void) { name=""; value=0; visited=false; } void set(string n,int v) { name=n; value=v; visited=false; } ~Element(void) { } };

2010-04-10

joseph环的C++实现

joseph环的C++实现 运行环境:Visual Studio 2005

2010-04-10

关于CPU调度算法源码 C++

非抢占短进程优先 优先级调度 多级反馈调度 运行环境 Visual Studio 2005 语言:C++

2010-04-10

空空如也

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

TA关注的人

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