学习嵌入式的第二十一天——数据结构——链表

单向链表特点:

存储的内存空间不连续 。为了弥补顺序存储存劣势。

优势
插入,删除   O(1)
动态存储 ,在程序运行期间决定大小。

劣势:
不能随机访问   O(N) 

节点-> 数据域+指针域 

顺序表(数组) 只有数据域

链表的操作代码:

#include "linklist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>LinkList *CreateLinkList()
{  // 1000LinkList *ll = malloc(sizeof(LinkList));if (NULL == ll){perror("CreateLinkList malloc");return NULL;}ll->head = NULL;ll->clen = 0;return ll;
}int InsertHeadLinkList(LinkList *list, DATATYPE *data)
{LinkNode *newnode = malloc(sizeof(LinkNode));if (NULL == newnode){perror("InsertHeadLinkList malloc");return 1;}//新节点的初始化memcpy(&newnode->data, data, sizeof(DATATYPE));newnode->next = NULL;//链表非空的情况if (!IsEmptyLinkList(list)){newnode->next = list->head;}list->head = newnode;list->clen++;return 0;
}int IsEmptyLinkList(LinkList *list)
{return 0 == list->clen;
}int ShowLinkList(LinkList *list)
{LinkNode *tmp = list->head;while (tmp){printf("name:%s sex:%c age:%d score:%d\n", tmp->data.name, tmp->data.sex,tmp->data.age, tmp->data.score);// tmp++tmp = tmp->next;}return 0;
}int InsertTailLinkList(LinkList *list, DATATYPE *data)
{if (IsEmptyLinkList(list)){return InsertHeadLinkList(list, data);}else{LinkNode *tmp = list->head;// tmp 需要停在最后一个有效节点上while (tmp->next){tmp = tmp->next;}LinkNode *newnode = malloc(sizeof(LinkNode));if (NULL == newnode){perror("InsertTailLinkList malloc");return 1;}memcpy(&newnode->data, data, sizeof(DATATYPE));newnode->next = NULL;tmp->next = newnode;}list->clen++;return 0;
}int InsertPosLinkList(LinkList *list, DATATYPE *data, int pos)
{int len = GetSizeLinkList(list);if (pos < 0 || pos > len){fprintf(stderr, "InsertPosLinkList pos error\n");return 1;}// insertheadif (0 == pos){return InsertHeadLinkList(list, data);}// inserttailelse if (pos == len){return InsertTailLinkList(list, data);}else  //中间插入{LinkNode *tmp = list->head;int off = pos - 1;// tmp 需要停在待插下标节点的前一位置while (off--){tmp = tmp->next;}LinkNode *newnode = malloc(sizeof(LinkNode));if (NULL == newnode){perror("InsertposLinkList malloc");return 1;}memcpy(&newnode->data, data, sizeof(DATATYPE));newnode->next = NULL;newnode->next = tmp->next;tmp->next = newnode;}list->clen++;return 0;
}int GetSizeLinkList(LinkList *list)
{return list->clen;
}LinkNode *FindLinkList(LinkList *list, char *name)
{LinkNode *tmp = list->head;while (tmp){if (0 == strcmp(tmp->data.name, name)){return tmp;}// tmp++;tmp = tmp->next;}return NULL;
}int DeleteLinkList(LinkList *list, char *name)
{if (IsEmptyLinkList(list)){fprintf(stderr, "DeleteLinkList empty list\n");return 1;}LinkNode *tmp = list->head;//删除的是第一个节点if (0 == strcmp(tmp->data.name, name)){list->head = list->head->next;free(tmp);list->clen--;}//非第一个节点else{while (tmp->next){if (0 == strcmp(tmp->next->data.name, name)){//标记待删除的节点LinkNode *del = tmp->next;//链表的指针跨过待删节点tmp->next = tmp->next->next;free(del);list->clen--;break;}tmp = tmp->next;}}return 0;
}int ModifyLinkList(LinkList *list, char *name, DATATYPE *data)
{LinkNode* tmp = FindLinkList(list, name);if(NULL == tmp){printf("modify error\n");return 1;}memcpy(&tmp->data,data,sizeof(DATATYPE));return 0;
}int DestroyLinkList(LinkList *list)
{LinkNode* tmp = list->head;//删除链表while(tmp){list->head = list->head->next;free(tmp);tmp = list->head;}// 释放链表表头free(list);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93761.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust Web 全栈开发(十三):发布

Rust Web 全栈开发&#xff08;十三&#xff09;&#xff1a;发布Rust Web 全栈开发&#xff08;十三&#xff09;&#xff1a;发布发布 teacher_service发布 svr测试 teacher_service 和 svr发布 wasm-client测试 wasm-clientRust Web 全栈开发&#xff08;十三&#xff09;&a…

Zephyr 中的 bt_le_per_adv_set_data 函数的介绍和应用方法

目录 概述 1 函数接口介绍 1.1 函数原型 1.2 功能详解 2 使用方法 2.1 创建流程 2.1.1 创建扩展广播实例 2.1.2 设置周期性广播数据 2.1.3 配置周期性广播参数 2.1.4 启动广播 2.2 主流程函数 2.3 关键配置 (prj.conf) 3 高级用法 3.1 大数据分片传输 3.2 动态数…

Ansible 角色管理指南

Ansible 角色管理指南 实验环境设置 以下命令用于准备实验环境&#xff0c;创建一个工作目录并配置基本的Ansible设置&#xff1a; # 创建web工作目录并进入 [azurewhiskycontroller ~]$ mkdir web && cd web# 创建Ansible配置文件 [azurewhiskycontroller web]$ cat &…

【补充】数据库中有关系统编码和校验规则的简述

一、字符集和校验规则&#xfeff;1.创建数据库案例数据库创建方法&#xff1a;使用CREATE DATABASE语句创建数据库字符集指定方式&#xff1a;通过CHARACTER SETutf8指定数据库编码格式默认配置说明&#xff1a;未指定字符集时默认使用utf8和utf8_general_ci配置文件位置&…

计算机网络 HTTP1.1、HTTP2、HTTP3 的核心对比及性能分析

以下是 HTTP/1.1、HTTP/2、HTTP/3 的核心对比及性能分析&#xff0c;重点关注 HTTP/3 的性能优势&#xff1a;&#x1f4ca; HTTP 协议演进对比表特性HTTP/1.1 (1997)HTTP/2 (2015)HTTP/3 (2022)传输层协议TCPTCPQUIC (基于 UDP)连接建立TCP 三次握手 TLS 握手 (高延迟)同 HTT…

【计算机视觉与深度学习实战】07基于Hough变换的答题卡识别技术:原理、实现与生物识别拓展(有完整代码)

1. 引言 在人工智能和计算机视觉快速发展的今天,自动化图像识别技术已经渗透到社会生活的各个角落。从工业质检到医学影像分析,从自动驾驶到教育评估,计算机视觉技术正在重塑我们与数字世界的交互方式。在这众多应用中,答题卡识别技术作为教育信息化的重要组成部分,承载着…

《WASM驱动本地PDF与Excel预览组件的深度实践》

WASM为何能成为本地文件解析的核心载体,首先需要跳出“前端只能处理轻量任务”的固有认知,从“性能与兼容性平衡”的角度切入。PDF与Excel这类文件格式的解析,本质是对复杂二进制数据的解码与重构——PDF包含嵌套的对象结构、字体渲染规则和矢量图形描述,Excel则涉及单元格…

Oracle Free 实例重装系统操作指南

之前申请了两台 x86 架构的 Oracle 机器&#xff0c;偶尔用来部署开源项目测试&#xff0c;有一台在测试 SSH 相关功能时 “变砖”&#xff0c;网上看重装系统发现很繁琐就没去打理&#xff0c;近期又想到这个机器&#xff0c;发现去年就有了官方重装方法&#xff0c;简单配置下…

Linux 基础指令与权限管理

一、Linux 操作系统概述1.1 操作系统的核心价值操作系统的本质是 "使计算机更好用"。它作为用户与硬件之间的中间层&#xff0c;负责内存管理、进程调度、文件系统管理和设备驱动管理等核心功能&#xff0c;让用户无需直接操作硬件即可完成复杂任务。在服务器领域&am…

深度学习-167-MCP技术之工具函数的设计及注册到MCP服务器的两种方式

文章目录 1 MCP协议概述 1.1 MCP的原理 1.2 两种主要的通信模式 2 工具函数的设计与实现 2.1 tools.py(工具函数) 2.2 工具函数的设计原则 2.3 工具函数的测试 3 MCP服务器的构建与配置 3.1 安装mcp库 3.2 main.py(MCP服务器) 3.2.1 方式一(add_tool方法) 3.2.2 方式二(@mcp.to…

哈希:两数之和

问题描述&#xff1a;在一个整数数组中&#xff0c;找到两数之和为target的两个值&#xff0c;返回找到的两个值的下标。 nums[3,3] target6 返回&#xff1a;[0,1] 说明&#xff1a;返回结果&#xff0c;索引无顺序要求&#xff1b;有唯一的答案&#xff1b;不能使用两次相…

PHP反序列化的CTF题目环境和做题复现第5集_POP链构造4

1 题目 下载yii2.0.37版本,https://github.com/yiisoft/yii2/releases/tag/2.0.37 放在phpstudy的www目录下或ubuntu的/var/www/html的目录下。 3 EXP <?php namespace PHPUnit\Framework\MockObject{class MockTrait {private $classCode = "system(whoami);php…

广东省省考备考(第八十一天8.19)——资料分析、数量(强化训练)

资料分析 错题解析解析解析解析解析今日题目正确率&#xff1a;67% 数量&#xff1a;数学运算解析解析解析标记题解析今日题目正确率&#xff1a;80%

决策树剪枝及数据处理

一、核心决策树算法&#xff08;3 类主流算法&#xff09;1. ID3 算法&#xff1a;用 “信息增益” 选属性ID3 是决策树的 “开山鼻祖” 之一&#xff0c;它的核心逻辑是 “选能让数据最‘纯’的属性”—— 这里的 “纯” 用 “信息增益” 衡量。简单说&#xff0c;“信息增益”…

Ansible 角色管理

环境准备# 创建一个叫web的文件夹并进入&#xff08;相当于新建一个工作目录&#xff09;[lykcontroller ~]$ mkdir web && cd web​# 创建Ansible的配置文件ansible.cfg[lykcontroller web]$ cat > ansible.cfg <<EOF[defaults]remote_user lykinventory .…

Java面试准备指南!

现在已经是8月中旬了&#xff0c;秋招马上就要开始了&#xff0c;不知道大家准备好了吗&#xff1f;现阶段找工作真的是千军万马过独木桥&#xff0c;没有真本事&#xff0c;真的会被淘汰掉&#xff0c;现实就是如此的残酷&#xff01; 为了能够帮助到大家在秋招Java面试中脱颖…

Encoder-Decoder Model编码器-解码器模型

Encoder-Decoder编码器-解码器是一种深度学习模型&#xff0c;应用于图像处理、语音识别、自然语言处理等领域。主要由编码器和解码器两部分组成&#xff0c;这种结构能够处理序列到序列的任务。编码器-解码器模型具备独特的双阶段处理&#xff0c;先对输入信息进行编码&#x…

Python函数总结

目录 一、普通函数 1.1 函数的定义与调用 1.2 函数的说明文档 1.3 函数的参数 1.4 函数的返回值 二、函数的作用域和关键字 2.1 局部作用域 2.2 全局作用域 2.4 global关键字和nonlocal关键字的使用 三、函数的递归与嵌套 3.1 嵌套函数 3.2递归函数 四、函数名的应…

sqlite-gui:一款开源免费、功能强大的SQLite开发工具

sqlite-gui 是一个轻量级的 SQLite 编辑器&#xff0c;基于 C/mingw64/WinAPI 开发&#xff0c;支持 Windows 平台。 sqlite-gui 是一个免费开源的项目&#xff0c;代码托管在 GitHub&#xff1a; https://github.com/little-brother/sqlite-gui 功能特性 支持 SQL 语法高亮…

Ethan独立开发新品速递 | 2025-08-19

每日精选Product Hunt上最值得关注的独立产品&#xff0c;发现全球创新灵感&#xff0c;助力你的产品成长。 下面挑选出对独立开发者最有参考价值的 10 个项目&#xff0c;侧重开发工具、AI 工具、SaaS 和创业支持类产品&#xff0c;去除娱乐、小众垂直和大公司产品。每条保留原…