版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上页面置换算法实验报告一、 实验目的:设计和实现最佳置换算法、随机置换算法、先进先出置换算法、最近最久未使用置换算法、简单Clock置换算法及改进型Clock置换算法;通过支持页面访问序列随机发生实现有关算法的测试及性能比较。2、 实验内容:l 虚拟内存页面总数为N,页号从0到N-1l 物理内存由M个物理块组成l 页面访问序列串是一个整数序列,整数的取值范围为0到N - 1。页面访问序列串中的每个元素p表示对页面p的一次访问l 页表用整数数组或结构数组来表示q 符合局部访问特性的随机生成算法1. 确定虚拟内存的尺寸N,工作集的起始位置p,工作集中包含的页数e,工作集移动
2、率m(每处理m个页面访问则将起始位置p +1),以及一个范围在0和1之间的值t;2. 生成m个取值范围在p和p + e间的随机数,并记录到页面访问序列串中;3. 生成一个随机数r,0 r 1;4. 如果r < t,则为p生成一个新值,否则p = (p + 1) mod N;5. 如果想继续加大页面访问序列串的长度,请返回第2步,否则结束。3、 实验环境:操作系统:Windows 7软件:VC+6.04、 实验设计:本实验包含六种算法,基本内容相差不太,在实现方面并没有用统一的数据结构实现,而是根据不同算法的特点用不同的数据结构来实现:1、 最佳置换和随机置换所需操作不多,用整数数组模拟内
3、存实现;2、 先进先出置换和最近最久未使用置换具有队列的特性,故用队列模拟内存来实现;3、 CLOCK置换和改进的CLOCK置换具有循环队列的特性,故用循环队列模拟内存实现;4、 所有算法都是采用整数数组来模拟页面访问序列。5、 数据结构设计:/页面访问序列数组:int refref_size;/内存数组:int phyphy_size;/队列数据结构定义:typedef struct QNode/定义队列数据结构int data;struct QNode *next;QNode,*QueuePtr;typedef structQueuePtr front;/头指针QueuePtr rear;
4、/尾指针LinkQueue;/定义链表数据结构typedef struct LNode/定义循环链表数据结构int data;int flag;/访问位int modify;/修改位struct LNode *next;LNode,*LinkList;6、 主要函数说明:1、 void set_rand_num()/产生具有局部特性的随机数列;2、 int Exchange_LNode(LinkList &L,int e,int i)/将链表L中序号为i的结点替换为内容为e的结点;3、 bool Search_LinkList(LinkList &L,int e,int &am
5、p;i)/找到链表L中内容为e的结点,并用i返回其位置,i=1表示第一个非头结点,依次类推;4、 void Search_LL_Flag(LinkList &L,int &i)/用i返回第一个flag为0的结点的位置,i=1表示第一个非头结点,以此类推;5、 void Set_LL_Flag(LinkList &L,int i)/设置链表L中的序号为i的结点的flag标志为1;6、 int Search_LL_ModifyClock(LinkList &L,int &modify_num)/找到改进的CLOCK算法所需要淘汰的页,用modify_num返
6、回其位置;此函数根据书上给的思路,第一遍扫描A=0且M=0的页面予以淘汰,若失败,则进行第二轮扫描A=0且M=1的页面,第二轮扫描时将所有访问过的页面的访问位A置0;若失败则重复上述两部;7、void Set_LL_modify(LinkList &L,int i)/设置链表L中的序号为i的结点的modify标志为1;8、bool SearchQueue(LinkQueue &Q,int e,int &i)/寻找队列Q中结点data域等于e的结点,并用i返回其在Q中的位置;9、int getnum(int a,int b)/用b返回元素a在被引用数列中的下一个位置10、
7、void ORA()/实现最佳置换算法,包括判断页面是否在内存中、页面进内存、输出内存状态等内容;11、void RAND()/随机置换算法12、void FIFO()/先进先出算法13、void LRU()/最近最久未使用算法实现最近最久未使用算法的思想是:判断待进入内存的页面,如果与内存中的第一个页面相同,则将它移到最后一个,即标志为最近使用的页;如果与内存中的第二个页面相同,则将它删除,并在队列尾部添加相同元素,即标志为最近使用的页;14、void CLOCK()/实现CLOCK算法15、void Modified_Clock() /实现改进的CLOCK算法16、int main()/主
8、函数,调用实现各算法的6个主要函数,并输出各算法的缺页率。7、 实验问题回答:1、FIFO算法是否比随机置换算法优越?答:FIFO算法比随机置换算法优越,但优势并不明显。2、LRU算法比FIFO 算法优越多少?答:LRU算法FIFO算法的效率要高5%-10%,有理论知识可知,页面访问序列具有局部性,而FIFO 算法并不符合实际情况。3、LRU算法和Optimal算法有何差距?答:LRU算法是所有算法中效率最接近Optimal算法的算法,由理论知识可知,Optimal算法是理想的算法,现实中几乎不可能实现,只能作为一种测评标准,LRU算法是效率较高的可实现置换算法,但其硬件要求较高,如果规模较小
9、,则略显麻烦。4、Clock算法和LRU算法有何差距?答:Clock算法和LRU算法从结果看来差距不大,Clock算法是使用软件的方式实现LRU算法中硬件的功能,从而在执行效率上会稍逊色些。8、 实验过程结果截图:实验结果截图测评一:测评二:测评三:实验过程截图(注:只截取第三次测评,蓝色字体表示产生缺页中断)9、 实验结果分析:1、最佳置换算法效果最佳不论在那组数据中,最佳置换算法的效果都是最好的,且都会比其它算法的性能高出不少。但通过课堂上的学习,我们知道这只是一种理想化算法,但实际上却难于实现,故主要用于算法评价参照。2、随机算法的性能总是最不好的这是由于随机算法每次总是从所有页面中随机
10、挑一个置换出去,但我们知道页面的访问存在着局部性的原理,并不是随机的,因此它的性能较差。3、最近最久未使用算法的性能较好相较于先进先出和两种clock算法,最近最久未使用算法的性能略好,我们测试的数据规模相对较小,相信如果采用更大规模的数据,其优势会更加明显。当从课堂上我们知道要想在实际的应用中实现本算法,用软件的方法速度太慢,影响程序执行效率,如果采用硬件方法实现,则需要增加大量的硬件设备。4、先进先出与clock算法的性能基本相同这是由于两种clock算法遍历链表采用的就是FIFO的方法,而改进的clock算法相比于简单clock算法的优势主要体现在会根据是否被修改进行选择,以减少写回所花
11、费的时间。10、 实验总结:这次实验总体难度不是很大,需要实现的算法数目虽然不少,但基本思路较为相似,因此实现起来也并不是十分困难。通过完成这次实验,除了加深了我对几种策略的理解,锻炼了我的编程能力,另一个巨大的收获就是了解了一些生成测试数据的方法。为了使我们的测试数据更贴近现实,我们引入了工作集的概念,并根据实际使用情况的特点设计出尽可能符合实际情况的随机数生成方案。通过阅读课件再加上自己的理解,我了解了老师的设计思路,感觉这个思路极其巧妙,设计中用到的方法和体现出的很多思想值得我们学习。11、 程序清单:#include<iostream>#include<windows
12、.h>#include<time.h>#include<malloc.h>#include<conio.h>using namespace std;#define ref_size 20#define phy_size 3int refref_size;float interrupt6=0.0;/int refref_size=0;int phyphy_size;/void set_rand_num()/产生具有局部特性的随机数列cout<<"页面访问序列:"<<endl;int p=12;int e=4;i
13、nt m=4;int i=0;int j=0;int n=0;double t=0.6;int temp;for(i=0;i<m;i+,j+)Sleep(1000*i);srand(time(NULL);temp=rand()%e+p;refj=temp;cout<<refj<<" "for(n=0;n<4;n+)Sleep(1000*n);srand(time(NULL);double r=(double)(rand()%10)/10.0;/cout<<r<<endl;if(r<t) p=p+int(10*
14、r);elsep=(p+1)%20;for(i=0;i<m;i+,j+)Sleep(1000*i);srand(time(NULL);temp=rand()%e+p;refj=temp;cout<<refj<<" "cout<<endl;/typedef struct QNode/定义队列数据结构int data;struct QNode *next;QNode,*QueuePtr;typedef structQueuePtr front;/头指针QueuePtr rear;/尾指针LinkQueue;/定义链表结点typedef
15、struct LNode/定义循环链表数据结构int data;int flag;/访问位int modify;/修改位struct LNode *next;LNode,*LinkList;/对循环链表的一些操作int CreatList(LinkList &L)/创建循环带有头结点的链表L=(LinkList)malloc(sizeof(LNode);if(!L) exit(-1);L->next=L;L->flag=0;return 1;int Exchange_LNode(LinkList &L,int e,int i)/将链表L中序号为i的结点替换为内容为e
16、的结点if(L->next=L) exit(-1);LinkList p,q;int j=0;p=(LinkList)malloc(sizeof(LNode);q=(LinkList)malloc(sizeof(LNode);q->data=e;p=L;for(j=0;j<i;j+)/使p为待更换结点的前一个结点,故应保证,删除第一个非头结点时i=0,以此类推p=p->next;q->next=p->next->next;p->next=q;q->flag=1;/设置新结点的访问位为1q->modify=0;/设置新结点的修改位为0r
17、eturn 1;int Insert_LNode(LinkList &L,int e)/在循环链表中插入新的结点,从L头结点开始依次向后插入LinkList p,q;p=(LinkList)malloc(sizeof(LNode);q=(LinkList)malloc(sizeof(LNode);q->data=e;q->flag=1;/设置新结点的访问位为1q->modify=0;/设置新结点的修改位为0p=L;while(p->next!=L)p=p->next;p->next=q;q->next=L;return 1;bool Searc
18、h_LinkList(LinkList &L,int e,int &i)/找到链表L中内容为e的结点,并用i返回其位置,i=1表示第一个非头结点,依次类推i=1;if(L->next=L) exit(-1);LinkList p;p=(LinkList)malloc(sizeof(LNode);if(!p) exit(-1);p=L->next;/p指向链表的第一个结点(非头结点)while(p!=L && p->data!=e)p=p->next;i+;if(p=L)/没有找到符合要求的结点return false;return tru
19、e;void Search_LL_Flag(LinkList &L,int &i)/用i返回第一个flag为0的结点的位置,i=1表示第一个非头结点,以此类推i=1;LinkList p;p=(LinkList)malloc(sizeof(LNode);if(!p) exit(-1);p=L->next;while(p->flag!=0)p->flag=0;/修改访问标志位为0p=p->next;if(p=L)/跳过头结点p=p->next;i+;if(i=4)/跳过头结点i=1;/return 1;void Set_LL_Flag(LinkLis
20、t &L,int i)/设置链表L中的序号为i的结点的flag标志为1;LinkList p;p=(LinkList)malloc(sizeof(LNode);if(!p) exit(-1);p=L->next;if(i=1)p->flag=1;if(i=2)p=p->next;p->flag=1;if(i=3)p=p->next;p=p->next;p->flag=1;int Search_LL_ModifyClock(LinkList &L,int &modify_num)/找到改进的CLOCK算法所需要淘汰的页,用modi
21、fy_num返回其位置modify_num=1;if(L->next=L) exit(-1);LinkList p;p=(LinkList)malloc(sizeof(LNode);if(!p) exit(-1);p=L->next;/p指向链表的第一个结点(非头结点)while(p!=L)/第一轮扫描A=0并且M=0的结点if(p->flag=0 && p->modify=0)break;/找到p=p->next;modify_num+;if(p=L)modify_num=1;p=L->next;while(p!=L)/第二轮扫描A=0并且
22、M=1的结点,同时修改访问过的结点的访问位为0if(p->flag!=0)p->flag=0;else if(p->modify=1)break;p=p->next;modify_num+;if(p=L)modify_num=1;p=L->next;while(p!=L)/第三轮扫描A=0并且M=0的结点if(p->flag=0 && p->modify=0)break;p=p->next;modify_num+;if(p=L)modify_num=1;p=L->next;while(p!=L)/第四轮扫描A=0并且M=1的
23、结点if(p->flag!=0)p->flag=0;else if(p->modify=1)break;p=p->next;modify_num+;return 1;void Set_LL_modify(LinkList &L,int i)/设置链表L中的序号为i的结点的modify标志为1;LinkList p;p=(LinkList)malloc(sizeof(LNode);if(!p) exit(-1);p=L->next;if(i=0)p->modify=1;if(i=1)p=p->next;p->modify=1;if(i=2)
24、p=p->next;p=p->next;p->modify=1;int DestroyLinkList(LinkList &L)/删除链表,并释放链表空间LinkList p,q;p=(LinkList)malloc(sizeof(LNode);if(!p) exit(-1);q=(LinkList)malloc(sizeof(LNode);if(!q) exit(-1);p=L->next;while(p!=L)q=p->next;free(p);p=q;free(q);return 1;/对队列的一些操作int InitQueue(LinkQueue
25、&Q)/队列初始化Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode);if(!Q.front) exit(-1);Q.front->next=NULL;return 1;int EnQueue(LinkQueue &Q,int e)/插入元素e为Q的新的队尾元素QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode);if(!p) exit(-1);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;return 1;int DeQueue(L
26、inkQueue &Q,int &e)/若队列不空,则删除Q的队头元素,用e返回其值if(Q.front=Q.rear) return -1;QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode);p=Q.front->next;e=p->data;Q.front->next=p->next;if(Q.rear=p)Q.rear=Q.front;free(p);return 1;bool SearchQueue(LinkQueue &Q,int e,int &i)/寻找队列Q中结点data域等于e的结点,并
27、用i返回其在Q中的位置i=1;if(Q.front=Q.rear) exit(-1);QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode);if(!p) exit(-1);p=Q.front->next;/p指向队列的第一个节点(非头结点)while(p!=NULL && p->data!=e)p=p->next;i+;if(!p)return false;return true;int DelMid_Queue(LinkQueue &Q,int &e)/删除Q的中间元素,并用e返回其值if(Q.front=Q
28、.rear) return -1;QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode);if(!p) exit(-1);p=Q.front->next;e=p->next->data;p->next=p->next->next;return 1;int DestroyQueue(LinkQueue &Q)/删除队列并释放空间while(Q.front)Q.rear=Q.front->next;free(Q.front);Q.front=Q.rear;return 1;/int max1(int a,int b,
29、 int c)/返回a,b,c中的最大值if(a<b) a=b;if(a<c) a=c;return a;int getnum(int a,int b)/用b返回元素a在被引用数列中的下一个位置for(;b<ref_size;b+)if(a=refb)break;return b;void ORA()/最佳置换算法SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);cout<<"n*最佳置换算法*"<&
30、lt;endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);/设置字体颜色为白色int i,j;int num_0,num_1,num_2,num_max;int interrupt_num=0;/num_0=num_1=num_2=0;for(i=0;i < phy_size;i+)/前三个数进内存phyi=refi;for(i=0;i<phy_size;i+)/输出最初的三个数cout<<phyi<<
31、;"t"cout<<endl;for(j=phy_size;j<ref_size;j+)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);if(!(refj=phy0 | refj=phy1 | refj=phy2)/若产生缺页中断,选择最久不会被使用的页被替换num_0=getnum(phy0,j+1);num_1=getnum(phy1,j+1);num_2=getnum(phy2,j+1);num_m
32、ax=max1(num_0,num_1,num_2);if(num_0=num_max)phy0=refj;elseif(num_1=num_max)phy1=refj;elseif(num_2=num_max)phy2=refj;interrupt_num+;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_BLUE);/设置字体为蓝色cout<<"进入页:"<<refj<<endl;for(i=0;i<
33、;phy_size;i+)/输出内存状态cout<<phyi<<"t"cout<<endl<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN);cout<<"最佳置换算法缺页中断次数:"<<interrupt_num<<endl;/以绿色字体输出中断次数interrupt0=(float)interrupt_num/20
34、.0)*100.0;/void RAND()/随机置换算法SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);cout<<"n*随机置换算法*"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);int i,j,temp;int interrupt_nu
35、m=0;/num_0=num_1=num_2=0;Sleep(1000);srand(time(NULL);/设置时间种子for(i=0;i < phy_size;i+)phyi=refi;for(i=0;i<phy_size;i+)cout<<phyi<<"t"cout<<endl;for(j=phy_size;j<ref_size;j+)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_I
36、NTENSITY);if(!(refj=phy0 | refj=phy1 | refj=phy2)/产生缺页中断,随机选择页被替换temp=rand()%3;/cout<<temp<<endl;phytemp=refj;interrupt_num+;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_BLUE);cout<<"进入页:"<<refj<<endl;for(i=0;i<p
37、hy_size;i+)cout<<phyi<<"t"cout<<endl<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN);cout<<"随机置换算法缺页中断次数:"<<interrupt_num<<endl;/以绿色字体输出中断次数interrupt1=(float)interrupt_num/20.0)*100.0
38、;/void FIFO()SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);cout<<"n*先进先出置换算法*"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);LinkQueue L;QueuePtr p;int i,j,e,m;int inte
39、rrupt_num=0;InitQueue(L);for(i=0;i<phy_size;i+)EnQueue(L,refi);p=(QueuePtr)malloc(sizeof(QNode);p=L.front->next;for(j=0;p!=NULL && j<phy_size;j+)/前三个数进内存cout<<p->data<<"t"p=p->next;cout<<endl;for(i=phy_size;i<ref_size;i+)SetConsoleTextAttribute(G
40、etStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);if(!SearchQueue(L,refi,m)/产生缺页中断,选择最先进入的页被替换DeQueue(L,e);/cout<<e<<endl;EnQueue(L,refi);interrupt_num+;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_BLUE);cout<<&
41、quot;进入页:"<<refi<<endl;p=L.front->next;for(j=0;p!=NULL && j<phy_size;j+)cout<<p->data<<"t"p=p->next;cout<<endl<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN);cout<<&qu
42、ot;先进先出置换算法缺页中断次数:"<<interrupt_num<<endl;/以绿色字体输出中断次数interrupt2=(float)interrupt_num/20.0)*100.0;free(p);DestroyQueue(L);/void LRU()/最近最久未使用算法SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);cout<<"n*最近最久未使用置换算法*"<<
43、endl;int QNode_num=0;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);LinkQueue L;QueuePtr p;int i,j,e;int interrupt_num=0;InitQueue(L);for(i=0;i<phy_size;i+)EnQueue(L,refi);p=(QueuePtr)malloc(sizeof(QNode);p=L.front->next;for(j=0;p!=NULL &am
44、p;& j<phy_size;j+)cout<<p->data<<"t"p=p->next;cout<<endl;for(i=phy_size;i<ref_size;i+)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);if(!SearchQueue(L,refi,QNode_num)/产生缺页中断,选择最“老”的页面被替换DeQueue(L,e);/co
45、ut<<e<<endl;EnQueue(L,refi);interrupt_num+;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_BLUE);else if(QNode_num=1)/如果接下来是内存中的第一个,则将它移到最后一个,即标志为最近使用的页EnQueue(L,refi);DeQueue(L,e);else if(QNode_num=2)/如果接下来是内存中的第二个,则将它删除,并在队列尾部添加相同元素,即标志为最近使用的页D
46、elMid_Queue(L,e);EnQueue(L,e);cout<<"进入页:"<<refi<<endl;p=L.front->next;for(j=0;p!=NULL && j<phy_size;j+)/输出内存状况cout<<p->data<<"t"p=p->next;cout<<endl<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGR
47、OUND_INTENSITY | FOREGROUND_GREEN);cout<<"最近最久未使用置换算法缺页中断次数:"<<interrupt_num<<endl;/以绿色字体输出中断次数interrupt3=(float)interrupt_num/20.0)*100.0;DestroyQueue(L);free(p);/void CLOCK()SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);c
48、out<<"n*CLOCK置换算法*"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);int interrupt_num=0;int i;int LNode_hit_num=0;/标记带内存中与带进入页面相同的页面的位置int LNode_flag_num=0;/标记访问位为0的页面在内存中的位置LinkList L;CreatList(L);LinkList p;p=(LinkLis
49、t)malloc(sizeof(LNode);for(i=0;i<phy_size;i+)Insert_LNode(L,refi);if(L->next=L) exit(-1);p=L->next;for(;p!=L;p=p->next)cout<<p->data<<"t"/p->flag=1;cout<<endl;p=L->next;while(p!=L)cout<<"A:"<<p->flag<<"t"p=p-&g
50、t;next;cout<<endl<<endl;for(i=phy_size;i<ref_size;i+)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);if(!Search_LinkList(L,refi,LNode_hit_num)Search_LL_Flag(L,LNode_flag_num);/找到第一个flag标志为0的结点,其序号记录在LNode_flag_num中LNode_flag_num-;Ex
51、change_LNode(L,refi,LNode_flag_num);/将链表L中序号为LNode_flag_num的结点替换为内容为refi的结点interrupt_num+;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_BLUE);elseSet_LL_Flag(L,LNode_hit_num);cout<<"进入页:"<<refi<<endl;p=L->next;for(;p!=L;p=p->next)cout<<p->data<<"t"/p->flag=1;cout<<endl;p=L->next;while(p!=L)cout<<"A:"<<p->flag<<"t"p=p->next;cout<<endl<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 东莞就业补贴申请合同范例
- 商铺入驻定金合同模板
- 储物柜协议合同范例
- 单位公车出租合同范例
- 企业拆借合同范例
- 催收公司合同范例
- 坡地出租合同模板
- 乡村荒地出租合同范例
- 员工 培训 协议合同范例
- 合同加工合同范例
- 2023医疗质量安全核心制度要点释义(第二版)对比版
- 2024年中央企业全面质量管理知识竞赛考试真题库(含答案)
- (高清版)JTG D50-2017 公路沥青路面设计规范
- 全桥逆变电路滤波电路设计步骤
- 蒲公英总黄酮的提取及其抑菌性能
- jmeter性能测试及性能调优
- 4gl语言开发原则及规范--简化版
- 工程量确认单样本(管线)
- 区最新关于生活垃圾分类工作推进会上的讲话稿
- 除尘器安装专业监理实施细则
- 八年级黄金矩形(数学活动)ppt课件
评论
0/150
提交评论