当前位置:首页 > 数据结构与算法专题实验报告 - 图文
5 程序流程图:
6 源程序:
// 用循环链表实现Yoseph环:
#include
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
共分享92篇相关文档