数据结构之约瑟夫环C语言实现


数据结构,是很重要的一门学科,每年考研,数据结构是各大院校必考的科目。当然,数据结构,最令人头疼的就是算法设计题了。为了帮助大家理解和掌握数据结构常见的算法,学长推出系列文章,为大家分享这些重要算法的C语言完成实现,大家有条件的话,可以在电脑上调试运行,加深对算法的理解和掌握。



关于怎么快速学C/C++,可以加下小编的C/C++学习裙:341+636+727,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,欢迎初学和进阶中的小伙伴。

每天晚上20:00都会开直播给大家分享C/C++游戏编程学习知识和路线方法,群里会不定期更新最新的教程和学习方法,最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实


下面先为大家分享约瑟夫环的C语言实现。

#include

#include

typedef struct LNode{

int data; // 密码

int order; // 序号

struct LNode *next;

}LNode;

void main()

{

struct LNode *head;//head为头指针

struct LNode *p1,*p2;

int i,j,m,n;

printf("输入人数: ");//输入人数

scanf("%d",&n);

//为了简化代码,建表的时候使用一个空的Node作为表头,建好以后删除。

p1=(struct LNode*)malloc(sizeof(LNode));

head = p1;

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

{

p1->next =(struct LNode*)malloc(sizeof(LNode));

printf("输入第 %d 个人的密码: ",i);//输入密码

scanf("%d",&p1->next->data);

p1->next->order = i;

p1 = p1->next;

}

p1->next = head->next; // 首尾相连,此时p1指向链表的尾

//删除空表头

p2 = head->next; //此时p2指向链表的头

delete head;

printf("输入上限: ");

scanf("%d",&m);//输入上限

printf("出列顺序:");

while(p2->next != p2){//当人数大于1个的时候

for(j=1;j < m;j++)//运行至第m个,因为p2指向的是第1个,所以只要跑m-1次,就指向了第m个

{

p1 = p2;

p2 = p2->next;

}

printf(" %d",p2->order); //第m个人出列

m = p2 ->data;

p1 -> next = p2 ->next;//删除第m个结点

delete p2;

p2 = p1 ->next;

}

printf(" %d ",p2->order); //输出队列的最后一个人

delete p2; // 清空队列的最后一个

}

推荐阅读更多精彩内容

  • 1.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建...
    锐心凌志阅读 6,079评论 2 31
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 1,761评论 0 2
  • 今早刷微博,一个年轻男子在北京地铁上欺负两个女生的视频在网上引起一片热议。许多网友转发评论,甚至薛之谦都下场转发,...
    稀饭与黏粥阅读 87评论 0 0
  • 95、(七月训练营)7月1日,今日大雨,即将到新部门工作,感谢前领导和现领导的支持和理解。心里平静不了,可以感觉到...
    阿白不急阅读 1,028评论 0 1
  • 明天你是否会想起 昨天你写的日记 明天你是否会惦记 曾经最爱哭的你 老师们都已想不起 猜不出问题的你 我也是偶然翻...
    Ailx阅读 101评论 0 0