69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<malloc.h>
#define N 10
struct node
{
char name[20]; //数据域
struct node *link;//指针域
};
struct node *creat(int n)//该函数的返回值是一个指向node类型结构体的指针变量
{
struct node *p,*h,*s;//*h保存表头节点的指针
//*p指向当前节点的前一个节点
//*s指向当前节点
int i;
if((h=(struct node *)malloc(sizeof(struct node)))==NULL)
{ //分配空间并检测
printf("不能分配内存空间");
exit(0);
}
else
{
h->name[0]='\0';//把表头指针的数据域置空
h->link=NULL; //把表头节点的链域也置空
p=h; //这个说明了什么???????????????????????
for(i=0;i<n;i++)
{
if((s=((struct node *)malloc(sizeof(struct node))))==NULL)
{
printf("不能分配内存空间");
exit(0);
}
else
{
p->link=s;//把s的地址赋给了p的链域,这样p就指向了s
printf("请输入第%d个人的姓名\n",i);
scanf("%s",s->name);
s->link=NULL;
p=s;//同理????????????????????????????
}
}
}
return (h);
}
void main()
{
int number;
struct node *head;
number=N;
head=creat(number);
}
p=h; //这个说明了什么???????????????????????
p=s; //同理????????????????????????????
#include<stdio.h>
#include<malloc.h>
#define N 10
struct node
{
char name[20]; //数据域
struct node *link;//指针域
};
//此函数创建了一个链表(包含一个头节点和其他n个带数据的节点)
struct node *creat(int n)//该函数的返回值是一个指向node类型结构体的指针变量
{
struct node *p,*h,*s;//*h保存表头节点的指针
//*p指向当前节点的前一个节点
//*s指向当前节点
int i;
if((h=(struct node *)malloc(sizeof(struct node)))==NULL)
{ //分配空间并检测
printf("不能分配内存空间");
exit(0);
}
else
{
h->name[0]='\0';//把表头指针的数据域置空
h->link=NULL; //把表头节点的链域也置空
p=h; //p指向头节点
for(i=0;i<n;i++)
{
if((s=((struct node *)malloc(sizeof(struct node))))==NULL)
{
printf("不能分配内存空间");
exit(0);
}
else
{
p->link=s;//把s的地址赋给了p的链域,这样p的下一个节点就是s。
printf("请输入第%d个人的姓名\n",i);
scanf("%s",s->name);
s->link=NULL;
p=s;//p指向s节点,为连接下一个节点做准备
}
}
}
return (h);
}
void main()
{
int number;
struct node *head;
number=N;
head=creat(number);
}
struct node *p, //*p指向当前节点的前一个节点
*h, //*h保存表头节点的指针
*s; //*s指向当前节点
我印象中我使用链表的时候 一般都是 头节点,当前节点,尾节点。至于你这里面提到的“当前节点的前一个节点”是做什么用的感觉不对吧,还是说你的注释错了。。
h->name[0]='\0';//把表头指针的数据域置空
h->link=NULL; //把表头节点的链域也置空
p=h; //这个说明了什么???????????????????????
这个地方如果把你的p理解成当前节点的话 应该就能理解了吧,但是前一个节点,这肯定不对啊。。
p->link=s;//把s的地址赋给了p的链域,这样p就指向了s
printf("请输入第%d个人的姓名\n",i);
scanf("%s",s->name);
s->link=NULL;
p=s;//同理????????????????????????????
这个如果按照我上面说的理解应该是没没问题,如果是当前节点的前一个节点就有问题了。。
读你的代码感觉你声明的“p”应该是代码当前节点的意思。
个人理解,不对请纠正。谢谢