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

问题描述

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

在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的部分求解释

解决方案

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

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

#define MAX 10
typedef struct node V_NODE;
struct node{
int id;
struct node *n......
答案就在这里:链表解决约瑟夫环问题

解决方案二:

解决方案三:

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

解决方案四:

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

解决方案五:

debug会吗

时间: 2024-08-01 08:32:31

初学链表,解决约瑟夫环问题。的相关文章

c语言-用链表解决约瑟夫问题,我要怎么写主函数啊?

问题描述 用链表解决约瑟夫问题,我要怎么写主函数啊? 解决方案 #include<stdio.h> #include <stdlib.h> typedef struct node//节点存放一个数据和指向下一个节点的指针 { int data; struct node* pnext; } Node; Node *link_create(int n)//创建n个节点的循环链表 { //先创建第1个节点 Node *p,*q,*head; int i ; p = (Node *)mal

c#-link能不能解决约瑟夫环的问题?

问题描述 link能不能解决约瑟夫环的问题? link能不能解决约瑟夫环的问题?C#+link去解决??? 解决方案 http://www.cnblogs.com/ziyiFly/archive/2008/09/10/1288105.html 解决方案二: http://tieba.baidu.com/p/2432947278 解决方案三: 你参考一下c语言版本的 #include 8 #include 9 10 // 链表节点 11 typedef struct _RingNode 12 {

python超简单解决约瑟夫环问题

  本文实例讲述了python超简单解决约瑟夫环问题的方法.分享给大家供大家参考.具体分析如下: 约瑟环问题大家都熟悉.题目是这样的.一共有三十个人,从1-30依次编号.每次隔9个人就踢出去一个人.求踢出的前十五个人的号码: 明显的约瑟夫环问题,python实现代码如下: ? 1 2 3 4 5 6 a = [ x for x in range(1,31) ] #生成编号 del_number = 8 #该删除的编号 for i in range(15): print a[del_number]

php解决约瑟夫环示例

 这篇文章主要介绍了php解决约瑟夫环示例,需要的朋友可以参考下 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称"丢手绢问题".)   猴子一群,都带着号码的,站好了一圈,数到m的枪毙,剩下的接着数.如此往复,死剩下的一个就疯了    代码如下: <?php function killMonkeys($monkeys, $m){     $k = $m;     while (count($monkey

scheme解决约瑟夫环问题(续)

sicp的习题3.22,也就是以消息传递的风格重新实现队列,我的解答如下: (define (make-queue)   (let ((front-ptr '())        (rear-ptr '()))  (define (set-front-ptr! ptr) (set! front-ptr ptr))   (define (set-rear-ptr! ptr) (set! rear-ptr ptr))   (define (empty-queue?) (null? front-ptr

php解决约瑟夫环示例_php实例

约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称"丢手绢问题".) 猴子一群,都带着号码的,站好了一圈,数到m的枪毙,剩下的接着数.如此往复,死剩下的一个就疯了 复制代码 代码如下: <?phpfunction killMonkeys($monkeys, $m){    $k = $m;    while (count($monkeys)){        $k = $k - 1;        $mon

编程-约瑟夫环问题用java怎么解决,有简单点的方法吗

问题描述 约瑟夫环问题用java怎么解决,有简单点的方法吗 一组人(n)个,围成一圈,从某人开始数到滴三个的人出列,在接着从下一个人开始数,最终输出最终出列的人(约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3,...,n)分别表示)围坐在一张圆桌周围.从编号k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,知道圆桌周围的人全都出列. 解决方案 import java.util.Scanner; public class count

利用简洁的C语言代码解决跳台阶问题与约瑟夫环问题_C 语言

跳台阶问题 题目: 一个台阶总共有 n 级,如果一次可以跳 1 级,也可以跳 2 级. 求总共有多少总跳法,并分析算法的时间复杂度. 分析: 也是比较基础的题目,通过递归可以方便的求解 代码实现如下(GCC编译通过): #include "stdio.h" #include "stdlib.h" int function(int n); int main(void) { int tmp; tmp = function(5); printf("%3d\n&q

C++循环链表之约瑟夫环的实现方法_C 语言

本文实例形式展示了C++实现循环链表中约瑟夫环的方法,分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: #include <iostream> using namespace std; typedef struct student { int data; struct student* next; }node,*LinkList; //约瑟夫环 void printfList(LinkList head){ LinkList p=head; if (head!=NULL) { do