|
|
#2
2010-05-19 21:41
顺序表的方法,我总想不出多好的,见谅哈.
#include <stdio.h>
#define maxsize 100
int main()
{
int i,k,j;
int array[maxsize];
int m,n;
j=0;k=0;
scanf("%d",&m);
for(i=0;i<m;i++)
array[i]=i+1;
scanf("%d",&n);
for(i=0;k<m;i=(i+1)%m,j++)
{
while(array[i]==0) i=(i+1)%m;
if(j==n-1)
{
printf("%d ",array[i]);
array[i]=0;
k++;
j=0;i=(i+1)%m;
if(k<m) while(array[i]==0) i=(i+1)%m;
}
}
return 0;
}
链表:
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}LNode,*LinkList;
LinkList Creatlist(ElemType m)
{
LinkList L,p,q;
ElemType i;
L=(LinkList)malloc(sizeof(LNode));
L->data=1;
p=L;
for(i=1;i<m;i++)
{
q=(LinkList)malloc(sizeof(LNode));
q->data=i+1;
p->next=q;p=q;
}
p->next=L;
return L;
}
void Joseph(LinkList L,int n)
{
LinkList p,q;
int i;
i=0;
p=(LinkList)malloc(sizeof(LNode));
p->next=L;q=L;
while(p->next!=p)
{
p=p->next;q=q->next;
i++;
if(i==n-1)
{
p->next=q->next;
printf("%d ",q->data);
free(q);
q=p->next;
i=0;
}
}
printf("%d ",p->data);
printf("\n");
}
void printlist(LinkList L)
{
LinkList p;
p=L;
printf("%d ",p->data);
p=p->next;
while(p!=L)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
int m;int n;
LinkList L;
scanf("%d",&m);
L=Creatlist(m);
printlist(L);
scanf("%d",&n);
Joseph(L,n);
return 0;
}
|