当前位置: 首页 > news >正文

数据结构_前言

本次我们将进入一个新的阶段啦~

要注意哦:
在学数据结构之前,我们要先掌握c语言中所学的指针、结构体、内存的存储这几部分,如果还没太掌握的话,那记得去复习回顾一下噢。

在这里插入图片描述

下面我们就一起进入数据结构的学习吧!

知识抽查:

首先我们来对学过的知识进行简单抽查回顾,看看前阶段的学习我们掌握到了多少。

  1. 你了解联合体和结构体吗?

结构体

  • 定义:结构体是一种自定义数据类型,可将不同类型的数据项组合在一起。
  • 内存使用:各成员拥有独立内存空间内存大小是所有成员大小之(考虑内存对齐)。
  • 用途:适合存储一个对象的多个不同属性,如存储一个人的姓名、年龄、身高、体重等信息。各成员可同时使用,修改一个成员不会影响其他成员。

联合体

  • 定义:联合体也是自定义数据类型,同样能组合不同类型的数据项。
  • 内存使用:所有成员共享同一块内存空间,其大小取决于最大成员的大小。
  • 用途:同一时间只能存储一个成员的值,给一个成员赋值会覆盖其他成员的值。常用于在不同数据类型之间复用内存,节省空间。
  1. 如何测试一个机器是大端还是小端?

概念:

  • 大端字节序是指数据的高位字节存于低地址位字节存于高地址
  • 小端字节序则相反,数据的位字节存于低地址位字节存于高地址
#include <stdio.h>

int isLittleEndian() 
{
    int num = 1;
    char *c = (char *)&num;
    return *c == 1;
}

int main()
{
    if (isLittleEndian()) 
    {
        printf("小端字节序\n");
    } else 
    {
        printf("大端字节序\n");
    }
    return 0;
}

原理:把整数的地址强制转换为字符指针,字符指针只能访问一个字节。若访问到的第一个字节是 1 的最低字节 0x01,就是小端;若为 0x00,就是大端。

  1. 递归是什么

递归是一种在函数定义中调用自身的方法。简单来说,递归函数通过不断调用自身来解决问题,直到达到某个终止条件(也称为基线条件)。递归通常用于解决可以分解为相似子问题的情况。
递归的关键要素:

  1. 基线条件(Base Case):
  • 递归终止的条件,防止无限递归。
  • 例如,计算阶乘时,0的阶乘定义为1,这就是基线条件。
  1. 递归条件(Recursive Case):
  • 函数调用自身,逐步向基线条件靠近。
  • 例如,计算n的阶乘时,递归条件是n * factorial(n - 1)。

示例:计算阶乘

递归的特点:

  • 优点:

    • 代码简洁,易于理解。
    • 适合解决分治问题(如树遍历、排序算法等)。
  • 缺点:

    • 可能产生大量函数调用,占用栈空间,导致栈溢出。
    • 效率可能较低,尤其是存在重复计算时。

递归与迭代:

  • 递归和迭代(循环)可以互相转换。

  • 递归更适合问题本身具有递归结构的场景,而迭代通常效率更高。

例如,斐波那契数列可以用递归实现
注意:但递归实现效率较低,改用迭代会更高效

总之,递归是一种强大的工具,但需要谨慎使用以避免性能问题。

数据结构前言

  1. 什么是数据结构?

数据结构是计算机存储、组织数据的方式。它规定数据元素间逻辑与物理关系,有线性(如数组、链表)和非线性(如树、图)等逻辑结构,及顺序、链式等物理存储方式。常见类型有数组、栈、队列等。其作用是提升算法效率、方便数据管理,不同编程语言对它的支持方式有别。

数据结构的核心作用

  • 高效访问:快速查找、插入、删除数据。

  • 优化存储:合理利用内存或磁盘空间。

  • 支持算法:为算法提供合适的数据组织形式。

  1. 什么是算法?

算法是解决特定问题的一系列明确、有限的操作步骤。它描述了如何从问题的输入得到期望的输出,具有有穷性、确定性、可行性、输入和输出等特性。可使用自然语言、流程图、伪代码或具体编程语言来表达。优秀的算法追求时间效率高、空间占用少,常见算法有排序、搜索等。

  1. 数据结构和算法的重要性
  • 数据结构是算法的基石,算法通过操作数据结构来解决问题。

  • 例如,排序算法依赖于数组或链表,最短路径算法依赖于图。

总之,数据结构是计算机科学的核心概念之一,掌握它对于编写高效程序至关重要。

相关文章:

  • 【基础架构篇二】《DeepSeek容器化部署:Docker+Kubernetes集群实战》
  • 【DL】浅谈深度学习中的知识蒸馏 | 输出层知识蒸馏
  • Spring中Bean的生命周期
  • React中如何处理高阶组件中的错误
  • WebGPU 命令编码机制解析:GPUCommandEncoder 与 GPURenderPassEncoder 的协作
  • 开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-LoRA微调-LLaMA-Factory-单机单卡-V100(一)
  • 调用deepseek接口
  • DeepSeek接入大数据能做什么
  • c# —— StringBuilder 类
  • three.js+WebGL踩坑经验合集(8.2):z-fighting叠面问题和camera.near的坑爹关系
  • C语言:在主函数中输入十个等长的字符串。用另一函数对它们排序,然后在主函数输出这10个已排好序的字符串。
  • 数据结构-栈、队列、哈希表
  • PyTorch与TensorFlow的对比:哪个框架更适合你的项目?
  • 什么是动态IP?静态IP和动态IP有什么区别?
  • C++中std::condition_variable_any、std::lock_guard 和 std::unique_
  • UE5控件组件显示UMG文本不正常
  • 1、AI量化学习资料 - 用DEEPSEEK玩转PTrade策略开发.zip\AI量化学习资料 - 1、PTrade策略开发提示词(参考模板).md
  • SpringBoot速成(14)文件上传P23-P26
  • 【JAVA实战】JAVA实现Excel模板下载并填充模板下拉选项数据
  • 【C++】36.C++IO流
  • 原核试验基地司令员范如玉逝世,从事核试验研究超40年
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理
  • 以军证实空袭也门多个港口
  • 吉利汽车一季度净利润大增264%,称整合极氪后实现整体效益超5%
  • 选址江南制造总局旧址,上海工业博物馆建设有新进展
  • 2025财政观察|长三角“三公”经费普降,钱要用在刀刃上