约瑟夫算法c语言代码链表实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:约瑟夫环
1.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入相应数据(即每个人所持的密码),每个人的序号由程序自动分配。

2.程序执行的命令包括:
(1)构造链表;(2)输入数据;(3)执行报数,储存出列人的序号,删除出列人的信息以及把出列人的密码赋给m;(4)结束。

3.测试数据
n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为6,则这正确的出列顺序为6,1,4,7,2,3,5。

示范代码:(Tc 2.0编译)
#include "stdio.h"
#include "alloc.h"
#include "conio.h"
typedef struct Node
{
int num;
int code;
struct Node * next;
}SeqList;
SeqList * Creat(int);
void OutQueue(SeqList *, int , int );
int main(void)
{
system("cls");
printf("Input The Number of People, Frist Code:");
{
int num = 0,code = 0;
scanf("%d%d",&num, &code);
{
SeqList * tail = NULL;
tail=Creat(num);
OutQueue(tail, num, code);
}
}
getch();
return(1);
}
SeqList * Creat(int num)
{
SeqList * tail = NULL;
tail=(SeqList *)malloc(sizeof(SeqList));
{
int i = 1, code = 0;
printf("Input Num.%d Code:", i);
scanf("%d", &code);
tail->num = i;
tail->code = code;
tail->next = tail;
{
SeqList * p = NULL;
for(i = 2; i <= num; ++i)
{
p = (SeqList *)malloc(sizeof(SeqList));
if(p)
{
printf("Input Num.%d Code:", i);
scanf("%d", &code);
p->num = i;
p->code = code;
p->next = tail->next;
tail->next = p;
tail = p;
}
else
{
perror("Out of menroy!");
getch();
exit(1);
}
}
}
}
return(tail);
}
void OutQueue(SeqList * tail, int num, int code)
{
printf("Out of Queue:");
{
SeqList * p;
while(tail - tail->next)
{
code=(code-1)%num+1;
{
int i;
for(i = 1; i < code; ++i)
{tail = tail->next;}
}
p = tail->next;
printf("%d,", p->num);
tail->next = p->next;
code = p->code;
free(p);
p = NULL;
--num;
}
}
printf("%d.",tail->num);
free(tail);
tail = NULL;
return;
}。

相关文档
最新文档