[利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号,用c写],帮我写一下啊,谢谢了!!!
我发过很多次了,再发一次,最后一次 #include<stdio.h> //本程序是进行循环链表的基本运算 #include<stdlib.h> #define N 7
struct node{int data; node *next; }; node* creat(void) //建立循环链表 {node *head,*p; int i; head=(node*)malloc(sizeof(node)); head->data=1; head->next=head; for(i=N;i>1;i--) {p=(node*)malloc(sizeof(node)); p->data=i; p->next=head->next; head->next=p; } return head; } void output(node *head) //输出循环链表 {node *p; p=head; printf("循环链表的数字;\n"); do{printf("%d\t",p->data);p=p->next; }while(p!=head); printf("\n"); } void play(node *head,int n) //进行筛选 {node *p,*q; int k=N,c=1;//c是计数器 p=head; printf("筛选的数字:\n"); while(k>1) {if(c==n-1) {q=p->next; printf("%d\n",q->data); p->next=q->next; free(q); c=0;k--; } else {c++;p=p->next;} } printf("首领:"); printf("%d\n",p->data); } void main() {node *head; int n; head=creat(); output(head); printf("报数:\n"); scanf("%d",&n); play(head,n); }