| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1552 人关注过本帖, 1 人收藏
标题:要疯了,帮忙看下!!!
取消只看楼主 加入收藏
晨曦的朝阳
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2008-1-24
收藏(1)
 问题点数:0 回复次数:4 
要疯了,帮忙看下!!!
今天看了一下线性链表,做了一道题目,内容如下:
设有N个人围坐一圈,现从某个人开始报数,数到M的人出列,接着从出列的下一个人开始重新报数,数到M的人又出列,如此下去直到所有人都出列为止.试求出他们的出列次序.(假定N的值从1到N,即从1开始数)程序如下:

#include<stdio.h>
#include<malloc.h>
#define N 5
typedef struct node
{
    int x;
    struct node *next;
}list;
list *create(int n)
{
    list *head,*p,*r;
    int i;
    p=(list *)malloc(sizeof(list));
    head=p;
    p->next=NULL;
    r=p;
    for(i=0;i<n;i++)
       {
        p=(list *)malloc(sizeof(list));
        p->x=i+1;
        r->next=p;
        r=p;
       }
    head=r->next;
    return head;
}
list *del(list *head,int t)
{
    list *p,*r,*s;
    p=head;
    s=p;
    p=p->next;
    while(t!=p->x)
         {
        s=p;
        p=p->next;
         }
    r=p;
    s->next=p->next;
    p=s->next;
    free(r);
    return s;
}
void calcul(list *head,int m)
{
    int i,k=0;
    list *p,*r;
    head=p;
    while(head!=head->next)
         {
        for(i=0;i<m;i++)
           {
            p=p->next;
            if(p!=head)
                k++;
            else
                i--;
            if(k==m)
                {
                    printf("%3d",p->x);
                    k=0;
                    r=del(head,p->x);
                    p=r;
                    break;
                }
           }
        }
}
void main()
{
    list *head;
    int M=2;
    head=create(N);
    calcul(head,M);
}
运行的结果是无限循环,看了大半天也找不出毛病,求各位帮帮忙,小弟在此深表感谢!
搜索更多相关主题的帖子: include create 
2008-03-02 19:56
晨曦的朝阳
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2008-1-24
收藏
得分:0 
我知道网上一些地方有啊,但是我们要学着自己写啊.自己写的东西印象才会比较深刻啊,找了半天也找不出哪里错了,因为可以运行的,汗死啦!!!
2008-03-02 21:16
晨曦的朝阳
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2008-1-24
收藏
得分:0 
等待高人指点一下,我是新手来的!
2008-03-02 22:07
晨曦的朝阳
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2008-1-24
收藏
得分:0 
刚才又花了一个多小时,一个一个地方找错,终于把问题解决了,多谢各位来捧场啊.
上面的程序是我用带头结点的循环线性链表做的,第一次试做的,还好找出出错原因啦,都费了好几个小时啦.
2008-03-02 23:16
晨曦的朝阳
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2008-1-24
收藏
得分:0 
这是修改后的代码:
#include<stdio.h>
#include<malloc.h>

typedef struct node
{
    int x;
    struct node *next;
}list;
list *create(int n)
{
    list *head,*p,*r;
    int i,j=0;
    p=(list *)malloc(sizeof(list));
    head=p;
    head->next=p;
    
    for(i=0;i<n;i++)
       {
            r=(list *)malloc(sizeof(list));
            r->x=(++j);
            p->next=r;
            r->next=head;
            p=r;
       }
    
    return head;
}
list *del(list *head,int t)
{
    list *p,*r,*s;
    p=head;
    s=p;
    p=p->next;
    while(t!=p->x)
         {
        s=p;
        p=p->next;
         }
    r=p;
    s->next=p->next;
    p=s->next;
    free(r);
    return s;
}
void calcul(list *head,int m,int j)
{
    int i,k=0;
    list *p,*r;
    p=head;
    for(i=1;i<j;i++)
        p=p->next;
    while(head!=head->next)
         {
        for(i=0;i<m;i++)
           {
            p=p->next;
            if(p!=head)
                k++;
            else
                i--;
            if(k==m)
                {
                    printf("%3d",p->x);
                    k=0;
                    r=del(head,p->x);
                    p=r;
                    break;
                }
           }
        }
}
void main()
{
    list *head;
    int j,N,M;/*j为从第几个人开始报数,*N为总共人数,M为数到几出列*/
    head=create(N);
    calcul(head,M,j);
}
2008-03-03 14:15
快速回复:要疯了,帮忙看下!!!
数据加载中...
 
   



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

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