| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 567 人关注过本帖
标题:请问这个程序错在哪里?大家帮忙看一下
只看楼主 加入收藏
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
结帖率:83.33%
收藏
已结贴  问题点数:40 回复次数:5 
请问这个程序错在哪里?大家帮忙看一下
看到有人说约瑟夫环,用链表编了一下,编了半天,就是不出来,请高手帮我看一下。可能就是小问题,不过我现在头晕眼花,就是找不出来,大家帮帮忙啊。。谢谢了
程序代码:
#include "stdio.h"
#include "stdlib.h"
struct ring 
{int number;

 struct  ring *next;
};

struct ring *create(int n)     //创建约瑟夫环   
{ struct ring *head,*p,*q;
  int i;
  head=q=NULL;
  for(i=0;i<n;i++)
    { p=(struct ring *)malloc(sizeof(struct ring));
      p->number=i;              //开辟新节点ok
      if(head==NULL) head=p;    
      else q->next=p;
      q=p;
    }
   q->next=head;
   
   return(head);
}

struct ring * delete(struct ring *q)    //删除节点
{ struct ring *p;
   p=q;
  while(p->next!=q)  //因为是循环链表,所以这种方法可以找到上一节点
    p->next=q->next;
    return(p->next);
}

void josephu(struct ring *p,int m,int n)   //环操作
{ int i,j;
  for(i=1;i<m;i++)
  { for(j=0;j<n;j++)
    p=p->next;
    printf("%d",p->number);
    p=delete(p);
    
  }
}

main()                                 //主函数
{ struct ring *h=NULL;int m,n;
  printf("\nInput m and n:");
  scanf("%d%d",&m,&n);  //m为总人数,n为每次数的数
  h=create(m);
  josephu(h,m,n);
}


[[it] 本帖最后由 紫ing~ 于 2009-8-4 23:40 编辑 [/it]]
搜索更多相关主题的帖子: include 约瑟夫 number create 
2009-08-04 23:35
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:40 
是编译错误么??
不要用delete作函数名称

我看拿到程序中好象有不对的地方

[[it] 本帖最后由 godbless 于 2009-8-4 23:48 编辑 [/it]]
2009-08-04 23:47
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
收藏
得分:0 
不是编译错误,程序其实没有进入循环,根本没有实现要求。但是我现在真找不出来为什么。头晕。。。我检查了几个函数应该大致思路对的,可能是哪里循环什么的错了。。。。

唯有天道恒在,往复循环,不曾更改。。。
2009-08-04 23:56
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
我找到你的错误了。。

struct ring * delete(struct ring *q)    //删除节点
{ struct ring *p;
   p=q;
  while(p->next!=q)  //因为是循环链表,所以这种方法可以找到上一节点
    p->next=q->next;  //因为p=q,所以这个本来就相等,改变不了指向,死循环。或者上面掉了一句p=p->next;??
    return(p->next);
}


void josephu(struct ring *p,int m,int n)   //环操作
{ int i,j;
  for(i=1;i<m;i++)
  { for(j=0;j<n;j++)             //这个大括号地方似乎不对,往下一行??不知道你想干什么,或许你是对的
    p=p->next;
    printf("%d",p->number);
    p=delete(p);
   
  }
}

[[it] 本帖最后由 godbless 于 2009-8-5 06:50 编辑 [/it]]
2009-08-05 00:09
jhjx704
Rank: 1
等 级:新手上路
帖 子:13
专家分:1
注 册:2008-1-5
收藏
得分:0 
2009-08-06 14:24
快速回复:请问这个程序错在哪里?大家帮忙看一下
数据加载中...
 
   



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

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