ITfeng

 

约瑟夫环-----数数

#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
 int data;
 struct list*next; 
}List;
List*insert_list(List*head,int data)
{
 List*newnode=(List*)malloc(sizeof(List));
 List*tail=head;
 newnode->data=data;
 if(head==NULL)
 {
  newnode->next=newnode;
  return newnode;
 }
 while(tail->next!=head)
 {
  tail=tail->next; 
 } 
 tail->next=newnode;
 tail=newnode;
 tail->next=head;
 return head;
}
void print_list(List*head)
{ List*p=head;
 while(p && p->next!=head)
 {
  printf("%d\n",p->data);
  p=p->next;
 }
 if(p)
 {
  printf("%d\n",p->data);
 }
}

void count_list(List*head,int m)

 int count=1;
 List*pre;
 List*cur=head;
 List*tail=head;
 while(tail  && tail->next!=head)
 {
  tail=tail->next;
 } 
 pre=tail;//确定pre和tail的值
 while(cur && cur->next!=cur)
 {
  if(count==m)
  {
   pre->next=cur->next;
   printf("%d\n",cur->data);
   free(cur);
   cur=pre->next;
   count=1; 
  } 
  else
  {
   count++;
   pre=cur;
   cur=cur->next; 
  }
 }
 if(cur)
 {
  printf("%d\n",cur->data);
  free(cur);
 }
 
 
}
int main()
{ int i,m,n;
 List*head=NULL;
 printf("please input m:\n");
 scanf("%d",&m);
 printf("please input n:\n");
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
  head=insert_list(head,i); 
 } 
 print_list(head);
 printf("count:\n"); 
 count_list(head,m);
}

posted on 2012-05-09 14:06  ITfeng  阅读(184)  评论(0编辑  收藏  举报

导航