本帖最后由 geige 于 2015-7-26 00:48 编辑

#include

#include

struct stu //构建一个新的数据类型

{

int num;

struct stu *next;

};

struct stu *createlist(int n);  //函数声明

int main()

{

struct stu *head,*p,*temp;   //定义头指针,以及中间指针temp,用来删除节点

int n,m,i,j=1,flag=0;

printf("Please input n and m:\n");

scanf("%d%d",&n,&m);

head=createlist(n);          //调用函数来创建链表并返回头指针赋值给head

p=head->next;                //将首节点的地址赋值给p

if(m==1)                     //如果m等于1,直接按顺序输出

{

while(p!=NULL)

{

printf("%d ",p->num);

p=p->next;

}

putchar('\n');

}

else

{

while(n!=1)

{

for(i=1;i<=n;i++)

{

if(p!=NULL)

{

if(j==m)

{

printf("%d ",p->num);

if(p==head->next)

head->next=p->next; //如果删除的是首结点,那么将第二个节点作为首节点

temp->next=p->next;

p=temp->next;

j=1;

flag++;

}

else

{

j++;

temp=p;

p=p->next;

}

}

}

n=n-flag; //退出的人数要减去

flag=0;

p=head->next; //将首节点重新赋给p

}

printf("%d\n",temp->num); //输出最后一个数

}

free(p); //释放内存

return 0;

}

struct stu *createlist(int n)

{

int i;

struct stu *phead=(struct stu*)malloc(sizeof(struct stu)),*ptail;  //申请头结点

if(phead==NULL)

{

printf("Not able apply for memory !\n");

return 0;

}

ptail=phead; //

ptail->next=NULL; //将头结点的下一个地址置空

for(i=1;i<=n;i++)

{

struct stu *pnew=(struct stu*)malloc(sizeof(struct stu)); //开辟新的节点

if(pnew==NULL)

{

printf("Not able apply for memory !\n");

return 0;

}

pnew->num=i;

ptail->next=pnew;

pnew->next=NULL;

ptail=pnew; //节点前移

}

return phead; //返回头指针

}

约瑟夫环c语言程序完整版,C语言:约瑟夫环问题(源代码)相关推荐

  1. java约瑟夫环pta上_cdoj525-猴子选大王 (约瑟夫环)

    约瑟夫斯问题问题有时候也被描述成猴子选大王问题,题目如下.(最后会贴上约瑟夫问题的来历) 一群猴子排成一圈,按1,2,-,n依次编号. 然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再 ...

  2. c语言删除双向链表重复元素,求一个双向链表的建立,插入删除的c语言程序完整版的,借鉴一下思想,再多说一下就是能运行的那种...

    最佳答案 //链表的操作编辑 //线性表的双向链表存储结构 typedef struct DuLNode { ElemType data; struct DuLNode *prior,*next; } ...

  3. 约瑟夫环(c语言程序完整版)

    约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列: ...

  4. 和尚吃馒头c语言程序,(八十一)约瑟夫环/鲁智深吃馒头

    问题:99个人,99个馒头,来了一个鲁智深,找个位置把他放进去,然后每逢五的人,吃一个馒头,并且退场,最后让他无法吃. 代码: #include int main() { using namespac ...

  5. 约瑟夫环数据结构c语言程序,数据结构的C语言(类C语言)--单向循环链表--约瑟夫环...

    代码区 约瑟夫环:用类C语言实现!!!可以成功运行!!!不是仅仅的算法,而是实实在在的类C #include #include typedef int ElemType; typedef struct ...

  6. 程序员面试系列——约瑟夫环

    约瑟夫斯问题(Josephus Problem) 约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为"约瑟夫环",也 ...

  7. # R语言——约瑟夫环

    约瑟夫环: n个人围成一个圈,从第一个人点名,每数到第三个人,这个人移出圈外, 依次类推,求最后留下来的人编号是? 思路:每次循环重新编码序号作为names,并根据names 进行筛选 拓展:约瑟夫环 ...

  8. 约瑟夫环c语言代码 指针,约瑟夫环C语言实现源代码(1)

    前天笔试有个约瑟夫环的问题,怪不得人家没通知我面试,原来我的约瑟夫环做的确实有问题,昨天晚上又重新做了下,下面上源代码: /* file:osephu.cpp author:www.5dkx.com ...

  9. c语言学生作业ppt课件怎么做,C语言课件完整版(精华).ppt

    <C语言课件完整版(精华).ppt>由会员分享,可在线阅读,更多相关<C语言课件完整版(精华).ppt(484页珍藏版)>请在人人文库网上搜索. 1.1,计算机程序设计基础(C ...

最新文章

  1. 如何设置windows下xampp的phpMyAdmin外网访问?
  2. Yuhao and a Parenthesis
  3. 盘一盘2021全球流量最高的网站~
  4. BackTrack5 安装中文输入法
  5. Android 简单实现订单模块类APP的物流详情页
  6. CSS: hover选择器的使用
  7. Linux shell编程学习总结
  8. 怎么把竖列中的数相加python_使用python将另一列的列和总和内容分组
  9. SQL Server 2000企业管理器中MMC无法创建管理单元的解决方法
  10. python列表添加对象_python list append命令 添加对象
  11. 第一部分 线程APIs(Thread APIs)线程和运行(Threads and Runnables)
  12. Centos7 下Jenkins 安装
  13. /proc/sysrq-trigger的使用
  14. final关键字多态
  15. 今日头条的排名算法_今日头条的推荐算法原理分析
  16. 关于虚拟机中的HWADDR和MACADDR地址
  17. Steam云状态无法同步怎么办?
  18. javaweb企业员工考勤管理系统案例
  19. 二十八. 智能驾驶笔记之基于PointNet++的三维点云分类和语义分割
  20. 江苏移动MGV3000-YS(S)/YS(M)-S905L3卡刷和线刷固件包

热门文章

  1. java最接近对点及距离_最接近点对问题_分治法
  2. 关于java中锁的面试题_Java面试题-Java中的锁
  3. PHP | 计算字符串中的单词总数
  4. 递归转化成非递归过程_8086微处理器中的递归和重入过程
  5. 不错!SpringBoot发布Jar包优化瘦身指南!
  6. 实战:Redis 性能测试
  7. 漫画:Java如何实现热更新?
  8. 「递归」的正确打开方式,看不懂你打我~
  9. C语言实现线性动态(单向)链表【详细步骤】
  10. 自适应阈值算法(大津阈值法)