当前位置: 首页 > news >正文

怎样在阿里巴巴做网站推广方案模板

怎样在阿里巴巴做网站,推广方案模板,wordpress个人主页主题,软件ui前言 哈喽,宝子们!本期为大家带来一道C语言循环链表的经典算法题(约瑟夫环)。 目录 1.什么是约瑟夫环2.解决方案思路3.创建链表头结点4.创建循环链表5.删除链表6.完整代码实现 1.什么是约瑟夫环 据说著名历史学家Josephus有过以下…

前言
哈喽,宝子们!本期为大家带来一道C语言循环链表的经典算法题(约瑟夫环)。

目录

  • 1.什么是约瑟夫环
  • 2.解决方案思路
  • 3.创建链表头结点
  • 4.创建循环链表
  • 5.删除链表
  • 6.完整代码实现

1.什么是约瑟夫环

据说著名历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被人抓到,于是决定了一个自杀方式,41个人拼成一个圆圈,由第一个人开始报数,每报数到第三人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。
然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
这道题的原理也是一样的,来看看这道题长什么样吧。
描述:
编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。下一个人继续从 1 开始报数。
n - 1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?
示例1:
输入:5, 2
返回值:3
说明:
开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开。
1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开。
1,3,5,从5开始报数,5->1,1->2编号为1的人离开。
3,5,从3开始报数,3->1,5->2编号为5的人离开。
最后留下人的编号是3。

2.解决方案思路

既然是循环的报数,那我们就可以用我们所学过的单链表来解决这道题。

  1. 那假设我们有n个人,就要创建n个节点,首先创建一个节点,然后同时用两个指针指向这个节点,这个节点既是头指针head,也是尾指针ptail
  2. 然后把这个创建的过程用一个函数封装起来,调用函数来创建剩下的几个节点,每次调用完就让ptail的next指针指向我们新创建的节点,然后更新ptail指针的位置。
  3. 此时,我们的节点已经全部创建完成了,但是最重要的一步,就是要让我们的链表形成一个环,最后让尾指针的next指针指向我们的head
  4. 接着就是报数的实现需要有循环,报数要用一个计数器count来记录,当count等于m的时候,就要删除当前这个节点,然后更改头指针和尾指针的位置,最后直到头指针指向自己,此时指针里val的值就是最终留下来的值。
    在这里插入图片描述

3.创建链表头结点

//创建头链表
ListNode* ListBuyNode(int x)
{ListNode* newhead = (ListNode*)malloc(sizeof(ListNode));//动态申请内存失败if (newhead == NULL){exit(1);}//申请成功newhead->val = x;newhead->next = NULL;return newhead;
}

4.创建循环链表

//创建带环链表
ListNode* CreateCircle(int n)
{//先创建第一个节点ListNode* head = ListBuyNode(1);ListNode* ptail = head;for (int i = 2; i <= n; i++){//用尾插的方式把节点连接起来ptail->next = ListBuyNode(i);ptail = ptail->next;//更新尾节点位置}//收尾相连,链表成环ptail->next = head;return ptail;
}

5.删除链表

//当链表中只有一个节点的情况就是循环的终止条件
while (pcur->next != pcur)
{if (count == m){//销毁pcur节点prev->next = pcur->next;free(pcur);pcur = prev->next;count = 1;}else{//此时不需要销毁节点prev = pcur;pcur = pcur->next;count++;}
}

6.完整代码实现

//定义节点
struct ListNode
{int val;struct ListNode* next;
};
typedef struct ListNode ListNode;//类型重定义
//创建头链表
ListNode* ListBuyNode(int x)
{ListNode* newhead = (ListNode*)malloc(sizeof(ListNode));if (newhead == NULL){exit(1);}newhead->val = x;newhead->next = NULL;return newhead;
}
//创建带环链表
ListNode* CreateCircle(int n)
{//先创建第一个节点ListNode* head = ListBuyNode(1);ListNode* ptail = head;for (int i = 2; i <= n; i++){ptail->next = ListBuyNode(i);ptail = ptail->next;}//收尾相连,链表成环ptail->next = head;return ptail;
}
int ysf(int n, int m) 
{//1.根据n创建带环链表ListNode* prev = CreateCircle(n);//尾指针ListNode* pcur = prev->next;//头指针int count = 1;//当链表中只有一个节点的情况就是循环的终止条件while (pcur->next != pcur){if (count == m){//销毁pcur节点prev->next = pcur->next;free(pcur);pcur = prev->next;count = 1;}else{//此时不需要销毁节点prev = pcur;pcur = pcur->next;count++;}}//此时剩下的最后一个节点里的值就是要返回的值return prev->val;
}
int main()
{//测试用例int win=ysf(5, 2);printf("%d", win);return 0;
}

如果对你有所帮助的话,别忘了点赞+关注哟❤️!

http://www.wooajung.com/news/22611.html

相关文章:

  • 淘宝网页视频如何下载重庆seo软件
  • 设计网站软件开发啦啦啦资源视频在线观看8
  • 吉安网站建设优化服务北京企业网络推广外包
  • 网站建设的目的定位盈利模式和功能网络推广企划
  • wordpress数字交易seo的优点有哪些
  • 网站设计开发维护bing搜索引擎入口官网
  • PHP套模板做网站游戏行业seo整站优化
  • 网页设计怎么运行seo网站优化专家
  • wordpress 主题 汉化教程网站优化公司
  • 电子商务网站建设选择服务器要考虑的因素有免费培训网站
  • 高端网站的制作可以推广的平台
  • 全国领先网站制作营销策略是什么
  • 深圳十大品牌策划公司百度网站怎么优化排名
  • 网站建设注意要求优秀的网页设计网站
  • wordpress做的学校网站常州网站建设优化
  • 现在币圈有那些私募网站做的好聚名网官网
  • 政府网站谁做的市场调研报告最佳范文
  • 网页游戏推广网站怎么做刷死粉网站推广
  • 网页设计动画网站企业网站推广的一般策略
  • 学校网站设计图片福州网站排名
  • 建在线教育网站需要多少钱电子报刊的传播媒体是什么
  • 高校网站建设说明书搜索引擎bing
  • ps网站banner怎么做六年级下册数学优化设计答案
  • 做校园后勤管理网站得重点难点seo知识是什么意思
  • 网站权重排行榜在哪里推广自己的产品
  • 什么网站做的好百度app交易平台
  • wordpress模板在哪个文件夹南京百度提升优化
  • 云主机做网站永久保留网站seo是什么味
  • 新闻网站做服务网站引流推广怎么做
  • 网页设计与网站建设在线考试答案百度权重高的网站有哪些