链表:一种常见的数据结构,在链表中每一个元素包括数据部分和指针部分。数据部分用来存放有效元素所包含的数据,而指针部分用来指向下一个元素。
创建一个节点:
struct Student
{
char Name[10]; //数据部分
int Number; //数据部分
struct Student* PNext; //指向下一个节点的指针
}
注意:当有新的节点要添加到链表中时,原来最后一个节点的指针将保存新添加的节点地址,而新的节点的指针将指向空(NULL),当添加完成后,新节点将成为链表的最后一个节点。(实际上是尾插法创建链表)
例:动态创建一个链表
步骤分析:
1、初始化一个头节点,即定义一个头指针令其为空。
struct Student* PHead=Null;
2、为了插入第一个节点,先定义两个指向结构体的指针变量PEnd、PNew。
struct Student *PEnd,*PNew; //指针PNew总是指向要创建新的节点的数据域
3、为第一个节点赋予数据
Scanf("%s",&PNew->Name); //给第一个节点数据域赋值
Scanf("%d",&PNew->Number);
4、插入第一个节点
PNew->PNext=PHead; //将新插入的节点的指针域置空
PEnd=PNew; //让PEnd指针也指向新插入节点的数据域
PHead=PNew; //使头指针指向新插入的节点(将新节点的地址赋给头指针)
5、在该节点后再插入新的节点
首先先给数据域赋值
Scanf("%s",&PNew->Name);
Scanf("%d",&PNew->Number);
接下来将该节点与上一个节点链接起来
PNew->PNext=NUll; //将新插入的节点的指针域置空
PEnd->PNext=PNew;
PEnd=PNew; //PEnd再次指向新节点
还要继续插入的话在重复执行上一步骤就好了,可以看出这样就不用担心链表的长度超出范围了。