**
1.1线性表的建立
**
刚开始学习的时候也找了很多相关资料,但发现看的时候好像是懂了,但实际写的时候总感觉很纠结。不多说,先来看看线性表的解释吧.
1. 线性表的实现首先需要结构体
不了解结构体的查看此处链接
这里例如此结构体
typedef struct student{
int num;//学生编号
char name[20];//学生姓名
int age;//学生年龄
char sex;//f:女性 m:男性
struct student *next;
}stu,*stu1;
stu1 Head=NULL;
stu1 p1,p2;
它定义了两个变量,p1,p2,这两个变量在经过空间开辟后就是如同图1-1的那样,一部分位存储数据所用,即1-2图中的学生编号,姓名等,还有一部分就是存放指针的区域,即指针域;
2.怎样创建变量并连接它们呢?
先上段代码
if(Head==NULL)
{
p1=(stu1)mallco(sizeof(stu));
p2=(stu1)malloc(sizeof(stu));
Head=p1;
p2=p1;
}
else
{
p1=(stu1)mallco(sizeof(stu));
p1=p2->next;
p2=p1;
}
-
p1=(stu1)malloc(sizeof(stu));此句是在为变量p1开辟空间,因为指针型变量默认开辟4个空间,如果没有此句,则你的变量里是没有如同你的结构体定义的那样的空间分配的;
-
p1开辟空间后你就可以为其中输入数据,一个数据已经创建完毕,如果想再创建数据怎么办呢,此时只有p1,p2两个变量,为什么却能创建许多数据呢?
-
讲清楚这个问题先要明确几点
1.——p1的地址和p1->next的地址是不同的,
2.——每执行一次(stu1)malloc(sizeof(stu)),就会分配一个新的地址,不是不变的;
在2中你创建好了一个数据后,假如再执行一次p1=(stu1)malloc(sizeof(stu))语句,此时p1重新拥有了一个新的地址,新的空间,我们称它为数据2号,那原来的数据就遗失了,所以我们要在创建新的 p1 前,要记录它,怎么记录呢? -
此时我们在第2步创建完p1后,紧接着创建p2,即
p1=(stu1)mallco(sizeof(stu)); p2=(stu1)malloc(sizeof(stu));
然后使p2指向p1,即
p2=p1;
然后再向p1中输入数据,接着再进行第3步,创建新的p1,然后此时我们会发现,即使你的p1变了,但由于你的p2指向p1,所以依旧可以通过p2找到你已经创建好的p1的数据 -
链表,顾名思义,你要把你创建的数据链起来,才是链表,怎么把数据链起来呢?即有如下操作
p2->next=p1;
使p2的下一个节点指向p1的地址,这样你通过第1个数据的next就可以找到你新创建的节点2号了,此时你在2号节点中输入数据,再次记录2号的数剧即有
p2=p1;
-
经过这样一步步你就可以创建许多数据了,当你创建完所有数据后,你会发现此时你的p1,p2都在距离1号数据很远的地方,当我们想查看第一个数据或者寻找其他数据就会变得比较麻烦,此时怎么解决呢?
-
在这里我们就可以了解到Head的作用了,首先定义Head变量,并使其为NULL;
stu1 Head=NULL;
然后使Head指向p1即Head=p1;
这样即使你的p1,p2离1号有千里远,通过Head你还是可以轻松地找到1号数据了。
以上就是链表建立的过程,新手路过,欢迎大家指出错误。