| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1142 人关注过本帖
标题:约瑟夫实验,出问题了,大家看看
取消只看楼主 加入收藏
zflsky
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2008-3-25
收藏
 问题点数:0 回复次数:2 
约瑟夫实验,出问题了,大家看看
哪位大侠帮我看看啊,老师说不能用全局的,没办法,但是我有不知道错在哪里!不知道,为什么会出现这样的情况,而且程序不能执行!

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

//---------------------构造单链表存储结构---------
struct Lnode
{
    int number;
    int key;
    struct Lnode *next;
};

//--------------------------------------------------
//------------建立一个不带头结点的循环单链表---------------
void Create_list(struct Lnode* l,int n)   
{
    int i;
    struct Lnode *q,*p,*head;
    for(i=1;i<=n;i++)
    {
        if(i==1)
        {
            head=p=(struct Lnode*)malloc(sizeof(struct Lnode));
        }
        else
        {
            q=(struct Lnode*)malloc(sizeof(struct Lnode));//生成新的结点
            p->next=q;
            p=q;              
        }
        scanf("%d",&(p->key));          //依次输入结点的密码,即,结点里的内容
        p->number=i;      
        p->next=head;   //使链表尾指向链表头, 构成循环链表
    }
    p=head;
}

//------------------------------------------------------------------

//--------------------删除第m的结点,输出其的位置,并把它的key作为新的m,一直到把整个单链表走完为止----------------
void Listdelete_L(struct Lnode* l,int n,int m)  
{
    int i,j;
    struct Lnode* q;
    struct Lnode* p;

    for (j=1;j<n;j++)  
    {
        for(i=1;i<m;i++)
            p=p->next;                 //指针右移
        m=p->key;                     //把key赋予m
        printf("%d->",p->number);    //输出所要求结点的位置号  (输出前n-1个)
        p->number=p->next->number;   //删除了刚才输出的那个结点
        p->key=p->next->key;         //把下一个密码传给结点
        q=p->next;
        p->next=p->next->next;        //把指针后移
        free(q);                      //释放
    }
    printf("%d\n",p->number);           //输出最后一个题目要求的结点,即最后一个
}
//-------------主函数-----------------------------
void main()
{
    struct Lnode* l;

    int n,m;
    printf("please enter the number of people n:");
    scanf("%d",&n);
    Create_list(l,n);              //调用函数,定义了一个有5个结点的单链表
    printf("please enter the number m:");
    scanf("%d",&m);        //    输入原始密码,即自己原先的key
    Listdelete_L(l,n,m);   //    删除第m的结点,输出其的位置,并把它的key作为新的m,一直到把整个单链表走完为止
}
//---------------------------------------------------------

为什么会出现下面的情况??

-------------Configuration: yuesefu - Win32 Debug--------------------
Compiling...
yuesefu.cpp
c:\documents and settings\administrator\桌面\yuesefu.cpp(68) : warning C4700: local variable 'l' used without having been initialized

yuesefu.obj - 0 error(s), 1 warning(s)



而且而且程序不能执行!
搜索更多相关主题的帖子: 约瑟夫 实验 int Lnode struct 
2008-04-07 15:48
zflsky
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2008-3-25
收藏
得分:0 
[bo]以下是引用 [un]succubus[/un] 在 2008-4-7 18:56 的发言:[/bo]

l没有初始化就使用了
ps:Create_list(l,n)和Listdelete_L(l,n,m)中的变量l好像没见你用啊。。。



那要怎么用呢? 我是初学者,这个东西不太懂啊
2008-04-08 16:18
zflsky
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2008-3-25
收藏
得分:0 
哦,明白得差不多了!谢谢楼上了哈

[[it] 本帖最后由 zflsky 于 2008-4-9 19:25 编辑 [/it]]
2008-04-09 17:30
快速回复:约瑟夫实验,出问题了,大家看看
数据加载中...
 
   



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

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