所在位置:主页 > 程序语言 > 怎么将数据结构中算法改编成程序,需要什么知识

怎么将数据结构中算法改编成程序,需要什么知识

发布时间:2023-11-20 13:39来源:www.sf1369.com作者:宇宇

怎么将数据结构中算法改编成程序,需要什么知识

需要理解所使用程序的语法,如if,switch,for,while,break,continue等语句,然后和算法的伪代码对应上。

急!!帮我把这个C++程序改成C语言的

#include <iostream>

#include <string>

#define M 3 //资源的种类数

#define N 5 //进程的个数

void output(int iMax[N][M],int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]); //统一的输出格式

bool safety(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]);

bool banker(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]);

int main()

{

int i,j;

//当前可用每类资源的资源数

int iAvailable[M]={3,3,2};

//系统中N个进程中的每一个进程对M类资源的最大需求

int iMax[N][M]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};

//iNeed[N][M]每一个进程尚需的各类资源数

//iAllocation[N][M]为系统中每一类资源当前已分配给每一进程的资源数

int iNeed[N][M],iAllocation[N][M]={{0,1,1},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};

//进程名

char cName[N]={'a','b','c','d','e'};

bool bExitFlag=true; //退出标记

char ch; //接收选择是否继续提出申请时传进来的值

bool bSafe; //存放安全与否的标志

//计算iNeed[N][M]的值

for(i=0;i<N;i++)

for(j=0;j<M;j++)

iNeed[i][j]=iMax[i][j]-iAllocation[i][j];

//输出初始值

output(iMax,iAllocation,iNeed,iAvailable,cName);

//判断当前状态是否安全

bSafe=safety(iAllocation,iNeed,iAvailable,cName);

//是否继续提出申请

while(bExitFlag)

{

cout<<\n<<继续提出申请?\ny为是;n为否。\n;

cin>>ch;

switch(ch)

{

case 'y':

//cout<<调用银行家算法;

bSafe=banker(iAllocation,iNeed,iAvailable,cName);

if (bSafe) //安全,则输出变化后的数据

output(iMax,iAllocation,iNeed,iAvailable,cName);

break;

case 'n':

cout<<退出。\n;

bExitFlag=false;

break;

default:

cout<<输入有误,请重新输入:\n;

}

}

}

//输出

void output(int iMax[N][M],int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N])

{

int i,j;

cout<<\n\t Max \tAllocation\t Need \t Available<<endl;

cout<<\tA B C\tA B C\tA B C\t A B C<<endl;

for(i=0;i<N;i++)

{

cout<<cName[i]<<\t;

for(j=0;j<M;j++)

cout<<iMax[i][j]<< ;

cout<<\t;

for(j=0;j<M;j++)

cout<<iAllocation[i][j]<< ;

cout<<\t;

for(j=0;j<M;j++)

cout<<iNeed[i][j]<< ;

cout<<\t;

cout<< ;

//Available只需要输出一次

if (i==0)

for(j=0;j<M;j++)

cout<<iAvailable[j]<< ;

cout<<endl;

}

}

//安全性算法,进行安全性检查;安全返回true,并且输出安全序列,不安全返回false,并输出不安全的提示;

bool safety(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N])

{

}

//定位ch对应的进程名在数组中的位置

//没找见返回-1,否则返回数组下标

int locate(char cName[N],char ch)

{

int i;

for(i=0;i<N;i++)

if (cName[i]==ch) //找到

return i;

//未找到

return -1;

}

//提出申请,返回提出申请的进程名对应的下标

int request(char cName[N],int iRequest[M])

{

int i,loc;

char ch;

bool bFlag=true;

//判断输入的进程名是否有误

while(bFlag)

{

//输出进程名

for(i=0;i<N;i++)

cout<<cName[i]<<\t;

//输入提出申请的进程名

cout<<\n输入提出资源申请的进程名:\n;

cin>>ch;

//定位ch对应的进程名在进程名数组中的位置

loc=locate(cName,ch);

//没找到,重新输入

if (loc==-1)

cout<<\n您输入的进程名有误!请重新输入;

//找到,退出循环

else

bFlag=false;

}

//输入提出申请的资源数

cout<<输入申请各类资源的数量:\n;

for(i=0;i<M;i++)

cin>>iRequest[i];

//返回提出申请的进程名对应的下标

return loc;

}

bool banker(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N])

{

}

是这个吗?