2 u011382294 u011382294 于 2016.05.11 00:06 提问

初学链表,解决约瑟夫环问题。

在codebolcks里面运行能够正常出结果,但是不是return 0,return的数字和输入的n有关请问我的代码有问题吗?

#include
#include
struct child
{
int num;
struct child *pre;
struct child *next;
};

int main()
{
int n,k;
scanf("%d %d",&n,&k);
struct child *current,*prev,*home;
current = (struct child *) malloc(sizeof(struct child));
current->num=1;
prev=current;
home=current;
int i,roll=1;
for (i=1; i current = (struct child *) malloc(sizeof(struct child));
if (current == NULL) {
printf("wrong!");
}
current->num=1+i;
current->pre=prev;
prev->next=current;
prev=current;
}
prev->next=home;
home->pre=prev;
int num,mod;
while (roll<=n)
{
if (roll>1) {
putchar(' ');
}
num=roll+k-1;
mod=num%(n-roll+1);
while (mod>0)
{
home=home->next;
//printf("%p",home);
mod--;
}
printf("%d",home->num);
prev=home->pre;
prev->next=(home->next);
prev=home;
home=home->next;
free(prev);
roll++;
}
}
运行结果如图:return 6的部分求解释
图片说明

5个回答

CSDNXIAOS
CSDNXIAOS   2016.05.11 00:12

现在用链表解决约瑟夫环问题,链表与数组的区别在于,链表的出列是删除结点,而数组并没有真正删除元素,只是标记为不存在。
上代码:

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

#define MAX 10
typedef struct node V_NODE;
struct node{
int id;
struct node *n......
答案就在这里:链表解决约瑟夫环问题
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

u011382294
u011382294 我补了张图,是去掉释放内存代码的运行结果。。还是有问题
大约 2 年之前 回复
u011382294
u011382294   2016.05.11 00:19

这是不手动释放内存的运行结果,return部分还是有问题。。。

havedream_one
havedream_one   2016.05.11 08:05

http://blog.csdn.net/newnewman80/article/details/5989449 先看看别人是怎么写的,再体会自己哪里疏忽了

qq423399099
qq423399099   Ds   Rxr 2016.05.11 09:09

如果没有return,那么返回值是不确定的,看当时寄存器的值是什么了
楼主的main函数里也没有return,如果是在别的函数里这样写的话一般来说是过不了编译的

AgoniAngel
AgoniAngel   Rxr 2016.05.11 10:42

debug会吗

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c++链表,解决约瑟夫环问题
自己写的链表,并用链表解决了约瑟夫环问题,大家给个意见,主要是链表
约瑟夫环问题的链表实现
        据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从
使用循环单链表解决约瑟夫环问题
#include iostream>  #include typeinfo>  #include stdio.h>  using namespace std;    typedef struct LNode{     int data;      struct LNode* link;  }LNode,*LinkList;  void JOSEPHUS(int n,int k,int m){
使用单链表求解约瑟夫环问题
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 单链表参考:http://blog.csdn.net/tanlon_0308/article/details/40426745  
java循环链表实现约瑟夫环问题
文章主要用循环链表实现了约瑟夫环问题。约瑟夫环问题详细问题可以百度。
用java实现链表并解决约瑟夫环问题
package 栈和队列; /** * * 数到3的人出列 ,看最后能剩下谁 * @author wangmeng * */ class Node { public Object data; public Node next; public Object getData() { return data; } public void setData(Objec
java链表实现约瑟夫环
最近学数据结构,看到约瑟夫环这一块就卡住了...感觉好难,书上的练习题叫我直接用链表实现,可是一开始的思路都没有,看了很多其他高手的代码也不是很明白,后来想想还是先用简单的数组试着写写看。 可能是我对链表的理解还不是很透彻,数组写了半天。。。差不多也能大概的实现了,很复杂,可读性也不好........但毕竟实现了,通过数组实现的经验之后,链表也开始有点思路起来。再在网上搜了一些高手的代码,慢慢的
【C语言】约瑟夫环(用单向循环链表解决)
约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。这里我用单向循环链表来解决这个问题。 我们先考虑几种情况: 当m=1和k=1的时候,要挨个删除链表中的结点。 在k!=1和m=1的情况下,指针必须先向后移动到k的位置,并且记住k的
用单向循环链表解决约瑟夫环(Joseph)问题
约瑟夫环(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始人选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从它在顺时针方向的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。
使用链表解决约瑟夫环的问题
单链表解决约瑟夫环的问题