C++的约瑟夫环

来源:百度知道 编辑:UC知道 时间:2024/06/18 00:27:10
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int key;
int num;
struct Node *next;
}
Node,*Link;

void InitList(Link &L)
{
L=(Node *)malloc(sizeof(Node));
if(!L) exit(1);
L->num=0;
L->next=L;
}
void Creater(int n,Link &L)
{
Link p,q;
q=L;
for(int i=1;i<=n;i++)
{
p=(Node *)malloc(sizeof(Node));
if(!p) exit(1);
scanf("%d",&p->key);
p->num=i;
L->next=p;
L=p;
}
L->next=q->next;
free(q);
}
void main()
{
Link L,p,q;
int n,x;
L=NULL;
InitList(L);
printf("please input the totle number of people:");
scanf("%d",&n);
printf("the first key is:");
scanf("%d",&x);
pr

p=p->next p指向下一个结点,即是在这个循环中模拟,当j+1的时候就指向下一个人;
q=p->next q指向p指向的下一个结点,即是循环结束,也就是第j个人报到密码;这是p是指向j-1;那么q就指向j;这时密码x=q->next,且 p->next=q->next;(即p指向j+1)然后函数就删除q这个节点

这个就是个链表啊。p=p->next;q=p->next; 就是把指向本次运算对象的指针指向下一个。

p=p->next; //p点变成原来与p连接的下一点
q=p->next;//q点变成与p连接的下一点

链表
p=p->next;q=p->next;
就是将P指针指向下一个,q指针指向下一个。。。