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

链表-线性表的链式表示

链表-线性表的链式表示

L
xxx / 0x9d15e0
data1 / 0x9d17a0
data2 / 0x9d1660
data3 / NULL

头插法

#include <stdio.h>
#include <stdlib.h>typedef int ElemType;
typedef struct LNode {// 存储数据ElemType data;// 后继节点地址LNode *next;
} LNode, *LinkList;/** 头插法创建链表*/
void list_head_insert(LinkList &L) {// 创建头节点// L指向头节点L = (LinkList) malloc(sizeof(LNode));L->next = NULL;// 创建新节点指针LinkList new_node;ElemType data;// 读取数据scanf("%d", &data);while (999 != data) {// 创建新节点// 指针指向新节点new_node = (LinkList) malloc(sizeof(LNode));// 存入数据值new_node->data = data;// 新节点的next指向链表的第一个元素(不包含头节点)new_node->next = L->next;// 新节点作为第一个节点L->next = new_node;// 再次读取数据scanf("%d", &data);}
}/** 打印链表*/
void print_list(LinkList L) {// L指向第一个节点L = L->next;while (NULL != L) {printf("%3d", L->data);// 指向下一个节点L = L->next;}
}int main() {// 一、创建链表头指针LinkList L;// 二、头插法创建链表list_head_insert(L);// 三、打印链表print_list(L);return 0;
}

尾插法

