作者在 2008-10-02 11:20:22 发布以下内容
这个太经典,算法也挺多。。。
我收藏的和我自己写的都贴出来:
#include <stdlib.h>
#include <stdio.h>
typedef struct node
{
int data;
struct node *next;
}LNode;
#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,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;
}
{
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);
}
{
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;
}
{
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;
#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* 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);
}
{
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 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;
}
{
LNode *p;
int n=100,k=1,m=10; ////n为总人数30,m为间隔数9,k为开始号1./////
p=Create(n,k);
Print(p,m);
return 0;
}
///////////////////////////////////////////////////////////