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

day-21 内核链表以及栈

1.昨日作业

1.删除指定节点

找到删除就完事了,双向可以停在删除处。

/***************************** 功能:删除指定结点(通过姓名)* 参数:phead;oldname; * 返回:成功0,失-1;* *************************/int delete_specified_node(dou_node *phead,char *oldname)
{if(NULL == phead){printf("phea is NULL");return -1;}dou_node *p = phead->pnext;while(NULL != p){if(strcmp(p->data.name,oldname)==0){dou_node *q = p->pnext;p->ppre->pnext = q;q->ppre = p->ppre;free(p);return 0;}p = p->pnext;}return -1;
}

2.内核链表

内核链表将节点以及要储存的数据分离开来,节点的操作函数不因数据类型的改变而需要重写。

1.klist.h

声明节点的类型,以及节点操作的函数

#ifndef __KLIST_H__
#define __KLIST_H__typedef struct knode
{struct knode *ppre;struct knode *pnext;
}Knode;extern Knode * creat_klist();
extern int insert_head_klist(Knode *phead ,Knode *pinsert);
extern void list_for_each(Knode *phead,void (*pfun)(Knode *));extern int delete_tail_klist(Knode*phead);
extern int delete_head_klist(Knode*phead);
extern void destroy_klist(Knode * phead);
extern int insert_tail_klist(Knode *phead,Knode *pinsert);
#endif

2.flight.h

声明数据结构体类型,

##ifndef __FLIGHT_H__
#define __FLIGHT_H__#include "klist.h"struct passager
{Knode node;char name[32];int flt_num;int sit_num;char hea_card;
};extern struct passager* creat_passager(char *name,int flt_num, int sit_num,char hea_card);
extern void print_passager(Knode *p);
#endif

2 .klist.c

1.创建节点

Knode *creat_klist()
{Knode *phead = NULL;phead = malloc(sizeof(Knode));if(NULL == phead){printf("malloc fail\n");return NULL;}phead->ppre = NULL;phead->pnext = NULL;return phead;
}

2.前插

逻辑同双向链表的前插,但是呢插得是数据中的节点,故在main函数中应先定义数据结构体变量,定义的时候不用管节点成员。传参传结构体成员如下所示

	struct passager *p1 = creat_passager("zhangsan",2024,1,'r');    struct passager *p2 = creat_passager("lisi",2024,2,'g');struct passager *p3 = creat_passager("wanger",2024,3,'y');insert_tail_klist(phead,&(p1->node));insert_tail_klist(phead,&(p2->node));insert_tail_klist(phead,&(p3->node));

插入分两种情况,空的和非空


int insert_head_klist(Knode *phead , Knode *pinsert)
{pinsert->pnext = phead->pnext;if(phead->pnext != NULL){phead->pnext->ppre = pinsert;}pinsert->ppre = phead;phead->pnext = pinsert;return 0;
}

3.后插

后插特殊部分和前插一样,但是有个细节是查完之后pinsert->pnext = NULL;

int insert_klist_tail(KNode *phead, KNode *pnode)
{if (NULL == phead || NULL == pnode)return -1;KNode *p = phead;while (p->pnext != NULL){p = p->pnext;}p->pnext = pnode;pnode->ppre = p;pnode->pnext = NULL;return 0;
}

4.遍历(重重重点)

达到低耦合的效果

第一种

通过函数指针形成回调函数 。达到不同的数据类型也可以通过一个遍历函数完成便利,只需要传递不同的函数指针就行。

void list_for_each(Knode *phead, void (*pfun)(Knode *))
{if(phead ==NULL || NULL == pfun)return;Knode *p = phead->pnext;while(NULL  !=p){pfun(p);p = p->pnext;}printf("\n");}

回调函数
先强转在访问

void print_passager(Knode *pnode)
{struct passager *p = (struct passager *)pnode;printf("%s %d %d %c\n",p->name,p->flt_num,p->sit_num,p->hea_card);}

main函数调用

list_for_each(phead,print_passager);
第二种

通过带参宏的形式,去访问结构体成员
.h中声明

#define klist_for_each(pos, head)                                        \for (pos = (head)->pnext; pos != NULL; pos = pos->pnext)

main’函数中直接使用,先强转随便访问结构体;

