C语言帮我更新解释下代码

来源:百度知道 编辑:UC知道 时间:2024/06/08 13:00:31
有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3),凡是报到3的人退出圈子。问最后留下的是原来几号的那位(要求:用指针)
我想用结构体来做..
#include<stdio.h>
#include<stdlib.h>
typedef struct person
{
int num;
struct person *next;
};
person *init(person *h,int n) //这个结构里面的代码都什么意思?
{

person *tail=h; ⑴
for(int i=1;i<n;i++)
{
person *temp=(person*)malloc(sizeof(person));
temp->num=i+1; ⑵
tail=tail->next=temp; ⑶
}
tail->next=h;
return h;
}

int main() //还有下面的都什么意思?
{
person *h=(person*)malloc(sizeof(person));
h->num=1;
int n;
printf("input ren de ge shu:");
scanf("%d",&n);
h=init(h,n);
person* pre=h;
while(pre->next!=h)
{
pre=pre->next;
}
person* cur=h;
for(int i=1;i<n;i++)
{
for(int j=1;j<3;j++)
{
pre=pre->next;
cur=cur->next;

发给你了

init函数是创建具有n个元素的循环链表
输入为表头h和人数n, 输出为表头h, h就是head的意思
主函数main里面通过scanf获得人数n, 并传入init创建具有n个元素的循环链表
while循环里面每次删除两个, 直到只剩下1个
最后那个就是所求

ps, 你该看看c语言的基础书,打好基础最重要
网上学的太慢

#include<stdio.h>
#include<stdlib.h>
struct person
{
int num;
struct person *next;
}; //定义一个链表的节点,第二个元素是指向自己的指针

typedef struct person person;//后面用“person”代替“struct person”

person *init(person *h,int n) //这是一个函数 生成代表n个人的链表 第一个参数是链表的表头
{

person *tail=h; //指针tail指向表头h
for(int i=1;i<n;i++) //插入n个元素
{
person *temp=(person*)malloc(sizeof(person)); //为插入新元素的节点分配一个节点的空间
temp->num=i+1; //为新节点赋值
tail->next=temp; //新节点接在前面一个元素后面
tail=tail->next; // tail指着往后移一个,就是一直指向最后一个节点
}
tail->next=h;