#include <stdio.h>
#include <stdlib.h>typedef int ElemType;typedef struct LNode {// 存储数据ElemType data;// 后继节点地址LNode *next;
} LNode, *LinkList;/** 尾插法创建链表*/
void list_tail_insert(LinkList &L) {// 创建头节点// L指向头节点L = (LinkList) malloc(sizeof(LNode));L->next = NULL;// 创建新节点指针变量s 尾节点指针变量rLinkList new_node, r;r = L;ElemType data;scanf("%d", &data);while (999 != data) {// 创建新节点new_node = (LinkList) malloc(sizeof(LNode));// 存入数据值new_node->data = data;// 尾节点的next指向新节点r->next = new_node;// 新节点变成尾节点r = new_node;// 输入数据scanf("%d", &data);}// 尾节点的next指向NULLr->next = NULL;
}/** 打印链表*/
void print_list(LinkList L) {// L指向第一个节点L = L->next;while (NULL != L) {printf("%3d", L->data);// 指向下一个节点L = L->next;}printf("\n");
}/** 通过位置查找元素*/
LinkList search_elem_by_location(LinkList L, int pos) {// 判断位置是否合法if (0 > pos) {return NULL;}int i = 0;while (L && i < pos) {L = L->next;i++;}return L;
}/** 通过值查找元素*/
LinkList search_elem_by_value(LinkList L, ElemType data) {while (L) {if (data == L->data) {return L;}// 未匹配时 L指向下一个节点L = L->next;}return L;
}/** 链表插入元素* 此处不改变头指针L因此不需要写引用* @param*/
bool list_insert_elememt(LinkList L, int pos, ElemType data) {// 获取第pos-1个元素LinkList p = search_elem_by_location(L, pos - 1);// 判断位置是否合法if (NULL == p) {return false;}// 创建新节点LinkList q = (LinkList) malloc(sizeof(LNode));q->data = data;q->next = p->next;p->next = q;return true;
}/** 按位置删除元素* 此处不改变头指针L因此不需要写引用*/
bool list_delete(LinkList L, int pos) {// 查询第pos-1个位置LinkList p = search_elem_by_location(L, pos - 1);if (NULL == p) {return false;}// 被删除的元素LinkList q;q = p->next;// 如果要删除的位置 超过了链表长度if (NULL == q) {return false;}// 断链p->next = q ->next;// 释放节点空间free(q);return true;
}int main() {// 一、创建链表头指针LinkList L;// 二、尾插法创建链表list_tail_insert(L);// 三、打印链表print_list(L);// 四、查询操作LinkList search_elem = search_elem_by_location(L, 2);// 按位置查找元素if (search_elem) {printf("search elem by location success\n");printf("element data = %d\n", search_elem->data);} else {printf("search elem by location faild\n");}// 按值查询元素search_elem = search_elem_by_value(L, 99);if (search_elem) {printf("search elem by value success\n");printf("element data = %d\n", search_elem->data);} else {printf("search elem by value faild\n");}// 五、插入操作// 新节点插入在第i个位置bool ret = list_insert_elememt(L, 2, 19);if (ret) {printf("insert success\n");} else {printf("insert fail\n");}print_list(L);// 六、删除操作ret = list_delete(L, 9);if (ret) {printf("delete success\n");} else {printf("delete failed\n");}print_list(L);return 0;
}

相关文章:

链表-线性表的链式表示

链表-线性表的链式表示 #mermaid-svg-ozpXrKnNCyYdqHvN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ozpXrKnNCyYdqHvN .error-icon{fill:#552222;}#mermaid-svg-ozpXrKnNCyYdqHvN .error-text{fill:#552222;stro…...

GNU/Linux - 时区设置

CST China Standard Time 北京时间/中国标准时间 在时区划分上&#xff0c;属东八区&#xff0c;比协调世界时早 8 小时&#xff0c;记为 UTC8 GMT Greenwich Mean Time 格林威治标准时间 是指位于英国伦敦郊区的格林尼治天文台的标准时间&#xff0c;因为本初子午线被定…...

红队攻防渗透技术实战流程:云安全之云原生安全:内核漏洞和版本漏洞

红队云攻防实战 1. 云原生安全 -Docker安全-容器逃逸-版本漏洞1.1 容器逃逸-版本漏洞-runC容器逃逸1.2 实战案例-版本漏洞-runC容器逃逸1.3 容器逃逸-版本漏洞-containerd逃逸1.4 实战案例-版本漏洞-containerd逃逸1.5 Docker安全-容器逃逸-CDK自动化1.6 Docker安全-容器逃逸-c…...

spring状态机实战

一、什么是状态机 状态机是有限状态自动机的简称&#xff0c;是现实事物运行规则抽象而成的一个数学模型&#xff0c;是一种概念性机器&#xff0c;它能采取某种操作来响应一个外部事件。这种操作不仅能取决于接收到的事件&#xff0c;还能取决于各个事件的相对发生顺序。状态…...

Ubuntu系统上安装NVIDIA驱动【笔记】

Ubuntu上安装NVIDIA驱动&#xff0c;您可以按照以下步骤操作&#xff1a; 首先&#xff0c;您需要配置软件源&#xff08;根据情况配置&#xff0c;否则影响更新和下载速度&#xff09;。 接下来&#xff0c;您可以按照上一条回答中的步骤来安装新的NVIDIA驱动。首先&#xff…...

生成式AI导论2024-李宏毅

生成式AI导论2024-李宏毅 第0讲&#xff1a; 课程说明第1讲&#xff1a;生成式AI是什么第2講&#xff1a;今日的生成式人工智慧厲害在哪裡&#xff1f;從「工具」變為「工具人」 第0讲&#xff1a; 课程说明 生成式AI的入门课程 第1讲&#xff1a;生成式AI是什么 生成式人…...

跨平台之用VisualStudio开发APK嵌入OpenCV(三)

本篇将包含以下内容&#xff1a; 1.使用 Visual Studio 2019 开发一个 Android 的 App 2.导入前篇 C 编译好的 so 动态库 3.一些入门必须的其它设置 作为入门&#xff0c;我们直接使用真机进行调试&#xff0c;一方面运行速度远高于模拟器&#xff0c;另一方面模拟器使用的…...

渗透测试框架之CobaltStrike,Metasploit域名上线隐藏IP

概述 为什么要隐藏IP 在拿下了目标机之后&#xff0c;目标机在内网里面&#xff0c;使用msf或者CS时&#xff0c;用自己的VPS做服务器的话&#xff0c;导致很容易被溯源。 域名上线原理 当我们访问域名时会经过域名解析 域名解析就是域名到IP地址的转换过程&#xff0c;那么…...

vue.js对接海康威视摄像头web开发包

一、登录海康开放平台下载web开发包&#xff0c;下载需要先登录海康账号&#xff0c;没有的需先注册一个。 这里的appkey、ip、port、secret 和cameraIndexCodeasd是自己去申请的 appkey: "****", ip: "****", port: **, secret: "****", //必填…...

Selenium中使用的三种等待

文章目录 1.前言2.在selenium中常见的等待操作一般有3个 1.前言 在使用selenium时很多元素在使用的时候都需要加载&#xff0c;如果不等待加载结束直接使用就会报错&#xff0c;功能不能继续。一般解决的办法就是使用等待操作。 2.在selenium中常见的等待操作一般有3个 slee…...

推荐一款媒体影音嗅探神器—Chrome扩展插件(猫抓cat-catch)

目录 1.1、前言1.2、下载地址1.3、github Releases 版本说明1.4、安装步骤1.5、猫抓插件常规设置1.5.1、设置抓取文件的类型1.5.2、设置抓取文件的后缀名 1.1、前言 我们在日常上网的过程中&#xff0c;很多音频、视频网站下载资源都非常不方便&#xff0c;要么需要安装客户端&…...

LLaMA-Factory 微调训练

LLaMA-Factory 微调训练 该框架功能&#xff0c;标注-微调-导出-合并-部署&#xff0c;一整条流程都有&#xff0c;而且训练时消耗的gpu算力也会小一些 一&#xff0c;安装&#xff08;推荐在linux中训练&#xff0c;win可以用wsldocker&#xff09; git clone https://githu…...

阿里云ECS服务器怎么设置时区

在自己部署在阿里云服务器上的应用中&#xff0c;控制台打印的日志时间和本地不一致&#xff0c;于是决定修改阿里云服务器的时区为Asia/Shanghai。 具体操作如下&#xff1a; 第一步&#xff1a;连接服务器 通过finalshell等连接工具通过公网IP连接到服务器。 第二步&#…...

【698协议】帧校验算法

698协议&#xff0c;帧校验算法 帧格式 帧校验范围 校验算法 #include "fcs16.h" /* * u16 represents an unsigned 16-bit number. Adjust the typedef for * your hardware. * Drew D. Perkins at Carnegie Mellon University. * Code liberally borrowed from M…...

FileZilla“服务器发回了不可路由的地址,使用服务器地址代替

问题&#xff1a;在宝塔创建的FTP无法使用&#xff0c;提示“服务器回应不可路由的地址。使用服务器地址代替 第一种解决办法&#xff1a;由于宝塔把FTP被动模式端口范围设置成了39000-40000&#xff0c;所以只需要把阿里云服务器上相应的端口范围开放即可。 第二种解决办法&am…...

【路径规划】基于遗传算法GA实现最短距离 多起点多终点多旅行商问题求解附Matlab代码

基于遗传算法GA实现最短距离 多起点多终点多旅行商问题求解 研究背景:研究步骤:研究方法和技术路线:代码研究背景: 多起点多终点多旅行商问题是旅行商问题(TSP)的一个扩展,该问题要求确定多个旅行商从各自的起点出发,分别经过一系列目标点最终回到各自的终点,使得总路…...

计算机毕业设计 | springboot+vue房屋租赁管理系统(附源码)

1&#xff0c;绪论 1.1 课题来源 随着社会的不断发展以及大家生活水平的提高&#xff0c;越来越多的年轻人选择在大城市发展。在大城市发展就意味着要在外面有一处安身的地方。在租房的过程中&#xff0c;大家也面临着各种各样的问题&#xff0c;比如需要费时费力去现场看房&…...

重大活动网络安全保障建设及运营指南

在当今高度数字化的社会中&#xff0c;各类重大活动如会议、展览、赛事及庆典等正面临着日益复杂和严峻的网络安全威胁。这些威胁不限于网络入侵或数据泄露&#xff0c;更涉及到对基础设施、关键信息系统和公众舆论的复杂攻击&#xff0c;需要国际社会的密切合作和长期关注。因…...

基于信号分解方法的机械故障诊断方法存在的问题

一方面&#xff0c;由于结构共振、测试噪声的干扰&#xff0c;为了确保分解精度&#xff0c;需要给定准确的参数初值(例如&#xff0c;瞬时频率)。研究人员通常认为零部件特征频率与通过传动比和驱动转速计算的理论值基本吻合&#xff0c;并基于理论值设置参数初值。事实上&…...

faster_whisper语音识别

faster_whisper语音识别 检测可用设备&#xff1a;list_available_devices()函数 我这边usb摄像头带麦克风的&#xff0c;所以 DEV_index 8 1 使用 pyaudio 打开音频设备 2 从音频设备读取数据&#xff0c;传递给 faster_whisper 识别 按键 r 录制 s 停止 q退出 test.py #…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...