求数据结构(C语言)高手解释这个程序什么意思,详细解释,最好每个步骤都说一下。谢谢求帮忙啊,急急急

#include<stdio.h>
#include<malloc.h>
typedef struct list
{
int num;
int passward;
struct list *next;
}node;
node *creatlist(int n)
{
node *p,*q,*head;
int i=1;
head=(node *)malloc(sizeof(node));
head->num=i;
printf("请输入第1个人的密码:");
scanf("%d",&head->passward);
p=head;
for(i=2;i<=n;i++)
{
q=(node *)malloc(sizeof(node));
if(q==0)
return 0;
printf("请输入第%d个人的密码:",i);
scanf("%d",&q->passward);
q->num=i;
p->next=q;
p=q;
}
p->next=head;
return head;
}
void josephus(node *l,int k)
{
int i;
node *p=l,*q,*s;
while(p->next!=p)
{
for(i=1;i<k;i++)
{
q=p;
p=p->next;
}
printf("%d ",p->num);
k=p->passward;
s=p;
q->next=p->next;
p=p->next;
free(s);
}
printf("%d",p->num);
printf("\n");
}
void main()
{
node *l;
int n,k;
printf("请输入队伍人数:");
scanf("%d",&n);
printf("请输入m的初始值:");
scanf("%d",&k);
l=creatlist(n);
josephus(l,k);
}

typedef struct list
{
int num;
int passward;
struct list *next;
}node;
表示一个链表,是有排序号码,对应的秘码,以及下一个密码存放地址指针构成
即 1 ***** ——〉 2 *****——〉
node *creatlist(int n)
这个函数写的是创建一个这样的链表。长度为参数N,返回此链表的头节点地址。根据程序,这是一个循环链表,即最后一个单位的指针指向头节点。
josephus(node *l,int k)
这个函数写的是删除一个这种链表上第K个单元的函数,他会将链表上第K个单元的值和密码值打印出来然后将它从链表上取下,他前面的节点将直间指向他原来连接的下一个。
温馨提示:内容为网友见解,仅供参考
无其他回答

帮忙解释C语言中数据结构的这段代码是什么意思呗!!谢了
这个程序的主要目的就是把输入的五个数逆序打印出来。。。用到了结构体的创建和打印。。。

请解释数据结构中一段C语言代码
在C语言中,status表示状态,常用来判断一个操作是否成功。LinkList,即链接列表,是一种常用的数据结构,用于表示一系列数据元素,这些元素通过指针链接在一起。这里的lklist也是对LinkList的定义,表示相同概念。而ElemType代表一种数据类型,具体表示地址类型,意味着在链表中存储的每个元素都对应于某种特定...

跪求数据结构 c语言程序的每段加上注释。。 注释啊 注释!!!
void build(int *a,int i,int n){ \/\/声明a为一个整型变量指针 int tmp;k=i;j=2*k+1;while(j<=n){ \/\/while 计算机的一种基本循环模式。 当满足条件时进入循环,不满足跳出 if((j<n)&&a[j]=a[j])break; \/\/break跳出循环 \/\/下面是交换两个数据分别是整型数组的k位和j位 tm...

在数据结构中(C语言描述),这个是什么意思?求分析
这就是c语言定义的一个结构体,sqstack是结构体的名字,也就相当于一个int一样,可以在后面定义内容包含 SElemType *base;SElemType *top;int stacksize;的对象,例如SqStack a;a中就包含顶点指针 *top,底指针*base,和结构体长度 stacksize。栈就是一个空间,相当于又结构体累加起来的一个空...

...编程达人请进。帮帮忙解释一下这个C语言数据结构的函数的思路和算法...
1、定义新链表c,用于存放结果 2、取多项式a的头结点qa,qa->next为a的第一项。3、对b进行同样操作得到b第一项地址qb->next。4、a的每一项与b的每一项都做运算,两个多项式相乘的结果存入c while(qa->next != 0)\/\/遍历a { while(qb->next != 0)\/\/遍历b { 系数相乘 幂相加 存入c...

C语言版数据结构程序设计求大神帮助
struct { SElemType elem[MaxSize]; int front,rear; }SqQueue; \/* 队列 *\/ void InitQueue(SqQueue* pQ) \/* 初始化队列,开始时队列为空 *\/ { pQ->front=pQ->rear=0; } int EnQueue(SqQueue* pQ,SElemType e) \/* 进队 *\/ { if ((pQ->rear+1)%MaxSize == pQ->front)...

谁能用最通俗的语言解释一下C语言的工作原理?
C语言,一种广泛使用的编程语言,其工作原理通过几个基本步骤展现。首先,代码文件需要包含头文件,这些文件定义了语言中的数据类型和函数。例如,`#include`语句引入了必要的库文件,以确保程序能够访问预定义的函数和数据结构。接着,我们进入主程序`void main()`,这是程序执行的起点。在这里,我们定义...

c语言的数据结构,求大神们帮帮忙。无法理解这题的函数实现方式,能一...
一个main函数,一个取子串函数substr,一个求字符串反转的函数f31. f31函数用到了函数的递归调用。substr函数就是在s串中从pos位置开始取len长度的字串,然后赋给字符串t。f31每次都是把串s的第一个字符赋给t,剩下的部分赋给s,f31(s)求得剩余部分的反转字符,第一字符再连接到反转字符...

这段程序什么意思啊!C。。。求大神指导!!!
last->next=s; s->next=NULL;last=s;pb=pb->next;} } s0=pa?pa:pb; \/\/一下是把最后一个元素赋给链表结尾,结束。while(s0){ CreateItem(s);s=*s0;last->next=s;s->next=NULL;last=s;s0=s0->next;} \/\/这个貌似是数据结构里的一个例子吧,看着熟悉。

c语言 数据结构 本人不才看不出问题 ,希望各位大虾指教,谢谢、、请说...
L->last=k; \/\/要加一句,不然无法根据last来输出数据 。。。free(L); \/\/释放指针 return 0; \/\/既然函数定义返回值类型为int,这里应该加一个return 0才符合函数定义!} void DispList(sequenlist *L) \/\/输出线性表L。要返回值有什么用哦?{ int j;for(j=0; j<L->last; j++){ ...

相似回答