单链表的学习总结

时间:2024-05-23 14:33:35

前面学习了单链表的一些基本操作,这篇文章对在学习单链表的过程中遇到的一些问题做一些总结。

初学单链表,很多东西都很难理解,因为之前的C语言基础的指针这块不是很熟悉,对于指针的操作很模糊,在一边百度一边看视频学习的过程中,渐渐加深了对指针的理解,以及对程序的模块化编程的学习。

分不清楚头结点和头指针

我学习的是没有头结点的,即只有一个头指针,在写代码的时候我总是会把头指针误认为一个头结点,然后定义另一个指针来存储这个头指针,其实有时候是没有必要的,虽然不影响操作。头指针是指向第一个节点的指针,而头结点是一个只有next指针而没有数据的节点,因此两者其实差不多,只是头指针可以任意移动,而头结点需要定义一个指针来指向我们的头结点,存储当前位置。

在进行链表的删除节点的操作时,遇到的问题就是我的头指针必须指向第一个节点,因此我必须定义两个指针来指向头指针,即二重指针,这样才能方便我存储要删除的节点的位置

单链表的学习总结

野指针问题

在操作链表的时候忘了给链表初始化以及忘记判断下一个节点是否为空而导致段错误的存在,野指针指向一个已删除的对象或为申请访问受限内存区域的指针,我们操作野指针会导致野指针随便指向一块内存,因此,我们定义指针时一定要初始化为空并且在释放指针以后将其置空。

在对链表进行冒泡排序的时候,因为在遍历链表的时候没有判断下一个节点是否为空而导致出现段错误:

单链表的学习总结

内存泄露

内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。

内存溢出指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存,一般我们在玩游戏时,电脑内存或者手机内存不够用了,则会发现游戏会自动强制退出,等待一部分内存释放之后我们又可以进入游戏。

因为gcc的调试工具gdb没有用熟悉,因此有时候用VC来调试代码,而当我们遇上内存泄露问题时,VC编译器会让你打印出正确的结果,但是会弹出这样一个窗口:

单链表的学习总结

内存泄漏的长期存在会导致系统奔溃!

这是在连接两个链表并排序的代码:

单链表的学习总结

在连接两个链表的时候,将第一个链表的尾指针指向下一个链表的头指针的时候,第二个链表的头指针必须要置空,因为它不再是新链表的头指针了。

在平时编写代码的时候,我们应该要注意编程的规范,才回保证我们的系统稳定运行。一本《高质量C/C++编程指南》介绍给大家。