klist_for_each(ptmp, phead)
{struct passager *p = (struct passager *)ptmp;}

5.删除销毁等同双向,本质是双向链表,把节点放在结构体首个成员。结构体地址等于节点地址。

3.栈

1.系统栈和数据结构中的栈的区别
在这里插入图片描述

相关文章:

day-21 内核链表以及栈

1.昨日作业 1.删除指定节点 找到删除就完事了,双向可以停在删除处。 /***************************** 功能:删除指定结点(通过姓名)* 参数:phead;oldname; * 返回:成功0,失-1&…...

深度与视差的关系及其转换

深度与视差的关系及其转换 在计算机视觉和立体视觉中,深度和视差是两个重要的概念。理解这两者之间的关系对于实现立体图像处理、三维重建以及深度估计至关重要。在这篇博客中,我们将深入探讨深度和视差的概念,并介绍它们之间的转换关系。 …...

Unity全局光照详解

之前就学过但是太久没用又忘了,因此用最简洁易懂的语言做个记录。 全局光照分为两个系统,分别是实时光照和混合光照。(点击window/Rendering/Lighing打开此面板) 其中全局光照对于我来说都是新技术了,上一次学…...

外观模式的理解和实践

外观模式(Facade Pattern)是一种常用的软件设计模式,它提供了一个统一的接口,用来访问子系统中的一群接口。该模式定义了一个高层的接口,使得子系统更容易使用。简单来说,外观模式就是通过引入一个外观角色…...

【前端知识】Javascript进阶-类和继承

文章目录 概述一、类(Class)二、继承(Inheritance) 三、继承的实现方式作用一、类和作用二、继承和作用 概述 当然可以,以下是对JavaScript中类和继承的详细介绍: 一、类(Class) 定…...

Kylin麒麟操作系统 | Nginx服务部署

目录 一、理论储备1. Nginx概述2. Nginx与Apache的区别3. Nginx的服务配置 二、任务实施任务1 Nginx的编译安装1. Server配置2. 客户端测试 任务2 Nginx反向代理1. Server1配置2. Server2配置3. 客户端测试 一、理论储备 1. Nginx概述 Nginx是一个轻量级的web服务器&#xff…...

51单片机--- 串口控制仿真

51单片机--- 串口控制仿真 实验目标:51单片机接收串口数据,根据数据点亮LED。 实验步骤: 在Proteus里画出原理图 在Keil里用C语言编写程序 在Proteus中导入HEX文件,启动仿真 实验协议: 波特率115200 数据位:8位,停止位:1位,校验位:无。 命令格式: 一条命令为…...

<数据集>输电线塔杂物识别数据集<目标检测>

数据集下载链接 <数据集>输电线塔杂物识别数据集<目标检测>https://download.csdn.net/download/qq_53332949/90141102数据集格式:VOCYOLO格式 图片数量:1099张 标注数量(xml文件个数):1099 …...

HarmonyOS学习 --- Mac电脑获取手机UDID

一,手机打开开发者选项 1,打开“设置 > 关于本机”,连续点击7次版本号,打开开发者选项。 2,打开“USB调试”。 二,配置环境变量 获取OpenHarmony SDK 安装路径 /Users/admin/Library/OpenHarmony/Sdk/10…...

OpenIPC开源FPV之Adaptive-Link地面站代码解析

OpenIPC开源FPV之Adaptive-Link地面站代码解析 1. 源由2. 框架代码3. 软件配置3.1 默认配置3.2 加载配置3.3 更新配置 4. 通信例程4.1 TCP报文解析4.2 UDP报文发送 5. 特殊指令5.1 request_keyframe5.2 drop_gop5.3 resume_adaptive5.4 pause_adaptive 6. 总结7. 参考资料 1. 源…...

Linux Docker环境中解决中文字体乱码问题完整指南

问题背景 在Linux Docker环境中运行涉及中文显示的应用时(如Selenium网页截图、PDF生成等),经常会遇到中文显示为方块或乱码的问题。这是因为Linux系统默认没有安装中文字体所导致的。 解决方案 我们可以从Windows系统复制常用中文字体到D…...

[数据结构#1] 并查集 | FindRoot | Union | 优化 | 应用

目录 1. 并查集原理 问题背景 名称与编号映射 数据结构设计 2. 并查集基本操作 (1) 初始化 (2) 查询根节点 (FindRoot) (3) 合并集合 (Union) (4) 集合操作总结 并查集优化 (1) 路径压缩 (2) 按秩合并 3. 并查集的应用 (1) 统计省份数量 (2) 判断等式方程是否成…...

用于卫星影像间接RPC模型精化的通用光束法平差方法

引言 介绍了通用RPC模型的表达式,which has been down to death 描述了RPC模型产生误差的原因——主要与定义传感器方位的姿态角有关。 每个影像都会对应一个三维点云,但是对同一地物拍摄的不同影像对应出来的三维点云是不一样的,所以才需…...

关于Redis主从复制实验操作

需要搭建帮助的可以去taobao搜索Easy Company技术服务,谢谢!!! 需要搭建帮助的可以去taobao搜索Easy Company技术服务,谢谢!!! Redis主从复制需要一主二从(共三个Redis…...

【HarmonyOS】鸿蒙获取appIdentifier,Identifier

【HarmonyOS】鸿蒙获取appIdentifier,Identifier 一、前言 三方后台需要填写的所谓appIdentifier,Identifier信息,其实对应鸿蒙应用的appID。 二、解决方案: 注意,模拟器获取data.signatureInfo.appIndentifer为空…...

matplotlib(二)

目录 1、折线图(plot)与基础绘制图功能 1.1、设置图形风格 2、多坐标系显示图像 3、折线图的应用场景 1、折线图(plot)与基础绘制图功能 # import matplotlib.pyplot as plt # import random # #1.创建画布 # plt.figure(figs…...

Jenkins容器使用宿主机Docker(五)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六&#…...

基于前后端分离的食堂采购系统源码:从设计到开发的全流程详解

本篇文章,笔者将从系统设计到开发的全过程进行详解,帮助开发者和企业了解如何高效构建一套完善的食堂采购系统。 一、系统需求分析 在开发一套基于前后端分离的食堂采购系统前,必须对业务需求和功能模块进行详细分析,确保系统设…...

git使用教程(超详细)-透彻理解git

一.核心基础 核心概念有六个 首先请把与svn有关的一切概念暂时从你的脑海中移除掉,我们要重新认识本文所讲述的所有概念。 1.worktree worktree是一个目录,你在这里对文件进行增加、删除、修改。也就是我们常说的工作区。在git中worktree必须要与一个…...

Bugku---misc---隐写2

题目出处:首页 - Bugku CTF平台 ✨打开发现是一张图片,于是查看属性,放在010查看,这都是基本步骤了,发现里面有一个flag.rar!!!拿binwalk分析也确实存在 ✨于是按照压缩包的起始位置…...

数据仓库工具箱—读书笔记01(数据仓库、商业智能及维度建模初步)

数据仓库、商业智能及维度建模初步 记录一下读《数据仓库工具箱》时的思考,摘录一些书中关于维度建模比较重要的思想与大家分享🤣🤣🤣 博主在这里先把这本书"变薄"~有时间的小伙伴可以亲自再读一读,感受一下…...

将 Ubuntu 22.04 LTS 升级到 24.04 LTS

Ubuntu 24.04 LTS 将支持 Ubuntu 桌面、Ubuntu 服务器和 Ubuntu Core 5 年,直到 2029 年 4 月。 本文将介绍如何将当前 Ubuntu 22.04 系统升级到最新 Ubuntu 24.04 LTS版本。 备份个人数据 以防万一,把系统中的重要数据自己备份一下~ 安装配置SSH访问…...

Springboot3.x配置类(Configuration)和单元测试

配置类在Spring Boot框架中扮演着关键角色,它使开发者能够利用Java代码定义Bean、设定属性及调整其他Spring相关设置,取代了早期版本中依赖的XML配置文件。 集中化管理:借助Configuration注解,Spring Boot让用户能在一个或几个配…...

Python:类方法、实例方法与静态方法深度解析(补)

目录 一.实例变量 二.类变量 三.实例方法 四.类方法 五.静态方法 六.小结 总结 今天看程序时,发现自己好像忘了这三者的区别,所以重新写了一篇深度解析,希望之前看博客没看懂的小伙伴可以通过这个博客分清楚这三个方法。跟的是麦叔的课…...

Certimate:简化 SSL 证书管理的开源工具

引言 SSL(Secure Sockets Layer)证书对于保护网站和用户数据至关重要。然而,管理多个 SSL 证书可能变得繁琐和复杂。为了解决这个问题,Certimate 应运而生。Certimate 是一款开源的 SSL 证书管理工具,旨在简化 SSL 证书的申请、部署和续期流程。它特别适合需要管理多个域…...

rabbitMq举例

新来个技术总监,把 RabbitMQ 讲的那叫一个透彻,佩服! 生产者 代码举例 public String sendMsg(final String exchangeName,final String routingKey,final String msg) {} /*** 发送消息* param exchangeName exchangeName* param routin…...

人工智能增强的音频和聊天协作服务

论文标题:AI-enabled Audio and Chat Collaboration Services 中文标题:人工智能增强的音频和聊天协作服务 作者信息: Emil P. Andersen, Norwegian Defence Research Establishment (FFI), Kjeller, NorwayJesper R. Goksr, Sindre E. Ha…...

ctr: content digest XXX not found

1、问题描述 ctr 推送镜像到本地仓库报错 ctr: content digest sha256:b96e30ccb0a1e225493e53d4f81cb2c27183406e5f902ed43c4bf15dc6f21c9c: not found 2、问题原因 本人的平台是M1,正常情况下载镜像会自动按平台寻找版本,但是由于我下载的镜像版本没…...

java内存模型

文章目录 1.java内存模型2.重排序3.内存屏障3.1四类内存屏障指令 4.happens-before4.1 规则5.volatile5.1特性5.2规则5.3 内存语义5.4 内存屏障插入策略 1.java内存模型 java内存模型(JMM)定义了线程和主内存之间的抽象关系:线程之间的共享变…...

Java Object类与Objects类

1. Object 类 (1) Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用Object类中提供的一些方法(public class Object)。 . (2) Object类常见方法 方法说明public String toString()返回对象的字符串形式public boolean eq…...

【目标检查】YOLO系列之:Triton 推理服务器Ultralytics YOLO11

Triton 推理服务器 1、引言2、Triton服务器2.1 什么是Triton Inference Server2.2 将YOLO11 导出为ONNX 格式2.3 设置Triton 模型库2.3.1 创建目录结构2.3.2 将导出的ONNX 模型移至Triton 资源库 2.4 运行Triton 推断服务器2.4.1 使用 Docker 运行Triton Inference Server2.4.2…...

力扣69. x 的平方根

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1:…...

关于目标检测YOLO 各版本区别v1-v11/vX/vR

概述 YOLO(You Only Look Once,你只看一次)是一系列开创性的实时目标检测模型,它们彻底改变了计算机视觉领域。由Joseph Redmon开发,后续版本由不同研究人员迭代,YOLO模型以其在图像中检测对象的高速度和准…...

求成绩的平均值,统计低于平均分的人数

【问题描述】编写函数double average(double score[ ], int n,int *m)对存放在实型数组中考试成绩进行求平均分和低于平均分的人数,要求在主函数里面进行班级人数和成绩的输入,调用average函数进行计算成绩平均值和低于平均分的人数后,返回主…...

SGD、BGD、MBGD 之间的区别

文章目录 SGD(Stochastic Gradient Descent,随机梯度下降)BGD(Batch Gradient Descent,批量梯度下降)MBGD(Mini-Batch Gradient Descent,小批量梯度下降) 前置&#xff1…...

Android -- WebView之loadData加载html字符串显示网页

目录 前言1. loadUrl 加载网页地址2. loadData 加载Html字符来显示网页3. loadDataWithBaseURL4. 总结 前言 最近在给一个老项目做64位so文件的适配,当应用发布到应用市场上后,用户反馈64位手机上的网页加载不出内容,但32位的手机上是正常…...

单片机:实现数码管00盗99显示(附带源码)

单片机实现数码管00到99显示 在嵌入式开发中,数码管是最常用的显示设备之一,特别适合用于显示数字信息。本项目的目标是利用8051单片机控制数码管实现数字显示,从00到99的循环显示。我们将通过按键或定时器来控制数字的增减,并通…...

大厂面试智力题大全(详细解题思路,持续更新)

目录 八个球有一个比较重,问称几次可以把较重的球拎出来,具体称重的方法是怎样的? 64 匹马 8 个赛道,找出前四名,最少赛多少场(腾讯) 一个城市的加油站数量 5L的水桶和3L的水桶怎么量出4L的水 有一堆粗细不均匀的绳子,燃烧完一个绳子需要2小时,如何用这些绳子凑出…...

使用 acme.sh 签发和自动续期 ssl https 证书

acme.sh 是一个热度非常高的签发和自动续期 https 证书的工具,虽然官网上提供了充分的操作说明,但是不够简洁,本文以在 nginx 中签发和配置http 为例,列出必要的几个简单步骤。 安装 因为网络原因,github 大部分人是…...

YOLOv9改进,YOLOv9引入DLKA-Attention可变形大核注意力,WACV2024,二次创新RepNCSPELAN4结构

摘要 作者引入了一种称为可变形大核注意力 (D-LKA Attention) 的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKA Attention 还受益于可变形卷积,以适应不同的数据模式。 理论介绍 大核卷积(Large Kernel Convolu…...

docker安装mysql8

上一篇提到了docker安装mysql5.7和mysql8有所不同,这一篇说一下mysql8的安装 1、宿主机创建映射目录 mkdir -p /data/mysql8/log mkdir -p /data/mysql8/data mkdir -p /data/mysql8/conf这里我放在了/data/mysql8目录下 2、拉取mysql镜像 docker pull mysql:8.…...

【云原生知识】Kubernets实践-前端服务如何访问后端服务

文章目录 概述步骤1:部署后端服务步骤2:配置Nginx步骤3:创建Nginx服务总结 如何确保 Nginx 能持续访问后端服务?相关文献 概述 假设你正在使用Kubernetes作为容器云平台,以下是如何配置Nginx以及相关服务,…...

M3DM的autodl环境构建过程笔记

文章目录 在3D-ADS环境https://blog.csdn.net/tfxzgp/article/details/144259472基础上构建(失败的记录,不用看)更换镜像重来(成功)安装缺少的包修改models.py中的RGB和点云backbone的路径修改main.py路径参数运行 在3D-ADS环境https://blog.…...

jmeter CLI Mode 传参实现动态设置用户数

一.需求 CLI 运行模式下每次运行想要传入不同的用户数,比如寻找瓶颈值的场景,需要运行多次设置不同的用户数。 二.解决思路 查看官方API Apache JMeter - Users Manual: Getting Started api CLI Mode 一节中提到可以使用如下参数做属性的替换&#…...

Mac系统下 jdk和maven 安装教程

一、jdk安装教程 1、先去官网选择对应版本下载 官网网址:Java SE | Oracle Technology Network | Oracle 中国 这里我选择的是jdk8的版本,如果你们想下载更高的版本就选择其他版本,目前大部分公司和教程使用jdk8的版本比较多。 点击macos&a…...

pyfink1.20版本下实现消费kafka中数据并实时计算

1、环境 JDK版本:1.8.0_412python版本:3.10.6apache-flink版本:1.20.0flink版本:1.20kafka版本:kafka_2.12-3.1.1flink-sql-connector-kafka版本:3.3.0-1.202、执行python-flink脚本 从kafka的demo获取消…...

【经验分享】私有云运维的知识点

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...

影像组学+病理组学+深度学习人工智能应用

影像组学 基础学习内容: 特征提取:使用pyradiomics进行形状、纹理、小波变换等特征提取。特征筛选:应用ICC、相关系数、mRMR、Lasso等方法。建模:使用LR、SVM、RF、XGBoost、LightGBM等机器学习算法。模型评估:通过A…...

how to write 述职pptx as a tech manager

As a technical manager, crafting an effective 述职 (performance review) PPT requires you to highlight your leadership, team accomplishments, technical contributions, challenges faced, and future plans. Heres a structured approach to design your PPT: 1. Cov…...

用户发送请求后服务端i/o工作过程

华子目录 服务端i/o介绍磁盘i/o机械磁盘的寻道时间、旋转延迟和数据传输时间常见的机械磁盘平均寻道时间值常见磁盘的平均延迟时间每秒最大IOPS的计算方法 网络i/o网络I/O处理过程磁盘和网络i/o 一次完整的请求在内部的执行过程 服务端i/o介绍 i/o在计算机中指Input/Output&am…...