| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 707 人关注过本帖
标题:约瑟夫环求指导啊。。。。用的是链表,就是不知道哪里有问题编译不出来
只看楼主 加入收藏
Emily_CYY
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2013-4-1
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
约瑟夫环求指导啊。。。。用的是链表,就是不知道哪里有问题编译不出来


#include <stdio.h>
#include <malloc.h>
#define ERROR 0
typedef int ElemType;

typedef struct LNode{   //创建结点

    ElemType data;
    struct LNode  *next;
}LNode,*LinkList;     

void CreatList_LinkList(LinkList L,int  n)   
//创建一个循环链表,并赋值1~n
{     
    int i;
    LinkList p,q;  
    q=L;  //q为头指针
    L->data=1;
    for (i=1;i<=n;i++){
   
        p=(LinkList)malloc(sizeof(LNode));
        if(!p) return ERROR;
        p->data=i+1;
        q->next=p;
        p->next=L;
        q=p;
    }
}

LinkList LookFor_LinkList(LinkList L,int m)
//找到开始的其实节点
{
    int i;
    LinkList p;
    p=L;
    for(i=1;i<m;i++)  p=p->next;
    return p;
}

void Josephus(LinkList L,int  m,int k)
{
    int i,j;
    ElemType e;
    LinkList p,s,q;
    s= LookFor_LinkList(L, m);
    p=s;
    q=s;
    if(L){
    for(i=1;i<k-1;i++)      p=p->next;
    for(j=1;j<=k;j++)          q=q->next;
    e=p->next->data;
    free(p->next);
    p->next=q;
    printf("%d  ",e);
    }
}

void main(){

    LinkList L;
    CreatList_LinkList( L,9);
    LookFor_LinkList(L,1);
    Josephus(L,1,5);

}
搜索更多相关主题的帖子: 指导 next include 约瑟夫 return 
2013-04-01 22:12
Emily_CYY
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2013-4-1
收藏
得分:0 
用的是C语言
2013-04-01 22:13
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:2 
主函数 L未初始化,所以L->data=1;不能访问,后面Josephus中 用 if(L)只能输出一个节点,

LookFor_LinkList没什么意义、


[fly]存在即是合理[/fly]
2013-04-02 00:01
Emily_CYY
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2013-4-1
收藏
得分:0 
谢谢了!!。。。初学,人有点笨,没办法。。。呵呵

[ 本帖最后由 Emily_CYY 于 2013-4-2 18:02 编辑 ]
2013-04-02 18:00
Emily_CYY
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2013-4-1
收藏
得分:0 
回复 3楼 azzbcc
不好意思,我想问下那个CreatList_LinkList( L,9);不就已经创建和初始化了吗。。。。。还有那个if改成while,可以吗?
2013-04-02 18:17
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
以下是引用Emily_CYY在2013-4-2 18:17:27的发言:

不好意思,我想问下那个CreatList_LinkList( L,9);不就已经创建和初始化了吗。。。。。还有那个if改成while,可以吗?

函数初始化的只是函数局部域的形参变量 而L是没有变的
也就是说 你函数里的那个L跟主函数的这个L不是一个东西

人生是一场错过 愿你别蹉跎
2013-04-02 18:37
Emily_CYY
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2013-4-1
收藏
得分:0 
回复 6楼 fanpengpeng
那我该怎么改呢。。。。求教啊。。。。
2013-04-02 19:02
Emily_CYY
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2013-4-1
收藏
得分:0 
回复 6楼 fanpengpeng
我这样
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;初始化了,
但是结果是5 9 4 2 7 1.。。。怎么回事呢。。。。
2013-04-02 19:16
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:8 
程序代码:
#include <stdio.h>
#include <malloc.h>

#define ERROR NULL

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

LinkList CreatList_LinkList(int  n)   
{     
    int i;
    LinkList p, q, head;  

    head = q = (LinkList)malloc(sizeof(LNode));
     if(p == NULL) 
         return ERROR;
         
     head->data = 1;
     head->next = head;

    for(i=2; i<=n; i++){
        p=(LinkList)malloc(sizeof(LNode));
        if(p==NULL)
            return ERROR;
         
        p->data = i;
        p->next = q->next;
        q->next = p;
        q = p;
}
    
    return head;
}

LinkList LookFor_LinkList(LinkList p, int m)
{
    int i;
    for(i=1; i<m; i++)  p = p->next;
    return p;
}

void Josephus(LinkList L, int k, int m)
{
    ElemType e;
    LinkList p, q;
    
    p = LookFor_LinkList(L, k);
    
    while(p->next != p){
        p = LookFor_LinkList(p, m-1);
        q = p->next;
        e = q->data;
        p = p->next = q->next;
        free(q);
        printf("%d  ",e);
    }   
}

int     main(){

    LinkList L = CreatList_LinkList(20);
    Josephus(L,10,5);
    
    return 0;
}


大部分都重写了 原先的代码好像不是一两处改动就能正确的 主要是两个问题 L的初始化与循环问题
你分为三个函数来完成这个问题 思路很清晰 可就是用歪了 我重写了你的这三个函数
Creat 创建一个n个节点的单向循环链表 返回头结点指针
Lookfor 从当前节点移动到后面的第m个节点 第1个是他本身 不移动
Jose 首先定位到第k个人 然后循环判断是否是只剩一个人 否则 向后移动到第m个 删掉它 再来
就这样的

人生是一场错过 愿你别蹉跎
2013-04-02 22:34
Emily_CYY
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2013-4-1
收藏
得分:0 
回复 9楼 fanpengpeng
太感谢了!!
2013-04-03 09:57
快速回复:约瑟夫环求指导啊。。。。用的是链表,就是不知道哪里有问题编译不出来 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016915 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved