文章中,作者介绍了线性表中的顺序表。在本篇文章中,作者将会介绍数据结构线性表中的线性链表。
在经过文章的学习后,我们了解了顺序表就是用顺序存储的方式实现线性表。
它有存储密度高,可以随机存储等优点。但是由于其在申请内存空间时是按整块申请的,且所有元素紧密按顺序排列,所以在扩展其容量或进行插入删除操作时很不方便。
而在本篇文章中所介绍的线性链表则较好解决了顺序表的不足,但同时也失去了一些线性表的优势,接下来作者将具体进行介绍。
线性链表是一种具有链式存储结构的线性表,它使用任意的存储单元存放表中的数据。因此,在线性链表中,逻辑上相邻的元素在物理上不一定相邻。
其优点是,由于可以申请部分空间而无需大片连续空间,可以方地第改变存储容量。而由于它将每一个元素使用指针链接起来,在进行插入与删除操作时就无需遍历整个链表,只需要将所要插入位置的“链子”断开重新连接到需要插入的元素即可。
但是有利就有弊,线性链表的缺点也显而易见。由于申请空间不一定连续,线性链表不可随机存取。同时,充当“锁链”的指针也需要占用内存空间,从而使得所需内存空间增大。
了解了线性链表的基本概念后,让我们来看看怎么使用c++代码来实现简单的线性链表。
线性链表的代码实现主要分为不带头节点的线性链表与带头节点的线性链表。
顾名思义,带头节点的线性链表就是比不带头节点的线性链表多了一个头节点。
可能大家会想,这样不是多此一举吗?其实,如果不研究代码,只看表面的话的确如此。但是当我们写代码时就会发现,因为添加的头节点,所有的节点将可以使用相同的代码逻辑,其实现将会方便很多。
本篇文章到此就结束了,在文章中作者将会展示示例代码,让大家更好的理解二者的区别。欢迎大家在下方留言,交流,讨论。
下附单链表初始化的c++代码:
不带头节点:
#includestdio.h
#includestdlib.h
typedefstructLNode{
intdata;
structLNode*next;
}LNode,*LinkList;
boolInitList(LinkListl){
l=NULL;
returntrue;
}
带头节点的单链表:
typedefstructNode{
intdata;
structNode*next;
}Node,*LinkList;
intListInit_L(LinkListL){
L=(LinkList)malloc(sizeof(Node));
if(!L)
exit(OVERFLOW);
L-next=NULL;
return1;
}