请注释以下c语言程序,多谢
#include<stdio.h>structlist{chardata;structlist*next;};structlist*creat(){structlist*...
#include <stdio.h>
struct list
{char data;
struct list *next;
};
struct list *creat()
{struct list *h,*p,*q;
char ch;
h=(struct list*)malloc(sizeof(struct list));
p=q=h;
ch=getchar();
while(ch!='?')
{p=(struct list *)malloc(sizeof(struct list));
p->data=ch;
q->next=p;
q=p;
ch=getchar();
}
p->next='\0';
return h; 展开
struct list
{char data;
struct list *next;
};
struct list *creat()
{struct list *h,*p,*q;
char ch;
h=(struct list*)malloc(sizeof(struct list));
p=q=h;
ch=getchar();
while(ch!='?')
{p=(struct list *)malloc(sizeof(struct list));
p->data=ch;
q->next=p;
q=p;
ch=getchar();
}
p->next='\0';
return h; 展开
2个回答
展开全部
#include <stdio.h>
struct list//构建链表结构体:数据和指针
{
char data;
struct list *next;
};
struct list *creat()
{
struct list *h,*p,*q; //定义结构体指针
char ch;
h=(struct list*)malloc(sizeof(struct list)); //为h指针申请空间
p=q=h; //初始化p和q指针
ch=getchar(); //接收输入的字符
while(ch!='?') //只有在接收到的字符为 '?' 时才停止接收
{
p=(struct list *)malloc(sizeof(struct list)); //为p指针申请空间
p->data=ch; //p指向的结构体的数据成员赋值为ch
q->next=p; //q指向的结构体的指针成员指向p,即把p链接到该链表尾部
q=p; //q赋值为p,保证q始终是该链表的最后一个节点,p是每次新增的链表节点
ch=getchar(); //继续接收字符
}
p->next='\0'; //清空p指向的结构体指针
return h; //返回h指针,这里h即为整个链表的头节点,有了头结点即可以获得整个链表的数据
}
struct list//构建链表结构体:数据和指针
{
char data;
struct list *next;
};
struct list *creat()
{
struct list *h,*p,*q; //定义结构体指针
char ch;
h=(struct list*)malloc(sizeof(struct list)); //为h指针申请空间
p=q=h; //初始化p和q指针
ch=getchar(); //接收输入的字符
while(ch!='?') //只有在接收到的字符为 '?' 时才停止接收
{
p=(struct list *)malloc(sizeof(struct list)); //为p指针申请空间
p->data=ch; //p指向的结构体的数据成员赋值为ch
q->next=p; //q指向的结构体的指针成员指向p,即把p链接到该链表尾部
q=p; //q赋值为p,保证q始终是该链表的最后一个节点,p是每次新增的链表节点
ch=getchar(); //继续接收字符
}
p->next='\0'; //清空p指向的结构体指针
return h; //返回h指针,这里h即为整个链表的头节点,有了头结点即可以获得整个链表的数据
}
追问
指针变量的指向变化,不影响前面的结构体变量吗?就是前面已经存在的那些存储单元。不会因为指针变量引用的单元变化而变化吗?初学,见笑了
是不是和指针指向数组元素的道理一样?
追答
一个链表节点其实是一个结构体,结构体中有一个数据成员和一个指针成员,数据成员保存数据,指针成员保存下一个节点的地址,想要得到链表,就必须用指针成员把每一个结点(结构体)串起来,这里改变指针成员的指向,对前面的结构体无任何影响,因为他们根本就没什么关系,比如链表:a->b->c,另外还一个节点d,我想把它串到链表内,就需要让c的指针成员指向d,即:c->next=d,这一个操作是不会影响a、b、c任何一个节点的,仅仅是改变了c的指针变量的值,c的地址没变,数据变量也没变。
展开全部
#include <stdio.h>
struct list//构建链表结构体:数据和指针
{
char data;//数据成员
struct list *next;//指向下一个节点的指针
};
struct list *creat()//创建链表
{
struct list *h,*p,*q; //定义结构体指针
char ch;
h=(struct list*)malloc(sizeof(struct list)); //为h指针申请空间
p=q=h; //初始化p和q指针
ch=getchar(); //接收输入的字符
while(ch!='?') //只有在接收到的字符为 '?' 时才停止接收
{
p=(struct list *)malloc(sizeof(struct list)); //为p指针申请空间
p->data=ch; //p指向的结构体的数据成员赋值为ch
q->next=p; //q指向的结构体的指针成员指向p,即把p链接到该链表尾部
q=p; //q赋值为p,保证q始终是该链表的最后一个节点,p是每次新增的链表节点
ch=getchar(); //继续接收字符
}
p->next='\0'; //清空p指向的结构体指针
return h; //返回h指针,这里h即为整个链表的头节点,有了头结点即可以获得整个链表的数据
}
struct list//构建链表结构体:数据和指针
{
char data;//数据成员
struct list *next;//指向下一个节点的指针
};
struct list *creat()//创建链表
{
struct list *h,*p,*q; //定义结构体指针
char ch;
h=(struct list*)malloc(sizeof(struct list)); //为h指针申请空间
p=q=h; //初始化p和q指针
ch=getchar(); //接收输入的字符
while(ch!='?') //只有在接收到的字符为 '?' 时才停止接收
{
p=(struct list *)malloc(sizeof(struct list)); //为p指针申请空间
p->data=ch; //p指向的结构体的数据成员赋值为ch
q->next=p; //q指向的结构体的指针成员指向p,即把p链接到该链表尾部
q=p; //q赋值为p,保证q始终是该链表的最后一个节点,p是每次新增的链表节点
ch=getchar(); //继续接收字符
}
p->next='\0'; //清空p指向的结构体指针
return h; //返回h指针,这里h即为整个链表的头节点,有了头结点即可以获得整个链表的数据
}
追问
指针变量的指向变化,不影响前面的结构体变量吗?就是前面已经存在的那些存储单元。不会因为指针变量引用的单元变化而变化吗?初学,见笑了
是不是和指针指向数组元素的道理一样?
追答
不会的。
每个节点都是 一个结构体,结构体中有个next指针, 用于指向下一个节点的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询