当前位置: 首页 > 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.dtcms.com/a/318563.html

相关文章:

  • c++ 中 原子锁、互斥锁、自旋锁的区别和详细用法
  • 大模型 + 垂直场景:搜索 / 推荐 / 营销 / 客服领域开发
  • 【Redis】Linux部署redis 7集群部署三主三从、ACL新建用户及密码(图文教程)
  • ​ubuntu22.04系统入门 (四)linux入门命令 权限管理、ACL权限、管道与重定向
  • 集合数据类型Map和Set
  • pcl手动直通滤波
  • LeetCode每日一题,8-6
  • 基于Simulink/MWORKS的文字与开关量混合传输系统设计
  • 流式输出 vs 非流式输出
  • SpringBoot设置跨域的几种方式
  • 互斥锁与条件变量
  • 每日五个pyecharts可视化图表-bars(5)
  • Java语言基础深度面试题
  • List、ArrayList 与顺序表
  • 智能学号抽取系统 V5.7.4 更新报告:修复关键同步漏洞,体验更臻完美
  • Spring Boot 项目代码笔记
  • 三、Istio流量治理(二)
  • 文件权限合规扫描针对香港服务器安全基线的实施流程
  • 《零基础入门AI:深度学习入门(从PyTorch安装到自动微分)》
  • Anthropic于本周一推出了其旗舰模型的升级版Claude Opus 4.1
  • 《第十三篇》深入解析 `kb_api.py`:知识库的创建、删除与查询接口
  • 基于Vue 3 的智能支付二维码弹窗组件设计与实现
  • Effective C++ 条款26: 尽可能延后变量定义式的出现时间
  • 007 前端( JavaScript HTML DOM+Echarts)
  • 【保留小数精度不舍入】2022-10-8
  • MaxKB 使用 MCP 连接 Oracle (免安装 cx_Oracle 和 Oracle Instant Client)
  • 智慧水务管理系统
  • C++、STL面试题总结(二)
  • 三、Envoy的管理接口
  • 数据科学与计算pandas