📄 huan.cpp
字号:
#include"c1.h"
#define MAX 20
typedef struct Lnode{//单循环链
int num; //编号
int data; //密码
struct Lnode *next;
}Lnode,*Linklist;
Linklist Link(Linklist L,int i,int a[MAX]){ //创建循环队列L
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;
Linklist p,q; int j;
p=(Linklist)malloc(sizeof(struct Lnode));
p->num=1;
p->data=a[1];
L->next=p; p->next=L->next; //插入第一个结点
for(j=2;j<=i;j++){ //陆续插入后来的结点
q=(Linklist)malloc(sizeof(struct Lnode));
q->num=j; q->data=a[j];
p->next=q; p=q; q->next=L->next;
}
return L;
}
void Trave(Linklist L,int a){//输出队列信息
Linklist p=L; int i;
for(i=0;i<a;i++){
p=p->next;
printf("第%d个人的密码是 %d\n",p->num,p->data);
}
printf("建环正确完成--可以准备出列\n");
}
void Output(Linklist L,int a){ //出列
Linklist p=L,q; int j=0,e=0;
for(;j<a-1;j++) p=p->next; //寻找出列结点,并令p指向其前趋
q=p->next; printf("%d\t",q->num);
e=q->data; p->next=q->next;
if(q==L->next) L->next=p->next;
else L->next=L->next;
free(q);
Output(p,e); //递归出列
}
void main()
{
int i,n,m[MAX];
Linklist L;
printf("输入n值(<=20): ");
scanf("%d",&n);
printf("输入初始密码 m0: ");
scanf("%d",&m[0]);
for(i=1;i<n+1;i++){//获取每个人的信息
printf("输入第%d个人的密码:",i);
scanf("%d",&m[i]);
}
L=Link(L,n,m);
Trave(L,n); //输出队列信息
printf("出列顺序是: ");
Output(L,m[0]); //出列
printf("\n\n约瑟夫问题解决!\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -