#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
#define ok 1
#define no 0
typedef int ElemType;
typedef struct Node{
ElemType data;
int number;
struct Node *next;
}Node,*LinkList;
LinkList InitList(int n)
{
int i;
LinkList head,p,q;
head = (LinkList)malloc(sizeof(Node));
head->number = 1;
head->data = rand()%10+1;
p = head;
for(i=2;i<=n;i++){
q = (LinkList)malloc(sizeof(Node));
q->number = i;
q->data = rand()%10+1;
p->next = q;
p = q;
}
p->next = head;
return head;
}
void Print(LinkList L)
{
LinkList p;
p = L;
printf("下面输出每个人的序号和密码\n");
while(p->next!=L){
printf("第%d个人的密码是%d.\n",p->number,p->data);
p = p->next;
}
printf("第%d个人的密码是%d.\n",p->number,p->data);
}
void OutList(LinkList L,int k)
{
int i,m;
LinkList p,q;
p = L;
m = p->data;
for(i=1;i<k;i++){
p = p->next;
}
printf("出列序号为:\n");
while(q->next!=q){
for(i=1;i<m;i++){
q = p;
p = p->next;
}
m = p->data;
printf("%3d",p->number);
q->next = p->next;
free(p);
p = q->next;
}
printf("%3d",p->number);
free(p);
}
int main()
{
int n,k;
printf("请输入总人数,和开始序号.\n");
scanf("%d%d",&n,&k);
LinkList L;
L = InitList(n);
Print(L);
OutList(L,k);
return 0;
}
数据结构-循环链表解决约瑟夫环
最新推荐文章于 2024-06-07 16:00:07 发布