25计算机考研,数据结构知识点整理(内容借鉴了王道408+数据结构教材),还会不断完善所整理的内容,后续的内容也会不断更新(可以关注),若有错误和不足欢迎各位朋友指出!
一.单链表的初始化
步骤:
(1)生成新结点作为头结点,用头指针L指向头结点
(2)将头结点的指针域置空,(空表)->即构造一个空表
带头结点和不带头结点的单链表的初始化操作是不同的。带头结点的单链表初始化时,需要创建一个头结点,并让头指针指向头结点,头结点的next域初始化为NULL。
InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node)); //建立头结点
(*L)->next=NULL; //建立空的单链表L即头结点后暂未有其他元素结点
}
不带头结点的单链表初始化时,只需将头指针初始化为NULL。
InitList(LinkList *L)
{
L=NULL; //不带头结点的单链表的初始化
}
L是指向单链表的头结点的指针,用来接收主程序中待初始化单链表的头指针变量的地址。*L相当于主程序中待初始化单链表的头指针变量。
注意:
设p为指向链表结点的结构体指针,则*p表示结点本身,因此可用 p->data或(*p).data访问*p这个结点的数据域,二者完全等价。成员运算符(.)左边是一个普通的结构体变量,而指向运算符(->)左边是一个结构体指针。通过(*p).next 可以得到指向下一个结点的指针,因此(*(*p).next).data就是下一个结点中存放的数据,或者直接用 p->next->data。