华清数据结构day4 24-7-19
链表的相关操作
linklist.h
#ifndef LINKLIST_H
#define LINKLIST_H
#include <myhead.h>
typedef int datatype;
typedef struct Node
{union{int len;datatype data;};struct Node *next;
} Node, *NodePtr;NodePtr list_create();
NodePtr apply_node(datatype e);
int list_empty(NodePtr L);
//头插
int list_insert_head(NodePtr L, datatype e);
//链表遍历函数
int list_show(NodePtr L);
//通过位置查找结点
NodePtr list_search_pos(NodePtr L, int pos);
//任意位置插入
int list_insert_pos(NodePtr L, int pos, datatype e);
//链表头删
int list_delete_head(NodePtr L);
//链表任意位置删除
int list_delete_pos(NodePtr L, int pos);
//链表按值查找返回位置
int list_search_value(NodePtr L, datatype e);
//链表按位置进行修改
int list_update_pos(NodePtr L, int pos, datatype e);
//按值进行修改
int list_update_value(NodePtr L, datatype old_e, datatype new_e);
//将链表进行翻转
void list_reverse(NodePtr L);
//链表的排序
int list_sort(NodePtr L);
//链表的翻转(递归函数实现)
NodePtr list_reserve1(NodePtr L);
//释放链表
void list_destroy(NodePtr L);
#endif
linklist.c
#include "linklist.h"
NodePtr list_create() //链表的创建
{NodePtr L = (NodePtr)malloc(sizeof(Node));if (L == NULL){printf("创建失败\n");return NULL;}L->len = 0;L->next = NULL;printf("链表创建成功\n");return L;
}NodePtr apply_node(datatype e) //申请新元素
{NodePtr new = (NodePtr)malloc(sizeof(Node));if (new == NULL){printf("申请失败\n");}new->data = e;new->next = NULL;return new;
}
int list_empty(NodePtr L) //判空
{return L->next == NULL;
}//头插
int list_insert_head(NodePtr L, datatype e)
{if (L == NULL){printf("没有创建表\n");return -1;}NodePtr new = apply_node(e);if (new == NULL){return -1;}new->next = L->next;L->next = new;L->len++;printf("头插成功\n");return 0;
}
//链表遍历函数
int list_show(NodePtr L)
{if (L == NULL){printf("遍历失败\n");return -1;}printf("元素分别为");NodePtr q = L->next;while (q != NULL){printf("%d\t", q->data);q = q->next;}putchar(10);
}
//通过位置查找结点
NodePtr list_search_pos(NodePtr L, int pos)
{if (NULL == L || list_empty(L) || pos < 0 || pos > L->len){printf("查找失败\n");return NULL;}NodePtr p = L;for (int i = 0; i < pos; i++){p = p->next;}return p;
}
//任意位置插入
int list_insert_pos(NodePtr L, int pos, datatype e)
{if (NULL == L || pos < 0 || pos > L->len + 1){printf("插入失败\n");return -1;}NodePtr p = L;for (int i = 0; i < pos - 1; i++){p = p->next;}NodePtr new = apply_node(e);if (NULL == new){return -1;}new->next = p->next;p->next = new;L->len++;printf("插入成功\n");return 0;
}
//链表头删
int list_delete_head(NodePtr L)
{if (L == NULL || list_empty(L)){printf("删除失败\n");return -1;}NodePtr p = L->next;L->next = p->next;free(p);p = NULL;L->len--;printf("删除成功\n");return 0;
}
//链表任意位置删除
int list_delete_pos(NodePtr L, int pos)
{if (NULL == L || list_empty(L) || pos < 1 || pos > L->len){printf("删除失败\n");return -1;}NodePtr p = list_search_pos(L, pos - 1);NodePtr q = p->next;p->next = p->next->next;free(q);q = NULL;L->len--;printf("删除成功\n");return 0;
}
//链表按值查找返回位置
int list_search_value(NodePtr L, datatype e)
{if (NULL == L || list_empty(L)){printf("查找失败\n");return -1;}NodePtr p = L->next;for (int i = 0; i < L->len; i++){if (p->data == e){return i;}p = p->next;}printf("没找到\n");return -1;
}
//链表按位置进行修改
int list_update_pos(NodePtr L, int pos, datatype e)
{if (L == NULL || list_empty(L) || pos < 1 || pos > L->len){printf("修改失败\n");return -1;}NodePtr p = list_search_pos(L, pos);p->data = e;printf("修改成功\n");return 0;
}
//按值进行修改
int list_update_value(NodePtr L, datatype old_e, datatype new_e)
{if (NULL == L || list_empty(L)){printf("修改失败\n");return -1;}NodePtr p = L->next;for (int i = 0; i < L->len; i++){if (p->data == old_e){p->data = new_e;}p = p->next;}printf("修改成功\n");return 0;
}
//将链表进行翻转
void list_reverse(NodePtr L)
{if (NULL == L || L->len <= 1){printf("翻转失败\n");return;}NodePtr H = L->next;L->next = NULL;NodePtr p = NULL;while (H != NULL){p = H;H = H->next;p->next = L->next;L->next = p;}printf("翻转成功\n");
}
//链表的排序
int list_sort(NodePtr L)
{if (NULL == L || L->len <= 1){printf("排序失败\n");return -1;}NodePtr p = L->next;for (int i = 1; i < L->len; i++){for (int j = 0; j < L->len - i; j++){if (p->data > p->next->data){int temp = p->data;p->data = p->next->data;p->next->data = temp;}p = p->next;}p = L->next;}printf("排序成功\n");return 0;
}
//链表的翻转(递归函数实现)
NodePtr list_reserve1(NodePtr L)
{if(NULL == L || L->next->next == NULL){return L;}NodePtr q = list_reserve1(L->next);L->next->next = L;L->next = NULL;return q;
}
//释放链表
void list_destroy(NodePtr L)
{if (NULL == L){return;}while (!list_empty(L)){list_delete_head(L);}free(L);L = NULL;printf("销毁成功\n");
}
main.c
#include "linklist.h"
int main(int argc, const char *argv[])
{NodePtr L = list_create();if (L == NULL){return -1;}//调用头插函数list_insert_head(L, 520);list_insert_head(L, 1314);list_insert_head(L, 666);list_insert_head(L, 999);//调用遍历函数list_show(L);//调用任意位置插入函数list_insert_pos(L, 1, 100);list_insert_pos(L, 3, 100);list_insert_pos(L, L->len + 1, 100);list_show(L);//调用排序函数list_sort(L);list_show(L);//调用头删函数list_delete_head(L);list_delete_head(L);list_show(L);//调用按位置查找位置NodePtr res = list_search_pos(L, 2);if (res != NULL){printf("您要找的数据的值是%d\n", res->data);}//调用删除函数list_delete_pos(L, 1);list_delete_pos(L, 2);list_delete_pos(L, L->len);list_show(L);//调用按值查找位置int index = list_search_value(L, 666);if (index != -1){printf("您要找的数据在链表的第%d个位置\n", index + 1);}//调用按位置进行修改函数list_update_pos(L, 1, 12345);list_show(L);//调用按值修改函数list_update_value(L, 12345, 6789);list_show(L);//调用翻转函数list_reverse(L);list_show(L);//调用翻转函数NodePtr retPtr = list_reserve1(L);list_show(retPtr);//调用释放函数list_destroy(L);L = NULL;return 0;
}
a

