约瑟夫实验,出问题了,大家看看
哪位大侠帮我看看啊,老师说不能用全局的,没办法,但是我有不知道错在哪里!不知道,为什么会出现这样的情况,而且程序不能执行!#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)
而且而且程序不能执行!