目录1链表的概念及结构2链表的分类3链表的实现无头 单向 非循环链表增删查改实现3.1链表的定义3.2链表数据的打印3.3链表的尾插3.4链表空间的动态申请3.5链表
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
尾插其实也是类似的,尾插的话像上面的代码中,当tail!=NULL不成立之后,tail等于空,然后执行赋值操作,tail->next=newnode这行代码相当于下面的代码:
(*tail).next,此处相当于是对空指针进行解引用,其实就是非法访问了,并还试图非法修改未授权内存中的数据,这将必然会引发程序的崩溃。而且也并没有将新节点的地址存储到之前为节点的next中。
链表是一个相对静态的存储在堆区中的数据空间,我们通过改变栈区中的局部变量tail中的数据(即每一个链表节点的地址)来进行遍历,之所以能够通过tail变量能够进行访问并且修改节点数据的原因就是因为tail的数据类型是SListNode*,即指向节点的指针,指针的类型决定了对指针解引用能够访问的数据类型,所以*tail能够访问堆区中的节点的数据并且能够进行修改。
总结:单链表结构,适合头插头删。尾部或者中间某个位置插入删除都不适合。如果要使用链表结构单独存储数据,更适合用双向链表。
到此这篇关于C语言超详细模拟实现单链表建议收藏的文章就介绍到这了,更多相关C语言单链表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!