C语言描述怎么用循环队列实现猴子选大王
答案:1 悬赏:80 手机版
解决时间 2021-03-24 23:26
- 提问者网友:心牵心
- 2021-03-24 04:04
C语言描述怎么用循环队列实现猴子选大王
最佳答案
- 五星知识达人网友:人類模型
- 2021-03-24 05:20
#include
#include
typedef struct node//定义链表节点类型
{
int data;
struct node *next;
}linklist;
int main()
{
int i, n, k, m, total;
linklist *head, *p, *s, *q;
printf("请输入猴子总数:");// 读入问题条件
scanf("%d", &n);
printf("请输入开始计数的猴子数:");
scanf("%d", &k);
printf("请输入数:");
scanf("%d", &m);
head = (linklist*)malloc(sizeof(linklist)); // 创建循环链表,头节点也存信息
p = head;
p->data = 1;
p->next = p;
for (i = 2; i <= n; i++) //初始化循环链表
{
s = (linklist*)malloc(sizeof(linklist));
s->data = i;
s->next = p->next;
p->next = s;
p = p->next;
}
p = head;
for (i = 1; i < k; i++) //找到第 k 个节点
{
p = p->next;
}
total = n; // 保存节点总数
printf("
失序:");
q = head;
while (total != 1) // 只剩一个节点时停止循环
{
for (i = 1; i < m; i++) // 报数过程,p指向要删除的节点
{
p = p->next;
}
printf("[%d] ", p->data); // 打印要删除的节点序号
while (q->next != p) // q 指向 p 节点的前驱
{
q = q->next;
}
q->next = p->next; // 删除 p 节点
s = p; // 保存被删除节点指针
p = p->next; // p 指向被删除节点的后继
free(s); // 释放被删除的节点
total--; // 节点个数减一
}
printf("
猴子王是第 [%d] 只
", p->data);// 打印最后剩下的节点序号
free(p);
system("pause");
return 0;
}
#include
typedef struct node//定义链表节点类型
{
int data;
struct node *next;
}linklist;
int main()
{
int i, n, k, m, total;
linklist *head, *p, *s, *q;
printf("请输入猴子总数:");// 读入问题条件
scanf("%d", &n);
printf("请输入开始计数的猴子数:");
scanf("%d", &k);
printf("请输入数:");
scanf("%d", &m);
head = (linklist*)malloc(sizeof(linklist)); // 创建循环链表,头节点也存信息
p = head;
p->data = 1;
p->next = p;
for (i = 2; i <= n; i++) //初始化循环链表
{
s = (linklist*)malloc(sizeof(linklist));
s->data = i;
s->next = p->next;
p->next = s;
p = p->next;
}
p = head;
for (i = 1; i < k; i++) //找到第 k 个节点
{
p = p->next;
}
total = n; // 保存节点总数
printf("
失序:");
q = head;
while (total != 1) // 只剩一个节点时停止循环
{
for (i = 1; i < m; i++) // 报数过程,p指向要删除的节点
{
p = p->next;
}
printf("[%d] ", p->data); // 打印要删除的节点序号
while (q->next != p) // q 指向 p 节点的前驱
{
q = q->next;
}
q->next = p->next; // 删除 p 节点
s = p; // 保存被删除节点指针
p = p->next; // p 指向被删除节点的后继
free(s); // 释放被删除的节点
total--; // 节点个数减一
}
printf("
猴子王是第 [%d] 只
", p->data);// 打印最后剩下的节点序号
free(p);
system("pause");
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