本篇文章给大家谈谈c语言单向动态链表,以及c语言动态链表的创建对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、关于c语言链表 创建动态单向链表时为什么需要结构体指针p1和p2 一个头指针不就够了吗,对于链2、C语言单向动态链表3、C语言中的动态单项链表的问题
关于c语言链表 创建动态单向链表时为什么需要结构体指针p1和p2 一个头指针不就够了吗,对于链
首先,头指针不能丢,需要保存的,而p1是从头指针得到首节点后,查看当前指向节点的next是否为空判断是否尾节点,如果不是尾节点,或者说当前节点的next不为NULL则p1将被赋值成这个next以便找到链表下一个节点,而p1一开始存储的头指针就会被冲掉,所以在进行操作后p1就不能被当成链首指针来用了。
其次,新的节点生成,会通过new或malloc来申请空间,其返回值是个指针,这时一般要用指针变量p2来接收这个指针,然后将链表尾节点的next赋值成这个p2的内容,p2指向的next再赋值成NULL成为尾节点。
最后,如果需要在链表中插入,就需要一个指针p1指向当前节点,另一个p2指向当前节点之后的节点,然后将p1的next赋值成新节点指针,新节点指针的next赋值成p2,完成插入。
总体来说,所谓p1和p2是临时辅助性的变量,是为方便使用的中间变量,这个从方便出发申请的工作变量也无需节省。
C语言单向动态链表
printf(“输入成绩:\n”);
scanf(“%d”,p1-score);
getchar();
这里getchar() 把回车字符给读取掉,不然回车被下一次的姓名读取了。
C语言中的动态单项链表的问题
#include iostream.h
#include stdio.h
#include string.h
#include stdlib.h
#define LEN sizeof(struct AddressList)
struct AddressList
{
char name[20];
char telephone[12];
char e_mail[30];
struct AddressList *next;
};
struct AddressList * create(void);
void print(struct AddressList *p);
struct AddressList *release(struct AddressList *head);
void main()
{
struct AddressList *h;
h=create();
cin.get();
}
struct AddressList *create()
{
struct AddressList *head;
struct AddressList *p;
struct AddressList *tail;
char name[20];
head=NULL;
tail=NULL;
printf(“请输入节点数据:\n”);
printf(” 姓名:”);
gets (name);
while (strcmp(name,””) !=0)
{
p=(struct AddressList *)malloc(LEN);
if(p==NULL)
{
printf(“内存不足!\n”);
exit(1);
}
else
{
strcpy(p-name,name);
printf(” 电话:”);
gets(p-telephone);
printf(“Email 地址:”);
gets(p-e_mail);
cout”内存地址为:”pendl;
if (head==NULL)
head = p;
else
tail-next = p;
tail = p;
printf(“\n请输入下一个节点数据:\n”);
printf(” 姓名:”);
gets(name);
}
}
if (head != NULL)
tail-next = NULL;
printf(“建立链表过程结束\n”);
cin.get();
int a;
for (a=1;a5;a++)
{
coutendl;
}
print(head);
for (a=1;a5;a++)
{
coutendl;
}
head=release(head);
for (a=1;a5;a++)
{
coutendl;
}
return head;
}
#undef LEN
void print(struct AddressList *p)
{
int i=1;
printf(“\n现在输出链表数据:\n”);
if(p==NULL)
{
int c;
for(c=1;c3;c++)
{
coutendl;
}
printf(“链表中没有数据!”);
}
while(p!=NULL)
{
printf(“第%d个节点的数据:\n”,i);
printf(” 姓名:%s\n 电话:%s\nEmail 地址: %s\n”,p-name,p-telephone,p-e_mail);
p=p-next;
i++;
cout”内存地址为:”pendl;
}
}
struct AddressList *release(struct AddressList *head)
{
struct AddressList *p=head;
while(p)
{
head=p-next;
free(p);
p=head;
}
return head;
}
c语言单向动态链表的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言动态链表的创建、c语言单向动态链表的信息别忘了在本站进行查找喔。