数据结构,是很重要的一门学科,每年考研,数据结构是各大院校必考的科目。当然,数据结构,最令人头疼的就是算法设计题了。为了帮助大家理解和掌握数据结构常见的算法,学长推出系列文章,为大家分享这些重要算法的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; // 清空队列的最后一个
}