关于Josephu

作者在 2008-10-02 11:20:22 发布以下内容
这个太经典,算法也挺多。。。
我收藏的和我自己写的都贴出来:
 
#include <stdlib.h>
#include <stdio.h>
typedef struct node
{
 int data;
 struct node *next;
}LNode;
main()
{
 LNode* Create(int,int);
 LNode* GetNode(LNode *);
 int Print(LNode *,int);
 LNode *p;
 int n,k,m;
 do
 {
  printf ("输入总人数");
  scanf ("%d",&n);
 }
 while (n<=0);
 do
 {
  printf ("输入开始人的序号(1~%d)",n);
  scanf ("%d",&k);
 }
 while (k<=0 || k>n);
 do
 {
  printf ("输入间隔数字");
  scanf ("%d",&m);
 }
 while(m<=0);
 
 p=Create(n,k);
 Print(p,m);
 return 0;
}
LNode* Create(int n,int k)/*创建循环链表*/
{
 int start=k-1;
 LNode *s,*p,*L=0,*t;
 if (start==0) start=n;
 while (n!=0)
 {
  s=(LNode *)malloc(sizeof(LNode));
  if (L==0) p=s;
  if (n==start) t=s;
  s->data=n;
  s->next=L;
  L=s;
  n--;
 }
 p->next=L;
 return t;
}
LNode* GetNode(LNode *p)/*出队函数*/
{
 LNode *q;
 for (q=p;q->next!=p;q=q->next);
 q->next=p->next;
 free (p);
 return (q);
}
Print(LNode *p,int m)/*输出函数*/
{
 int i;
 printf ("出队编号:\n");
 while (p->next!=p)
 {
  for (i=1;i<=m;i++)
   p=p->next;
  printf ("%d ",p->data);
  p=GetNode(p);
 }
 printf("%d\n",p->data);
 return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////
 
#include <stdlib.h>
#include <stdio.h>
typedef struct node
{
 int data;
 struct node *next;
}LNode;
int cnt;                                //设计数器
LNode* Create(int n,int k)              /*创建单循环链表*/
{
 LNode *s,*p,*L=0;
 cnt=n/2;                            //计数器初始化
 while (n!=0)
 {
  s=(LNode *)malloc(sizeof(LNode));
  if (L==0)
   p=s;
  s->data=n;
  s->next=L;
  L=s;
  n--;
 }
 p->next=L;
 return p;
}
LNode* GetNode(LNode *p)            /*/////////////释放出队结点*//////////////
{
 LNode *q;
 for (q=p;q->next!=p;q=q->next);
 q->next=p->next;
 free (p);
 return (q);
}
Print(LNode *p,int m)              /*/////////////输出函数*/////////////////
{
 int i;
 printf ("死者编号是:\n");
 while (p->next!=p)
 {
  if(!cnt)
   printf("\n生者编号是:\n");
  for (i=1;i<=m;i++)
   p=p->next;
  printf ("%d ",p->data);
  p=GetNode(p);
  cnt--;
 }
 printf("%d\n",p->data);
 return 0;
}
int main()                         ////////////////主函数/////////////////////
{
 
 LNode *p;
 int n=100,k=1,m=10;              ////n为总人数30,m为间隔数9,k为开始号1./////
 p=Create(n,k);
 Print(p,m);
 return 0;
}
///////////////////////////////////////////////////////////
默认分类 | 阅读 1619 次
文章评论,共0条
游客请输入验证码