C语言循环链表,求指点!
昨天一个同学发来以下这段代码让我帮她改一下错,结果我拷过来一看发现自己也不会。运行的时候总会出现下图这种错误:
以下是代码,哪位大神有时间的话麻烦帮我看看好吗,谢谢了!
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef struct preson
{
int number;
int data;
preson *next;
}PRE;
void main()
{
int n,m,i,a[MAXSIZE];
PRE *p,*q,*head;
scanf("%d%d",&m,&n);
for(i=0;i<n;i++)
a[i]=i+1;
p=(PRE *)malloc(sizeof(PRE));
p->data=1;
head=p=q;
p->next=NULL;
while(n)
{
p=q;
q=(PRE *)malloc(sizeof(PRE));
q->data=a[i];
q->number=i+1;
p->next=q;
i++;
n--;
}
q->next=head;
p=head;
while(n!=0)
{
while(m!=1)
{
if(p->data==0)p=p->next;
else
{
p=p->next;
m--;
}
printf("%4d%d\t",p->number,p->data);
}
m=p->data;
p->data=0;
n--;
}
} 循环链表 C
[解决办法]
不知道你的需求是什么,以下的程序是修改以后的,可以运行起来。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define MAXSIZE 100
typedef struct preson{
int number;
int data;
struct preson *next;
} PRE;
int main()
{
int n, m, i, a[MAXSIZE];
PRE *p, *q, *head;
scanf("%d%d", &m, &n);
for(i=0; i<n; i++)
a[i] = i + 1;
p = (PRE *)malloc(sizeof(PRE));
assert(p);
p->data = 0;
p->number = 0;
head = q = p;
p->next=NULL;
i = 0;
while(i < n)
{
p = q;
q=(PRE *)malloc(sizeof(PRE));
assert(q);
q->data=a[i];
q->number=i+1;
p->next=q;
i++;
}
q->next=head;
p=head;
while(n!=0)
{
while(m!=1)
{
p=p->next;
if(p->data !=0)
{
m--;
}
printf("%4d%d\t",p->number,p->data);
}
m=p->data;
p->data=0;
n--;
}
return 0;
}
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef struct preson
{
int number;
int data;
preson *next;
}PRE;
void main()
{
int n,m,i,a[MAXSIZE];
PRE *p,*q,*head; // 定义指针时候同时初始化给NULL
scanf("%d%d",&m,&n);
for(i = 0; i < n; i++)
a[i] = i+1;
p=(PRE *)malloc(sizeof(PRE));
p->data=1;
//head = p = q; // p已经分配内存了, 又把它指向q, q的没有初始化,野指针而已,
// 不明白你是想干什么?
head = q = p; // 这才是正确的
p->next=NULL;
while(n)
{
p = q;
q=(PRE *)malloc(sizeof(PRE));
q->data=a[i];
q->number=i+1;
p->next=q;
i++;
n--;
}
q->next=head;
p=head;
// 我表示也不晓得 楼主想干什么? 楼主最好把需求也贴出来吧
while(n!=0)
{
while(m!=1)
{
if(p->data == 0)
p=p->next;
else
{
p = p->next;
m--;
}
printf("%4d%d\t",p->number,p->data);
}
m = p->data;
p->data = 0;
n--;
}
}
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef struct preson
{
int number;
int data;
preson *next;
}PRE;
void main()
{
int n,m,i,a[MAXSIZE];
PRE *p,*q,*head;
scanf("%d%d",&m,&n);
for(i=0;i<n;i++)
a[i]=i+1;
p=(PRE *)malloc(sizeof(PRE));
p->data=1;
p->number = 1;//number也要赋值。。
head= q = p;//这个顺序乱了。。
p->next=NULL;
i = 1;//
while(i < n)//这里不要用n--。。否则改动了n的值影响下边的循环。。
{
p=q;
q=(PRE *)malloc(sizeof(PRE));
q->data=a[i];
q->number=i+1;
p->next=q;
i++;
}
q->next=head;
p=head;
while(n!=0)
{
while(1)
{
if(p->data==0) p=p->next;
else
{
if(m == 1){
printf("%4d %d\n",p->number,p->data);
m = p->data;
p->data = 0;
p = p->next;
--n;
break;
}
p=p->next;
m--;
}
}
}
}