#define use _CRT_SECURE_NO_WARNINGS.
#include<stdio.h>
#include<malloc.h>
typedef int Datatype;
typedef struct node
{
Datatype code; //密码
Datatype num; //编号
struct node* next; //指针
}Linklist;
Linklist* creatsclist(int n){ // 建立单循环链表
Linklist* p, * q, * H;
int i, code;
i = 1; //编号初值为1
H = p = (Linklist*)malloc(sizeof(struct node)); //建立第一个结点
p->num = i; //第一个结点赋值编号为1
printf("请输入第%d人的密码:", i);
scanf("%d", &p->code);
for (i = 2;i <= n;i++) {
q = (Linklist*)malloc(sizeof(struct node)); //建立新的结点
if (q == 0) return(0);
printf("请输入第%d人的密码:", i);
scanf("%d", &q->code);
q->num = i; //新的结点编号赋值
p->next = q; //将q链接到头结点后面
p = q; //p指针后移,i+1
}
p->next = H; //最后一个结点链接到第一个结点,构成单循环链表
return H; // 返回头指针
}
void Joseph(Linklist* H){
Linklist* p = H, *q, *s;
int m, i;
printf("请输入m的初值:");
scanf("%d", &m);
printf("出列顺序为:");
while (p->next != p) //如果p不是最后一个结点
{
for (i = 1;i < m;i++) //寻找报数为m的结点
{
q = p;
p = p->next;
}
printf("%5d", p->num); //输出其编号
m = p->code; //它的密码作为新的m
s = p;
q->next = p->next; //出列后删除报数为m的结点
p = p->next; //p指向下一个结点
free(s); //释放报数为m的结点
}
printf("%5d", p->num); //输出最后一个出列的结点
printf("\n");
}
int main() {
Linklist* H;
int n;
printf("请输入总人数:");
scanf("%d", &n);
printf("\n");
H = creatsclist(n); //建立单循环链表
printf("---------------------------\n");
printf("约瑟夫环问题结果输出\n");
Joseph(H);
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
约瑟夫环问题源代码.zip
共4个文件
exe:2个
cpp:2个
需积分: 5 0 下载量 43 浏览量
2024-02-03
22:36:30
上传
评论
收藏 85KB ZIP 举报
温馨提示
约瑟夫环问题源代码(直接运行)
资源推荐
资源详情
资源评论
收起资源包目录
约瑟夫环问题源代码.zip (4个子文件)
LinkList.exe 131KB
SqList.cpp 1KB
LinkList.cpp 2KB
SqList.exe 131KB
共 4 条
- 1
资源评论
曼诺尔雷迪亚兹
- 粉丝: 1201
- 资源: 67
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功