数据结构(2)

内存泄漏:内存泄漏(Memory Leak)是指程序在运行过程中动态分配了内存,但在不再需要这些内存时未能释放,导致这部分内存无法被再次利用。内存泄漏是一个常见的编程错误,尤其在使用手动内存管理的语言(如 C 和 C++)时更为常见。内存泄漏的原因内存泄漏通常由以下原因造成:1. 忘记释放内存:分配了内存后没有通过相应的函数(如 free 或 delete)释放。

  1. 多次分配同一内存:多次分配内存但只释放了一次。

  2. 指针丢失:分配了内存后,指向这块内存的指针丢失了,导致无法释放。

  3. 循环引用:在某些语言中(如 C++),对象之间相互引用导致无法释放.。

  4. 静态存储分配:静态分配的内存没有被显式释放。

内存泄漏的影响内存泄漏会导致以下问题:1. 性能下降:随着内存泄漏的积累,可用内存减少,程序运行速度变慢。2. 系统不稳定:严重的内存泄漏可能导致系统资源耗尽,甚至崩溃。3. 长时间运行问题:对于长时间运行的服务程序,内存泄漏可能导致系统逐渐失去响应能力(valgrind检查内存泄漏)

链表创建,头插,判空:

链表尾插,打印:

链表头删,尾删,关键字查找:

链表节点修改和链表回收:

快慢指针法:快慢指针法(Fast and Slow Pointer Technique),也称为"龟兔赛跑算法",是一种常用的算法技巧,常用于链表相关的问题中。这种方法通过设置两个指针,一个快指针(通常每次移动两步)和一个慢指针(通常每次移动一步),来解决各种链表问题,如检测环、寻找环的入口点、查找中间节点等。

快慢指针法的基本思想1. 快指针:每次移动两步。2. 慢指针:每次移动一步。3. 相遇:如果链表中有环,则快指针最终会追上慢指针。4. 环的入口点:如果快慢指针相遇,则可以找到环的入口点。5. 链表中间节点:如果链表中没有环,则快指针到达链表末尾时,慢指针恰好位于链表的中间位置。

应用场景1. 检测环•问题:判断链表中是否存在环。•解决方案:使用快慢指针,如果快指针追上了慢指针,则存在环。2. 寻找环的入口点•问题:如果链表中存在环,找到环的入口点。•解决方案:当快慢指针第一次相遇时,将其中一个指针重置到头节点,然后两个指针每次各移动一步,再次相遇时的节点即为环的入口点。3. 查找中间节点•问题:找到链表的中间节点。•解决方案:使用快慢指针,当快指针到达链表末尾时,慢指针正好位于中间位置。

(1)寻找中间节点:

(2) 寻找倒数第k个节点

链表逆序:

链表插入排序:

在其他结构体中声明结构体类型指针原因:指针大小固定,自动会开出指针类型大小空间,不能是变量,因为大小不固定,结构体可以直接赋值

在 C 语言或 C++ 中,一个结构体(struct)可以声明为包含自身作为成员,这被称为递归结构体或自引用结构体(self-referential struct)。这种结构体允许定义指向同一结构体类型的指针成员,从而可以方便地创建链表或其他递归数据结构。实际上,这样做并不会直接导致编译错误,因为标准允许这样的定义,只要后续使用时遵循一定的规则。为什么不会出错?1. 延迟解析(Deferred Parsing):•在 C 语言中,结构体声明可以出现在其他声明之前,这意味着编译器可以先看到结构体的名称,然后再看到其完整的定义。•当一个结构体声明包含指向自身的指针时,编译器可以先处理指针类型,然后在完整定义出现后再处理结构体的其他部分。2. 前向声明(Forward Declaration):•结构体可以先进行前向声明,然后再给出完整的定义。前向声明告诉编译器结构体的存在,但没有给出其完整的布局。例子前向声明 + 完整定义// 前向声明

gcc *.c

相关推荐
(⊙o⊙)~哦13 小时前
vim的 配置文件
linux·编辑器·vim
Tranquil_ovo4 天前
【Linux】【Vim】Vim 基础
linux·vim
区区一散修5 天前
Linux第五章 文本编辑器vim
linux·vim
绝活蛋炒饭5 天前
Linux环境基础开发工具---vim
linux·运维·vim
橘子真甜~5 天前
Linux基础3-基础工具2(vim详解,gcc详解)
linux·运维·面试·编辑器·vim·学习方法
FLPGYH6 天前
重头开始嵌入式第三十九天(数据结构 栈)
linux·数据结构·链表·vim
一心只为学7 天前
Linux中vim常用命令大全
linux·运维·vim
Kent_J_Truman7 天前
Vim笔记
笔记·编辑器·vim
小Tomkk7 天前
Linux Vim的 命令大全
vim
寂夜了无痕8 天前
linux中vim介绍以及常用命令大全
linux·vim·vim常用命令大全·vim介绍