主题:有关循环表的问题
[size=5]程序运行后为什么在屏幕下显示 NULL Pointer Assignmen[/size]
//=============================================
#include<stdio.h>
#include<malloc.h>
typedef struct node //猴子结构定义
{ int num; //序号
struct node *next;
} node,*linklist;
//=============================================
void Initlist(linklist L) //初始化链表
{ L=(linklist)malloc(sizeof(node));
//建立头结点
L->next=NULL;
}
void creat(linklist L,int n) //尾插法建循环表
{ node *r,*p;
r=L;
int i;
for(i=0;i<n;i++)
{ p=(node*)malloc(sizeof(node));
printf("enter you number of the monkey\n");
scanf("%d",&p->num);
r->next=p;
r=p;
}
r->next=L->next;
}
int king_search(linklist L,int m) //从第m个猴子开始报数,找猴王
{
node *q,*p=L;
int j;
for(j=0;j<m;j++) //找第m个猴子的结点地址p
p=p->next;
while(!(p->next==p)) //找到最后一个元素
{
p=p->next;
q=p->next; //记录下将要被删除结点的地址
p->next=q->next; //删除第三个结点
L->next=p->next; //避免L没有指向
free(q); //释放内存
p=p->next; //将p永远指向被删除结点的后一个结点
}
return(p->num);
}
void main()
{
int king_num; //猴王的序号
void Initlist(linklist L); //声明
void creat(linklist L,int n);
int king_search(linklist L,int m);
linklist head=NULL; //定义一个头结点
Initlist(head); //初始化
int n; //猴子的个数
printf("enter the whole number of the monkey\n");
scanf("%d",&n);
creat(head,n); //建表
int m;
printf("enter the number of first monkey\n");
scanf("%d",&m);
king_num=king_search(head,m);
printf("the number of monkey_king %d\n",king_num);
}
//=============================================
#include<stdio.h>
#include<malloc.h>
typedef struct node //猴子结构定义
{ int num; //序号
struct node *next;
} node,*linklist;
//=============================================
void Initlist(linklist L) //初始化链表
{ L=(linklist)malloc(sizeof(node));
//建立头结点
L->next=NULL;
}
void creat(linklist L,int n) //尾插法建循环表
{ node *r,*p;
r=L;
int i;
for(i=0;i<n;i++)
{ p=(node*)malloc(sizeof(node));
printf("enter you number of the monkey\n");
scanf("%d",&p->num);
r->next=p;
r=p;
}
r->next=L->next;
}
int king_search(linklist L,int m) //从第m个猴子开始报数,找猴王
{
node *q,*p=L;
int j;
for(j=0;j<m;j++) //找第m个猴子的结点地址p
p=p->next;
while(!(p->next==p)) //找到最后一个元素
{
p=p->next;
q=p->next; //记录下将要被删除结点的地址
p->next=q->next; //删除第三个结点
L->next=p->next; //避免L没有指向
free(q); //释放内存
p=p->next; //将p永远指向被删除结点的后一个结点
}
return(p->num);
}
void main()
{
int king_num; //猴王的序号
void Initlist(linklist L); //声明
void creat(linklist L,int n);
int king_search(linklist L,int m);
linklist head=NULL; //定义一个头结点
Initlist(head); //初始化
int n; //猴子的个数
printf("enter the whole number of the monkey\n");
scanf("%d",&n);
creat(head,n); //建表
int m;
printf("enter the number of first monkey\n");
scanf("%d",&m);
king_num=king_search(head,m);
printf("the number of monkey_king %d\n",king_num);
}