数据结构中使用到的C语言

文章目录

    • 头文件
      • <cstdio>
      • <cstdlib>
        • [🧠 核心功能解析](#🧠 核心功能解析)
      • [🔍 在您的代码中的必要性](#🔍 在您的代码中的必要性)
      • [🛠️ 正确使用方式](#🛠️ 正确使用方式)
      • [📊 内存管理函数对比表](#📊 内存管理函数对比表)
      • [💡 最佳实践建议](#💡 最佳实践建议)
    • 数组
    • 函数
    • 指针
    • 结构体

头文件

是 C++ 标准库中的一个头文件,它包含了 C 语言标准 I/O 库<stdio.h>的 C++ 封装,主要用于文件的输入和输出操作。

<cstdlib> 是 C++ 标准库中的一个重要头文件,它提供了 C 标准库中 <stdlib.h> 的功能,但以 C++ 风格封装在 std 命名空间中。这个头文件包含了多种通用功能函数,特别在内存管理、程序控制、数值转换等方面非常关键。

🧠 核心功能解析
  1. 内存管理函数
函数 功能 示例
malloc 分配未初始化的内存块 int* p = (int*)malloc(10*sizeof(int));
calloc 分配并清零内存块 int* p = (int*)calloc(10, sizeof(int));
realloc 调整已分配内存块大小 p = (int*)realloc(p, 20*sizeof(int));
free 释放动态分配的内存 free(p);
  1. 程序控制函数

    函数 功能 示例
    exit 正常终止程序 exit(EXIT_SUCCESS);
    abort 异常终止程序 abort();
    atexit 注册程序退出时执行的函数 atexit(cleanup);
    system 执行系统命令 system("dir");
  2. 随机数生成

    函数 功能 示例
    rand 生成伪随机数 int num = rand() % 100;
    srand 初始化随机数生成器 srand(time(NULL));
  3. 数值转换

    函数 功能 示例
    atoi 字符串转整数 int num = atoi("123");
    atof 字符串转浮点数 double d = atof("3.14");
    strtol 字符串转长整数 long l = strtol("FF", NULL, 16);
  4. 搜索与排序

函数 功能 示例
bsearch 二分查找 bsearch(key, arr, n, sizeof(int), compare);
qsort 快速排序 qsort(arr, n, sizeof(int), compare);

🔍 在您的代码中的必要性

在您的链栈实现中,您使用了以下需要 <cstdlib> 的函数:

cpp 复制代码
// 内存分配
L=(LinkStack *)malloc(sizeof(LinkStack));

// 内存释放
free(p);

如果不包含 <cstdlib>

  1. 编译器会报错:mallocfree 未声明
  2. 程序无法进行动态内存管理
  3. 可能导致未定义行为或编译失败

🛠️ 正确使用方式

基本包含

cpp 复制代码
#include <cstdlib> // 必须包含

C++ 风格调用

cpp 复制代码
// 使用 std:: 前缀(推荐)
LinkStack* p = std::malloc(sizeof(LinkStack));
std::free(p);

兼容 C 风格

cpp 复制代码
// 也可以直接使用(不推荐)
#include <cstdlib>
using namespace std; // 避免污染全局命名空间

malloc(...);
free(...);

📊 内存管理函数对比表

特性 malloc/free new/delete 智能指针
语言 C C++ C++11+
初始化 不初始化 调用构造函数 自动管理
释放 需手动 调用析构函数 自动释放
类型安全 不安全 安全 安全
推荐场景 C兼容代码 纯C++对象 现代C++

💡 最佳实践建议

  1. 在 C++ 中优先使用 new/delete

    cpp 复制代码
    // 更安全的替代方案
    LinkStack* L = new LinkStack;
    delete L;
  2. 使用智能指针避免内存泄漏

    cpp 复制代码
    #include <memory>
    std::unique_ptr<LinkStack> L(new LinkStack);
    // 自动释放内存
  3. 始终检查分配结果

    cpp 复制代码
    LinkStack* p = (LinkStack*)malloc(sizeof(LinkStack));
    if (!p) {
        // 处理内存不足
        return false;
    }

数组

函数

指针

结构体

相关推荐
Navigator_Z13 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
xx~t14 小时前
嵌入式——进程与线程1
linux·c语言·学习·嵌入式·进程与线程
老当益壮梁奶奶15 小时前
Linux软件编程学习笔记(七):线程分离与线程间通信详解
linux·c语言·c++·笔记·学习
zbyyd17 小时前
Linux 多线程:互斥锁 &amp; 信号量
linux·c语言·开发语言·网络
船厂电气自动化ai大模型18 小时前
AI大模型与数学·第57课 傅里叶全套工具链综合实战:串联级数/连续变换/DFT/FFT,图像、音频、扩散模型完整例题
数据结构·人工智能·深度学习·算法·机器学习
wuyk55518 小时前
从零吃透Modbus通信|第3章:STM32 Modbus RTU主机
服务器·开发语言·网络·数据结构·stm32·单片机·嵌入式硬件
Brilliantwxx19 小时前
【算法从零到千】【59-65】链表专题
数据结构·链表
重生之后端学习19 小时前
53. 最大子数组和[中等]✅
java·数据结构·算法·leetcode·职场和发展
水饺编程19 小时前
第5章,[Win32 章节] :绘图模式
c语言·c++·windows·visual studio
小手cool1 天前
使用递归对数组进行反转操作
java·数据结构·算法