链表概述
链表是一种常见的重要的数据结构,它是动态的进行存储分配的一种结构。先说一个场景的应用,假设有若干位同学的信息需要保存,每位同学包含编号、年龄、分数。虽然对每位同学来讲可以用结构体类型的数据表示,但是对于多为同学而言能否用结构体数组表示呢?如果同学的具体数量不知道定义大了,浪费空间,定义小了则不够用,因此排除掉结构体数组。此时我们的链表就派上用场了。
head表示链头指针,指向链表的第一个元素,存放第一个元素的地址(1010),链表中每个节点都包括两个部分:一为用户所需要的实际数据(如第一个节点中的01,zhang,80),二为下一节点的地址(如:1210),链表最后一个元素不在指向其他元素,称为“链尾”,它的地址部分存放的是NULL(表示空地址)。
链表中各元素在内存中不一定是连续存放的,要寻找链表中某一元素,必须先找到上一个元素,根据它提供的下一元素的地址才能找到下一个元素。如无head,则整个链表无法访问。
2 , 动态链表
2.1,建立动态链表
尾插法建立单链表的C语言源程序如下:
#include "stdafx.h"
#include "stdlib.h"
#define LEN sizeof(struct student)
struct student {
long int num;
char name[10];
float score;
struct student *next;
};
/**尾插法建立单链表*/
struct student *creatail() {
struct student *head, *p1, *p2;
p1 = (struct student *)malloc(LEN);//开辟第一个节点
scanf("%ld%s%f",&p1->num,p1->name,&p1->score);//输入第一个结点的值
head = NULL;
while (p1->num != 0)//学号不为零,执行循环操作
{
if (head == NULL) head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct student *)malloc(LEN);
scanf(&#