C++如何实现单链表


小编给大家分享一下C++如何实现单链表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!概念:链表是一种物理存储结构上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链 接次序实现的图示:注意:链表结构在逻辑上为连续的,但是物理上(内存中)不一定连续链表节点都是在堆上申请出来的,申请空间按一定策略分配结构种类链表具有多种结构:单向双向,带头不带头,循环非循环实际上最常用的是:无头单向非循环链表,带头双向循环链表注意:这里实现的是无头单向非循环链表对于链表来说,每需要空间就需要进行开辟,这里我们将之封装成一个函数,便于后续调用直接使用(开辟的同时进行赋值)参考代码:注意:1.对于不带头的链表来说,打印数据不需要修改链表首节点地址(故只要传链表指针)2.用循环遍历链表,每打印数据,需要指向下一个节点3.依靠尾节点的址域为NULL来结束循环代码:要尾插数据则需要遍历找到链表的尾节点对于不带头链表,尾插数据也可能是插在链表首元素的地址(当链表为空),需要修改链表指针的内容(故需要传入链表指针的地址)插入数据要开辟节点代码:注意代码中的assert的作用:正确传入链表指针的地址是不会为空的但是对于非正常传入链表指针(不是链表指针的地址)且此时链表指针为空则会发生报错(assert报错会告诉错误位置),告诉程序员应该传入链表指针的地址注意:删除前需要保存当前节点的址域(即保存下个节点的空间地址,以防丢失)前删数据即删除当前链表首节点,即需修改链表指针的内容(故需传入链表指针的地址)删除后修改链表指针内容,指向新的首节点如果链表为空时无法删除(保存下个节点地址会造成非法访问)代码:注意:查找时用循环遍历链表对于查找数据不用修改链表指针的内容,故只需传入链表指针就行了查找到时则返回节点地址,否则返回NULL代码:注意:想要pos位置前插数据,不仅需要找到pos位置,还需要记录pos的前一个节点位置传入的pos为NULL则报错进行修改前节点的址域成新节点,并让新节点的址域修改成pos,这才是一个成功的pos位置前插数据循环遍历链表查找pos位置,没有找到pos位置则什么也不干代码:注意:后插则不用关注是否为首节点也不用找到遍历找到前节点的位置后插则先将新节点址域改成pos后节点地址再将pos的址域改成新节点地址ps:一定要注意修改链接节点址域的先后,避免地址的丢失代码:注意:考虑删除首节点的情况,可能修改链表指针的内容,故需要传入链表指针的地址对于删除节点,需要先保存pos位置下一个节点地址,将pos位置释放,再将pos位置前节点的址域改成pos位置后节点的地址,这才是成功的删除pos位置免费云主机域名节点循环找pos位置,没找到则什么也不干参考代码:注意:对于动态开辟的内存空间,在使用后一定要记得的进行释放(避免造成内存泄漏)因为链表节点是一个个开辟的,同样的释放也需要一个个进行释放循环遍历释放当前节点前需保存后一个节点的地址,避免地址丢失无法释放释放完后,还需将链表指针给置空(避免使用野指针)参考代码:优点按需申请空间(空间使用合理)插入效率高(不用像顺序表样挪动数据)缺点不支持随机访问(无法用下标直接访问)优点支持随机访问 (有些算法需要结构支持随机访问:二分查找,快排等)缺点扩容空间有消耗(空间碎片化以及空间浪费)插入数据需要挪动数据有消耗以上是“C++如何实现单链表”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注百云主机行业资讯频道!

相关推荐: php将json字符串转为数组的方法是什么

这篇文章主要介绍了php将json字符串转为数组的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php将json字符串转为数组的方法是什么文章都会有所收获,下面我们一起来看看吧。 一、什么是JSONJSON全称是Java…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/28 10:53
下一篇 07/28 10:54

相关推荐