没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
( 完整版)数据结构经典题目及 c 语言代码
《《数数据据结结构构》》课课程程设设计计题题目目
( 程程序序实实现现采采用用 C语语言言)
题题目目 1::猴猴子子选选王王( 学学时时: 3))
一堆猴子都有编号,编号是 1,2,3 . 。.m,这群猴子( m个) 按照 1-m 的顺序围坐一圈,从
第 1 开始数,每数到第 n 个, 该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴
子,则该猴子为大王
.
要求:m 及 n 要求从键盘输入 , 存储方式采用向量及链表两种方式实现该问题求解 .
// 链表
#include 〈stdio.h 〉
#include 〈stdlib.h>
// 链表节点
typedef struct _RingNode
{
int pos ;
struct _RingNode *next;
}RingNode, *RingNodePtr ;
// 创建约瑟夫环, pHead: 链表头指针 ,count :链表元素个数
void CreateRing(RingNodePtr pHead, int count)
{
RingNodePtr pCurr = NULL , pPrev = NULL ;
int i = 1;
pPrev = pHead ;
while (——count 〉 0 )
{
pCurr = (RingNodePtr )malloc (sizeof (RingNode));
i++;
( 完整版)数据结构经典题目及 c 语言代码
pCurr —〉pos = i ;
pPrev- 〉next = pCurr ;
pPrev = pCurr;
}
pCurr- 〉next = pHead; // 构成环状链表
}
void KickFromRing(RingNodePtr pHead , int n)
{
RingNodePtr pCurr, pPrev ;
int i = 1 ; // 计数
pCurr = pPrev = pHead ;
while(pCurr != NULL)
{
if (i == n )
{
// 踢出环
printf ("\n %d", pCurr->pos); // 显示出圈循序
pPrev —>next = pCurr->next ;
free (pCurr) ;
pCurr = pPrev —>next ;
i = 1;
}
pPrev = pCurr ;
pCurr = pCurr —〉next;
if (pPrev == pCurr)
{
// 最后一个
printf("\nKing is %d", pCurr —〉pos ); // 显示出圈循序
free (pCurr) ;
break ;
}
i++;
}
( 完整版)数据结构经典题目及 c 语言代码
}
int main ()
{
int n = 0, m = 0 ;
RingNodePtr pHead = NULL;
printf("M (person count ) = ”) ;
scanf(”%d”, &m);
printf("N (out number) = " );
scanf(”%d”, &n);
if(m 〈= 0 | | n <= 0 )
{
printf("Input Error\ n”);
return 0;
}
// 建立链表
pHead = (RingNodePtr)malloc (sizeof (RingNode));
pHead->pos = 1;
pHead->next = NULL;
CreateRing(pHead , m);
// 开始出圈
printf("\nKick Order : ") ;
KickFromRing(pHead , n );
printf(” \n" );
system(”pause”);
return 0 ;
}
// 数组做:
#include 。h〉
#include 〈stdlib 。h〉
( 完整版)数据结构经典题目及 c 语言代码
#include
void SelectKing (int MonkeyNum, int CallNum) ;
void main( )
{
int MonkeyNum ;
int CallNum ;
/ * 输入猴子的个数 */
print f("Monkey Num = ”);
scanf(”% d", &MonkeyNum);
/ * 输入 M的值 */
printf ("Call Num = " );
scanf(" %d", &CallNum) ;
SelectKing(MonkeyNum , CallNum );
}
void SelectKing (int MonkeyNum, int CallNum )
{
int *Monkeys; // 申请一个数组,表示所有的猴子;
int counter = 0 ; // 计数,当计数为猴子个数时表示选到最后一个猴子了;
int position = 0; // 位置,数组的下标 , 轮流遍历数组进行报数 ;
int token = 0; // 令牌,将报数时数到 M的猴子砍掉;
// 申请猴子个数大小的数组,把桌子摆上。
Monkeys = (int *)malloc (sizeof (int )* MonkeyNum);
if (NULL == Monkeys)
{
printf("So many monkeys, system error.\n") ;
( 完整版)数据结构经典题目及 c 语言代码
return;
}
// 将数组的所有内容初始化为 0,被砍掉的猴子设置为 1
memset (Monkeys, 0 , sizeof(int )*MonkeyNum);
// 循环,直到选中大王
while(counter != MonkeyNum )
{
// 如果这个位置的猴子之前没有砍掉,那么报数有效
if (Monkeys[position ] == 0)
{
token++; // 成功报数一个 , 令牌+1,继续报数直到等于 M
// 如果报数到 M,那么将这个猴子砍去
if (token == CallNum)
{
Monkeys[position ] = 1; // 设置为 1, 表示砍去
counter++; // 计数增加
token = 0 ; // 设置为 0,下次重新报数
// 如果是最后一个猴子,把它的位置打印,这个就是大王了
if (counter == MonkeyNum)
{
printf("The king is the %d monkey.\n" , position+1) ;
}
}
}
// 下一个猴子报数
position = (position + 1) %MonkeyNum;
}
剩余48页未读,继续阅读
王者与CV
- 粉丝: 256
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- KIMI大模型浏览器插件
- b61fa64a08a02de0e0d49d53bb84c444.amr
- 5ffd9193f6aec31bbf16030a46680dc7.avi
- DA14531-蓝牙传感器连接传输数据固件
- logisim实验MIPS运算器(ALU)设计(内含4位先行进位74182、四位快速加法器、32位快速加法器)-Educoder_logisim里面连线,实现4位先行进位74182和4位快速加法器-C
- 高等数学第一章第二节数列的极限
- Python 版冒泡排序算法源代码
- 基于YOLOv8的教室人脸识别 附源码 预训练模型
- 基于JAVA实现的用于全局监控网络请求错误并记录日志的library
- tensorflow-gpu-2.7.2-cp38-cp38-manylinux2010-x86-64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0