「已注销」 2021-09-11 21:43 采纳率: 100%
浏览 60
已结题

想让约瑟夫斯环输出两个存活者,改完程序没有输出了,求解答

#include<stdio.h>
#include<stdlib.h>

typedef struct Node{
int data;
struct Node* next;
}LNode,*LinkList;

void Josephus(int n, int m/, int k/)
{
LinkList p = NULL, x = NULL, last = NULL, y=NULL;
int i;
for(i = 1; i <= n; i++)
{
p = (LNode*)malloc(sizeof(LNode));//向系统申请内存
if (p==NULL)
{//确保指针使用前为非空指针,当p为空指针时结束程序
printf("分配失败!");
exit(1);
}
p->data = i;//编号
if(last == NULL)
last = p;
else
x->next = p;//将x和p节点串起来
x = p;//x指针后移
}
p->next = last;//建立一个循环链表
p = last;//p指针后移
/for(i = 1; i < k; i++)
{
x = p;
p = p->next;
} //此时p指向第1个出发点
/
while(y->data != p->data)
{
for(i=1; i<m; i++)
{
x = p;
p = p->next;
} //p指向第m个结点,x指向第m-1个结点
x->next = p->next; //删除第m个结点
printf("%d号自杀\n", p->data); //输出一个结点编号
free(p); //释放被删除结点的空间
p = x->next; //p指向新的出发点
y = p->next;
}
printf("最后能生存下来的两个人为%d和%d号\n", p->data,y->data); //输出最后那个结点的编号
/free(p);
free(y);
/
}
int main()
{
int m/,k/,n;
printf("请输入总人数:");
scanf("%d",&n);
/printf("请输入从第几人报数:");
scanf("%d",&k);
/
printf("请输入间隔人数:");
scanf("%d",&m);
Josephus(n, m/, k/);
}

  • 写回答

1条回答 默认 最新

  • 关注

    img


    这里的y一直是NULL啊,一个NULL访问其属性会直接报错退出的
    有帮助望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月11日
  • 已采纳回答 9月11日
  • 创建了问题 9月11日

悬赏问题

  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序