有关简单轮转算法 c语言

问题描述

有关简单轮转算法 c语言

#include
#include
#define furthest 5
struct process /*PCB STRUCTURE*/
{ int id;//进程表示符
int priority;//优先级
int cputime;//占用CPU时间片数
int alltime;//进程所需时间片数
char state;//进程状态
int next; } prochain[furthest];
int procnum;//
int rand();//
int algo;//
int run,head,tail,j;/*RUN—当前运行进程指针;HEAD—进程就绪链链首指针;TAIL—进程就绪链链尾指针*/

void print() /*PRINT THE RUNNING PROCESS,WAITING QUEUE AND PCB SEQUENCE LIST*/
{

printf("输出系统的变量run:%d、head:%d、tail:%d
",run,head,tail);
printf("输出run的变量
");
printf("id:%d priority:%d cputime:%d alltime:%d state:%c next:%d",prochain[run].id,prochain[run].priority,prochain[run].cputime,prochain[run].alltime,prochain[run].state,prochain[run].next);

int k,p;
for (k=1;k<=40;k++) printf("=");
printf("
running process%d",prochain[run].id);
printf("
waiting queue.");
printf("
%d ",prochain[run].id);
p=head;
while(p!=0)
{ printf("%5d",p);
p=prochain[p].next;}
printf("
");
for (k=1;k<=40;k++)
printf("=");
printf("
");
printf(" id ");
for (k=1;k<furthest+1;k++)
printf("%5d",prochain[k].id);
printf("
");
printf("priority ");
for (k=1;k<furthest+1;k++)
printf("%5d",prochain[k].priority);
printf("
");
printf("cputime ");
for (k=1;k<furthest+1;k++)
printf("%5d",prochain[k].cputime);
printf("
");
printf("alltime ");
for (k=1;k<furthest+1;k++)
printf("%5d",prochain[k].alltime);
printf("
");
printf("state ");
for (k=1;k<furthest+1;k++)
printf("%5c",prochain[k].state);
printf("
");
printf("next ");
for (k=1;k<furthest+1;k++)
printf("%5d",prochain[k].next);
printf("
");
getchar();
}

void insert(int q) /*INSERT A PROCESS*/
{

int p,s;
p=head;
s=prochain[head].next;
while((prochain[q].priority<prochain[s].priority)&&(s!=0))
{ p=s;
s=prochain[s].next;}
prochain[p].next=q;
prochain[q].next=s;
}
void insert2() /*PUT A PROCESS ONTO THE TAIL OF THE QUEUE*/
{

printf("调用insert2
");
prochain[tail].next=run;
tail=run;
prochain[run].next=0;
}

void init() /*CREATE A WAITING QUEUE*/
{

int i;
head=0;
if (algo==2)
{ for (i=1;i<furthest+1;i++)
{
prochain[i].id=i;
prochain[i].priority=(rand()+11)%41;
prochain[i].cputime=0;
prochain[i].alltime=(rand()+1)%7;
prochain[i].state='W';
prochain[i].next=0;
if((prochain[i].priority<prochain[head].priority)&&(head!=0))
insert(prochain[i].id);
else
{ prochain[i].next=head;
head=prochain[i].id;}
}

}
else
{
for (i=1;i<furthest+1;i++)
{
prochain[i].id=i;
prochain[i].priority=(rand()+1)%3+1;
prochain[i].cputime=0;
prochain[i].alltime=(rand()+1)%7;
prochain[i].state='W';
prochain[i].next=(i+1);//%(furthest+1);
}
head=1;
tail=furthest;
prochain[tail].next=0;//tail原为furthest
}
run=head;
prochain[run].state='R';
head=prochain[head].next;
prochain[run].next=0;
print();
}

void prisch() /*THE PROCESS WITH PRIO algoRITHM*/
{

while(run!=0)
{
prochain[run].cputime+=1;
prochain[run].priority-=3;
prochain[run].alltime-=1;

if(prochain[run].alltime==0)
{
    prochain[run].state='F';
    prochain[run].next=0;
    if(head!=0)
    {
        run=head;
        prochain[run].state='R';
        head=prochain[head].next;
    }
    else
    {   prochain[0].id=prochain[run].id;
        run=0;
    }
}
else
{   if((prochain[run].priority< prochain[head].priority)&&(head!=0))
    {
        prochain[run].state='W';
        insert(run);
        run=head;
        prochain[run].state='R';
        head= prochain[head].next;
    }
}
print();

}//end while
}//end prisch()

void timesch() /*THE PROCESS WITH RR ALRORITHM*/
{

while(run!=0)
{
prochain[run].alltime-=1;
prochain[run].cputime+=1;
if(prochain[run].alltime==0)
{
prochain[run].state='F';
prochain[run].next=0;
if(head!=0)
{ run=head;
prochain[run].state='R';
head=prochain[head].next;}
else
{ prochain[0].id=prochain[run].id;
run=0;
}
}
else
{ if((prochain[run].cputime==prochain[run].priority)&&(head!=0))
{ prochain[run].state='W';
//prochain[run].cputime=0;
//insert2();
prochain[tail].next=run;
tail=run;
prochain[run].next=0;

        run=head;
        prochain[run].state='R';
        head=prochain[head].next;
    }
}//end else

print();
}//end while

}//end timesch
void main() /*MAIN PROGRAM*/
{
agan: printf("type the algorithm is (1:RR,2:PRIO):");
scanf("%d",&algo);
if (algo==2)
{
printf("output of priority.
");
init();
prisch();
}
else
{ if (algo==1)
{ printf("output of round robin.
");
init();
timesch();}
else
{ printf("try again,please
");
goto agan;
}
}
for (j=1;j<=40;j++) printf("=");
printf("

");
for (j=1;j<=40;j++) printf("=");
printf("

");
printf("system finished
");
}
这个有什么bug啊
轮转是只进行一轮,而优先级是不会停止

解决方案

http://blog.chinaunix.net/uid-24227137-id-163685.html

解决方案二:

C语言初步;简单的算法及程序;
C语言简单算法的编写
C语言base64算法简单实现

时间: 2024-10-30 21:28:39

有关简单轮转算法 c语言的相关文章

c语言-关于数据结构的简单问题完整算法 C语言 假设用邻接矩阵存储无向图,设计算法,求出度数最大的顶点编号

问题描述 关于数据结构的简单问题完整算法 C语言 假设用邻接矩阵存储无向图,设计算法,求出度数最大的顶点编号 假设用邻接矩阵存储无向图,设计算法,求出度数最大的顶点编号 急急急紧急急急急急急急急急急急急急急急急急急急急急急 解决方案 先是存储结构后是伪代码,你想要算法就看注释吧~ Typedef struct Node { Char vex; //顶点 Int degree; //度数 }Node; Node ArrDegree[m]; //m+1为顶点个数 For(i =0; i ArrDeg

C++实现顺序排序算法简单示例代码_C 语言

本文实例讲述了最直接的顺序排序法VC++示例代码,还记得以前上学时候这是计算机的必考题,而且在排序算法中,顺序排序似乎是最简单的了,也是最容易掌握的.现在列出来让大家重新回顾一下! 具体代码如下: //顺序排序 void InsertSort(int r[], int n){ for (int i=2; i<n; i++){ r[0]=r[i]; //设置哨兵 for (int j=i-1; r[0]<r[j]; j--) //寻找插入位置 r[j+1]=r[j]; //记录后移 r[j+1]

常用Hash算法(C语言的简单实现)_C 语言

如下所示: #include "GeneralHashFunctions.h" unsigned int RSHash(char* str, unsigned int len) { unsigned int b = 378551; unsigned int a = 63689; unsigned int hash = 0; unsigned int i = 0; for(i = 0; i < len; str++, i++) { hash = hash * a + (*str);

java-大学的两个简单的算法问题

问题描述 大学的两个简单的算法问题 我们的课设任务,一个是递归替换问题,还有一个是二叉排序树问题,用C语言或者Java都行. 解决方案 两个简单数学问题的精巧算法两个简单数学问题的精巧算法韩信点兵问题的简单算法(downmoon) 解决方案二: 递归替换问题:编写程序,扩展C/C++源文件中的#include指令(以递归的形式),请以文件名的内容替换如下面的代码行

《R的极客理想——高级开发篇 A》一一2.2 PageRank算法R语言实现

2.2 PageRank算法R语言实现 问题 如何用R语言实现PageRank算法? 引言 Google搜索,早已成为我每天必用的工具,我无数次惊叹它搜索结果的准确性.同时,我也在做Google的SEO,推广自己的博客.经过几个月尝试,我的博客PR到2了,外链也有几万个.总结下来,还是感叹PageRank的神奇.笔者认为PageRank是改变互联网的算法!2.2.1 PageRank算法介绍 PageRank是Google专有的算法,用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度.

c++中八大排序算法_C 语言

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短:  1.插入排序-直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入

关于c++几种简单排序算法的比较次数和移动次数的问题

问题描述 关于c++几种简单排序算法的比较次数和移动次数的问题 排序结果没有问题,可是比较次数和移动次数的计数结果不对.求高人指点. #include<iostream> using namespace std; class Sort { private: int *r; int n; // the number of elements of array int MoveNum; int CompNum; public: void insert(); void bubble(); int ge

数据结构 算法 c语言 二叉排序树

问题描述 数据结构 算法 c语言 二叉排序树 RT 注意关键字X所代表的含义 解决方案 你的图片应该没有传上来,看不见你的问题啊

c++用for循环怎样实现全排列?请给我个最简单的算法,谢谢!

问题描述 c++用for循环怎样实现全排列?请给我个最简单的算法,谢谢! 例如:int num_index[24][4] = { { 0 1 2 3 } { 0 1 3 2 } { 0 2 1 3 } { 0 2 3 1 } { 0 3 1 2 } { 0 3 2 1 } { 1 0 2 3 } { 1 0 3 2 } { 1 2 0 3 } { 1 2 3 0 } { 1 3 0 2 } { 1 3 2 0 } { 2 0 1 3 } { 2 0 3 1 } { 2 1 0 3 } { 2 1