数据结构与算法专题实验报告 - 图文 联系客服

发布时间 : 星期二 文章数据结构与算法专题实验报告 - 图文更新完毕开始阅读

5 程序流程图:

6 源程序:

// 用循环链表实现Yoseph环:

#include //实现文件输出的头文件 #include #include #define NUM 50

static int a[NUM]; // 用来存放人数和初始密码值及出队序列 int j=2,n;

struct Yoseph //定义单链表数据结构 { int num; int code; Yoseph *next; };

Yoseph* creat( ) //创建单链表

{ int i,k=0; Yoseph *L,*p,*q;

int n;

printf(\请输入总人数:\\n\ scanf(\ a[0]=n;

L=p=(struct Yoseph*)malloc(sizeof(Yoseph)); p->num=1;

printf(\请输入第1个人手中所持的密码:\\n\ scanf(\

while(p->code<1||p->code>30) //设置密码的范围

{

printf(\输入错误!请重新输入:\\n\ scanf(\

}

a[j]=p->code;

j++;

for(i=2;i<=n;++i)

{ q=(struct Yoseph*)malloc(sizeof(Yoseph)); //为循环单链表申请

空间

q->num=i; p->next=q; p=q;

printf(\请输入第%d个人手中所持的密码:\\n\ scanf(\ while(q->code<1||q->code>20)

{

printf(\输入错误!请重新输入:\\n\//纠错功能 scanf(\

}

a[j]=q->code;

j++; }

p->next=L; return L; }

void Disp(Yoseph* L) //输出出队序列 { int k, m;

struct Yoseph *p=L,*q; printf(\请输入初始值: \\n\ scanf(\ a[1]=m;

printf(\出列顺序如下:\

while(p->next!=p) //直到剩下最后一个结点才退出

{ if(m==1) {

printf(\

a[j++]=p->num;

q->next=p->next; m=p->code; p=p->next; } else

{ for(k=1;k

p=p->next; }

printf(\

a[j++]=p->num;

q->next=p->next;

m=p->code; //带回被删除的结点的数据,即出列的人手中的密码

p=p->next; }

}

printf(\ printf(\

a[j]=p->num; printf(\出列完毕!\ printf(\ }

void main( ) //主函数 { int j; Yoseph * L; FILE *fpt; L=creat( ); Disp(L);

fpt=fopen(\// 调用文件输出语句,实现将结果存放在名为t.out的文件当中

fprintf(fpt,\总人数为:\ fprintf(fpt,\

fprintf(fpt,\初始密码为:\ fprintf(fpt,\

fprintf(fpt,\

fprintf(fpt,\前%d个为密码,后%d个为出列人序号:\ for(j=2;j