什么是单链表?
答:和顺序表一样,从逻辑结构上来看都是线性表。不同的是顺序表采用的是顺序存储的方式,而单链表采用的是链式存储。即:单链表是用“链式存储”(存储结构)的方式实现了“线性结构”(逻辑结构)。
单链表和顺序表各自的优缺点
顺序表:
- 优点:可以随机存取,存储密度高。
- 缺点:要求大片的连续空间,且改变容量不方便。
单链表:
- 优点:不要求大片的连续空间,改变容量方便。
- 缺点:不可随机存取(意思是如果我们要找到某一个结点的话,必须从第一个结点依次往下遍历,直到找到我们想要的那个结点),且要耗费一定的空间去存放指针,因此存储密度不太高。
定义一个单链表
Q:如何去增加一个新的结点?
A:struct LNode * p = (struct LNode *)malloc(sizeof(struct LNode));
注:以上写法有些长,我们可以使用 “typedef” 关键字去改写一下:
A:typedef struct LNode LNode // 即用 LNode 去代替 struct LNode,使得写法更简便。
所以,经过改写之后的代码应该是:
LNode * p= (LNode *)malloc(sizeof(LNode));
以上我们只是定义了一个单链表,并未对其初始化,那么下面我们将学习如何初始化一个单链表
初始化单链表(不带头结点)
如何对其进行判断其是否为空表:(不带头结点)
初始化单链表(带头结点)
同理,如何判断空表?(带头结点)
“带” 与 “不带” 的对比:
不带:空表判断:L == NULL,写代码不方便。
带:空表判断:L ->next== NULL ,更方便一些。(常用)