码迷,mamicode.com
首页 > 其他好文 > 详细

约瑟夫问题循环链表实现

时间:2015-06-30 20:31:16      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:链表   数据结构   约瑟夫问题   

#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"


typedef struct Node

{

int data;

struct Node * pNext;
}NODE,* PNODE;


PNODE create_list(void)
{
int i;
int len;




printf("请输入总人数:");
scanf("%d",&len);


PNODE pHead=(PNODE)malloc(sizeof(NODE));
if(pHead==NULL)
{
printf("动态分配失败!");
exit(-1);
}
    pHead->pNext=pHead;
PNODE pTial=pHead;




for(i=1;i<=len;i++)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(pNew==NULL)
{
  printf("动态分配失败!");
  exit(-1);
}


pNew->data=i;
pNew->pNext=pTial->pNext;
pTial->pNext=pNew;
pTial=pNew;
}
return pHead;
}
void treavese_list(PNODE pHead)
{
PNODE p;
p=pHead->pNext;
while(p!=pHead)
{
printf("%d  ",p->data);
p=p->pNext;
}
printf("\n");
return;
}


void search_list(int n,int s,int m)
{
int i,j,k;
PNODE q,r,Head;
if(n<s)
{
printf("查找失败!\n");
return;
}
Head=create_list();
treavese_list(Head);


printf("\n");
printf("\n");
q=Head;
for(k=1;k<s;k++)
{
q=q->pNext;
}
for(i=1;i<n;i++)
{
for(j=1;j<m;j++)
{
q=q->pNext;


if(q==Head)
{
q=q->pNext;
}
}
if(q->pNext==Head)
{
q=Head;
}
r=q->pNext;
printf("%d\n",r->data);
q->pNext=r->pNext;
free(r);
}
  printf("%d\n",Head->pNext->data); 
}
int main()
{
int n,s,m;
PNODE r;
printf("Intput n, s and m:");
scanf("%d%d%d",&n,&s,&m);
search_list(n,s,m);
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

约瑟夫问题循环链表实现

标签:链表   数据结构   约瑟夫问题   

原文地址:http://blog.csdn.net/u014180504/article/details/46698091

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!