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

数据结构——双向链表及makefile

makefile

定义

        在一项工程中,需要不仅仅是一个源文件,而是同时编译多个文件,这就需要makefile对工程进行编译和管理

        makefile:用来管理代码的编译和连接

        通过make工具解释

        makefile语法规则:

                目标文件:依赖文件(a.out:main.c)

                       编译方法(gcc)

        创建文件:vi makefile或者vi Makefile,只有这两种

        而在makefile中,则需要按如此方式编写,然后再通过make进行编译,只需在终端打出make即可,当然还有简便方法,因为在makefile中可以定义变量

makefile中的变量

1,自定义变量,不需要具体的数据类型,只需要变量=数据即可,而引用变量需要用“$”符号

        定义:                        

        变量名 = 值

        引用:                              

        $(变量名)       

        例:

        其中$(OBJ)就是a.out本身,所以可以按照上述方式来编写

        clean:删除原先的a.out

        如果新编写了一个文件,想在原先的SRC后再加上一个文件,只需要SRC+=新文件名即可

2,系统变量

        $^:所有依赖文件

        $<:第一个依赖文件

        $@:生成的目标文件

        但是在使用系统变量之前,必须说明哪些文件是依赖文件,哪些文件是目标文件所以上图可以改为

        如果在编译过程中需要用到其他头文件,可以通过-I来指定头文件所在位置,-L指定库所在位置,如下

时间戳

        在编译代码时,值编译修改后的源文件,其他没有修改的,只进行链接即可

gcc编译的四个步骤

        1,预处理:处理和#相关的指令,例如头文件展开,宏        gcc -E main.c -o main.i

        2,编译:将源程序转换成汇编指令        gcc -S main.i -o main.s

        3,汇编:将汇编指令生成二进制指令        gcc -c main.s -o main.o

        4,链接:处理多文件及函数的链接关系        gcc main.o -o app

双向链表

        与单向链表的区别是,双向链表有两个指针域,可以指向指向本结点的结点,如图所示

创建双向链表

头插法

        先判断是否为空指针,引入堆区空间,并将插入的数据放入堆区空间中,再判断是否为空链表,如果是空链表,则只需要将头节点指向该结点即可,如果不是,则需要将该结点的后继指向旧头节点

遍历

        正反遍历,当dir==1时便正向遍历,反之则反向遍历

尾插

        如果是空链表,则和头插相同,如果不是,则需要确定到尾结点,让尾结点指向该结点,该结点指向旧尾结点

头删

        如果只有一个结点,则需要将链表对象指向NULL,如果不是,则链表对象指向新的头节点,释放旧头节点空间,并将新头节点指向旧头节点指向的结点

尾删

        先确定尾结点,再将尾结点的前驱结点指向新尾结点,将新尾结点前驱指向旧尾结点前驱

销毁

        反复调用头删

http://www.lryc.cn/news/612046.html

相关文章:

  • NineData 新增支持 AWS ElastiCache 复制链路
  • windows搬运文件脚本
  • 互斥锁与条件变量
  • 自然语言处理基础—(1)
  • 深入理解 C++ 中的stdpriority_queue:从原理到实战的高效优先级管理
  • ssm复习
  • 【嵌入式电机控制#26】BLDC:三相模拟采集
  • springboot项目前后端通用下载方法、问题和解决方案
  • PyTorch生成式人工智能(26)——使用PyTorch构建GPT模型
  • AVDTP Media Packet 传输全流程解析:从 SDP 到连接终止
  • 基于AntDesign二次封装table组件
  • 思途AOP学习笔记 0806
  • nginx代理出https,request.getRequestURL()得到http问题解决
  • 界面规范的其他框架实现-列表-layui实现
  • TypeError: crypto$2.getRandomValues is not a function
  • 北大、蚂蚁三个维度解构高效隐私保护机器学习:前沿进展+发展方向
  • AlexNet训练和测试CIFAR10
  • Python金融分析:从基础到量化交易的完整指南
  • 如何定位一个高并发场景下API响应时间从200ms突增到2s的问题
  • 生成模型实战 | Transformer详解与实现
  • 需求链路追踪
  • centos配置java环境变量
  • SpringCloud -- elasticsearch(二)
  • MonoFusion 与 Genie 3
  • 如何快速掌握大数据技术?大四学生用Spark和Python构建直肠癌数据分析与可视化系统
  • Apollo中三种相机外参的可视化分析
  • 「iOS」————单例与代理
  • iOS 文件管理实战指南 查看 App 数据与系统日志的完整方法
  • Python虚拟环境完全指南:pyenv vs venv 在macOS上的使用详解
  • SpringBoot 3.x整合Elasticsearch:从零搭建高性能搜索服务