相关文章:
华清数据结构day4 24-7-19
链表的相关操作 linklist.h #ifndef LINKLIST_H #define LINKLIST_H #include <myhead.h> typedef int datatype; typedef struct Node {union{int len;datatype data;};struct Node *next; } Node, *NodePtr;NodePtr list_create(); NodePtr apply_node(datatype e); …...
【深度学习图像】拼接图的切分
用户常常将多张图拼成一张图。 如果将这张图拆为多个子图,下面是一种opencv的办法,后面要训练一个模型来识别边缘更为准确。 import osimport cv2 import numpy as npdef detect_lines(image_path):# 读取图片image cv2.imread(image_path)if image i…...
Covalent(CXT)运营商网络规模扩大 42%,以满足激增的需求
Covalent Network(CXT)是领先的人工智能模块化数据基础设施,网络集成了超过 230 条链并积累了数千名客户,目前 Covalent Network(CXT)网络迎来了五位新运营商的加入,包括 Graphyte Labs、PierTw…...
Java 集合框架:HashMap 的介绍、使用、原理与源码解析
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 020 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...
单周期CPU(三)译码模块(minisys)(verilog)(vivado)
timescale 1ns / 1ps //module Idecode32 (input reset,input clock,output [31:0] read_data_1, // 输出的第一操作数output [31:0] read_data_2, // 输出的第二操作数input [31:0] Instruction, // 取指单元来的指令input [31:0] …...
理想化相机模型的相机内参
文章目录 理想化相机模型的相机内参计算1. 相机内参定义2. 根据视角和图像分辨率计算相机内参2.1 计算焦距 fx 和 fy2.2 计算主点 cx 和 cy3. 示例计算3.1 计算 fx3.2 假设 fy = fx(因为没有垂直视场角的信息)3.3 计算主点4. 相机内参矩阵理想化相机模型的相机内参计算 在理…...
【数据脱敏】⭐️SpringBoot 整合 Jackson 实现隐私数据加密
目录 🍸前言 🍻一、Jackson 序列化库 🍺二、方案实践 2.1 环境准备 2.2 依赖引入 2.3 代码编写 💞️三、接口测试 🍹四、章末 🍸前言 小伙伴们大家好,最近也是很忙啊,上次的文章…...
骑砍2霸主MOD开发(18)-多人联机模式开发环境搭建
一.多人联机模式网络拓扑图 二.专用服务器搭建(DedicatedServer) <1.Token生成(用于LobbyServer的校验): 进入多人联机大厅,ALT~打开RGL控制台,输入customserver.gettoken Token文件路径:C:\Users\taohu\Documents\Mount and Blade II Bannerlord\Tokens <2.启动专用服务…...
【HZHY-AI300G智能盒试用连载体验】在华为IoTDA平台上建立设备
目录 华为IoTDA平台 注册IoTDA实例 创建产品 添加设备 本文首发于:【HZHY-AI300G智能盒试用连载体验】 智能工业互联网网关 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛! 在上一篇博文中介绍了如何在HZHY-AI300G智能盒创建南向设备&a…...
【LLM】-05-提示工程-部署Langchain-Chat
目录 1、软硬件要求 1.1、软件要求 1.2、硬件要求 1.3、个人配置参考 2、创建cuda环境 3、下载源码及模型 4、配置文件修改 5、初始化知识库 5.1、训练自己的知识库 6、启动 7、API接口调用 7.1、使用openai 参考官方wiki,本文以Ubuntu20.04_x64…...
【漏洞复现】Next.js框架存在SSRF漏洞(CVE-2024-34351)
0x01 产品简介 ZEIT Next.js是ZEIT公司的一款基于Vue.js、Node.js、Webpack和Babel.js的开源Web应用框架。 0x02 漏洞概述 ZEIT Next.js 13.4版本至14.1.1之前版本存在代码问题漏洞,该漏洞源于存在服务器端请求伪造 (SSRF) 漏洞 0x03 搜索引擎 body"/_nex…...
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 小区小朋友统计(100分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…...
Vuex看这一篇就够了
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
Kafka集群创建
这样就创建好了docker4个镜像,三个node,一个manager。 其中,浏览器访问的是manager对应的那个url,直接在里面加Cluster...
2024.7.22 作业
1.将双向链表和循环链表自己实现一遍,至少要实现创建、增、删、改、查、销毁工作 循环链表 looplinklist.h #ifndef LOOPLINKLIST_H #define LOOPLINKLIST_H#include <myhead.h>typedef int datatype;typedef struct Node {union {int len;datatype data;}…...
如何使用aiohttp或requests-async等库并发地执行多个HTTP请求
在Python中,要并发地执行多个HTTP请求,可以使用aiohttp这样的异步HTTP客户端库,因为它支持异步编程,能够显著提高IO密集型任务的性能,比如网络请求。requests-async并不是一个广泛认知的库(虽然可能存在类似…...
Golang | Leetcode Golang题解之第257题二叉树的所有路径
题目: 题解: func binaryTreePaths(root *TreeNode) []string {paths : []string{}if root nil {return paths}nodeQueue : []*TreeNode{}pathQueue : []string{}nodeQueue append(nodeQueue, root)pathQueue append(pathQueue, strconv.Itoa(root.V…...
关于css中flex布局垂直居中失效问题的原因
项目中遇到用flex进行页面布局后,使用上下居中设置:align-item: center; 目标效果如下: 但是失效,不起作用,如下图所示: 各种排查过后发现设置了子模块 align-self 属性,这会覆盖容器上的 al…...
用Redisson写一个库存扣减的方法
使用Redisson来处理库存操作可以确保在高并发环境下库存数据的一致性和完整性。以下是使用Redisson实现库存管理的一些通用方法,包括获取库存、扣减库存、设置库存等。我们将使用Redisson的ReentrantLock来确保并发安全。 首先,确保你已经正确设置了Red…...
第2节课:文本内容与格式化——HTML中的文本处理技巧
目录 文本内容与格式化:段落和标题:构建文本基础段落 <p>标题 <h1> 到 <h6> 格式化:强调和样式加粗 <b>斜体 <i>下划线 <u> 列表:组织内容无序列表 <ul>有序列表 <ol>定义列表 &…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
