帮忙修补下程序。。【出列问题】
题7. 出列问题[基本要求]
有1至 N编号的N 个人按顺时针方向围坐一圈,每人持有一个密码(正整数),一开始以正整数m作为报数上限值,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的报数上限值,从他的顺时针方向上的下一个人开始重新报数,如此下去,直至所有的人全部出列为止,要求产生记录出列顺序的表。如N = 7,每个人的密码依次是:3,1,7,2,4,8,4,m的值为20,则出列顺序为6,1,4,7,2,3,5。所有人用一个循环单链表表示,表中每个结点代表一个人,按出列次序依次将结点从循环单链表中删除,并按顺序存放在一个单链表中,链表的每个结点包括三个字段:code代表密码,no代表人的编号,link是指向下一个结点的指针。在主函数中,用堆分配的方法建立对象。循环展开对问题的求解。
帮我修补下(帮我创建个delete函数模板)。语言风格和书写水平如下吧。。我大一。。只能看懂基础的表达。。还有麻烦检查下下面的程序(有错改改,还有要根据题意)。。知道要求很高。。。。拜托了
#include<stdio.h>
#include<stdlib.h>
struct student
{
int code;int no; struct node *next;
};
void main()
{
void create(student *head,int n);
void delete(student *head,int m);
struct student *head;
int n;int m;
printf("输入人数n和报数上限值m:\n");
scanf("%d%d",&n,&m);
head=(student *)malloc(sizeof(struct student));
creat(head,n);
delete(head,m);
free(head);
}
void create(student *head,int n)
{
sutdent rear,p;
int i;
head==NULL;
if(n>0)
{
for(i=1;i<=n;i++)
{
p=(struct student *)malloc(sizeof(struct student));
p->code=i;
printf("请输入第%d个密码:",p->code);
scanf("%d",&(p->no));
if(i==1)
{
head=p;rear=p;
}
else
{
rear->next=p;
rear=p;
}
}
rear->next=head;
}
}