请尊重作者的劳动成果,如需转载请注明出处,谢谢!
如果觉得不错,可以关注我或者点赞,这就是你们对我最大的鼓励!
在顺序表中,作插入和删除操作时,需要移动大量元素。而使用链表-----线性表的另一种表示方式,则不需要内存地址相邻。
使用链表时,每次添加新元素时都会向系统申请一小块内存空间,由于系统分配成功时返回的内存地址是随机的,因此链表的特点是使用任意的存储单元存储元素。 它的优点是易于增和删。与此同时,它也失去了顺序表查,改方便的特点。
链表是由结点串起来组成的数据。每个结点都包括了元素的信息以及访问下一个结点的内存地址,即指针。
数据域就是一块用来存储数据的空间,每个结点还必须有指针域,因为需要靠它来与下一个结点联系。指针域存储指向下一个结点数据域的指针。
链表的头称为头结点,头结点的数据域一般不存储任何信息。每个结点总是通过指针域寻找下一个结点。若该结点是最后一个结点,则指针域指向NULL。
那么,使用链表,如何实现增这个操作呢?很简单,示意图如下
只要将结点的指针指向新结点,并将新结点的指针域指向插入位置后的结点即可。
但是有个细节需要考虑,那就是,如果我们先把插入位置前的指针指向新结点,那么我们就不能联系插入位置后结点了。
因此,我们应该先把指向插入位置后结点的内存地址赋值给新结点指针域的指针。再将插入位置前的指针指向新结点。
删除结点也很简单,先将被删除结点的前一个指针指向修改为被删除结点的后一个结点,然后将被删除结点与被删除结点后一个结点的联系去掉。最后将被删除结点释放掉,即将占用的内存还给系统爸爸。
改,和查就需要找到对应的结点即可。
talk is cheap ,show me the code.
代码有点长,但是很多都是做检查部分的。
链表进行增删改查,关键是要找到对应的结点。找到了结点,就容易操作了。
线性表的两种实现方式是数据结构的基础,希望大家能够熟练掌握。