软件开发中常用数据结构介绍:C语言链表

news2024/11/25 1:08:16

工作之余来写写C语言相关知识,以免忘记。今天就来聊聊C语言链表,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。

学习过程中如有任何疑问,可底下评论!

如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持!

提起链表,相信大家都很熟悉,无非就是数据域和指针域的相关操作,这里不多说,直接上代码;

#include <stdio.h>
#include <stdlib.h>

/******************链表结构体变量定义******************/
typedef struct Node {
	int data;
	struct Node* next;
}node;

/******************函数声明******************/
node* creatList();
node* creatNode(int data);
void insertNodeByHead(node* headNode, int data);
void insertNodeByBack(node* headNode, int data);
void deleteNode(node* headNode, int data);
void printList(node* headNode);

int main() {
	node* list = creatList();
	//insertNodeByHead(list, 1);
	//insertNodeByHead(list, 2);
	//insertNodeByHead(list, 3);

	insertNodeByBack(list, 1);
	insertNodeByBack(list, 2);
	insertNodeByBack(list, 3);

	deleteNode(list, 10);

	printList(list);
	return 0;
}

/******************函数定义******************/
/* 函数名:creatList
*  参数:  /
*  功能:  创建链表
*  返回值:node*
*/
node* creatList() {
	node* headNode = (node*)malloc(sizeof(node));
	headNode->next = NULL;

	return headNode;
}

/* 函数名:creatNode
*  参数:  data
*  功能:  创建链表节点
*  返回值:node*
*/
node* creatNode(int data) {
	node* newNode = (node*)malloc(sizeof(node));
	newNode->data = data;
	newNode->next = NULL;

	return newNode;
}

/* 函数名:insertNodeByHead
*  参数:  headNode,data
*  功能:  从链表头部插入节点
*  返回值:void
*/
void insertNodeByHead(node* headNode, int data) {
	node* newNode = creatNode(data);

	newNode->next = headNode->next;
	headNode->next = newNode;
}

/* 函数名:insertNodeByBack
*  参数:  headNode,data
*  功能:  从链表尾部插入节点
*  返回值:void
*/
void insertNodeByBack(node* headNode, int data) {
	node* newNode = creatNode(data);

	while (headNode->next) {
		headNode = headNode->next;
	}
	newNode->next = NULL;
	headNode->next = newNode;
}

/* 函数名:deleteNode
*  参数:  headNode,data
*  功能:  删除链表中的节点
*  返回值:void
*/
void deleteNode(node* headNode, int data) {
	node* posNode = headNode->next;
	node* posNodeFront = headNode;

	if (posNode == NULL) {
		printf("链表为空");
	}
	else {
		while (posNode->data != data) {
			posNode = posNode->next;
			posNodeFront = posNodeFront->next;
			if (posNode == NULL) {
				printf("未找到可删除节点\n");
				return;
			}
		}
		posNodeFront->next = posNode->next;
		free(posNode);
	}
}

/* 函数名:printList
*  参数:  list
*  功能:  打印链表数据
*  返回值:void
*/
void printList(node* headNode) {
	node* pmove = headNode->next;

	while (pmove) {
		printf("%d ", pmove->data);
		pmove = pmove->next;
	}
}

上述代码是链表最简单的使用形式,其余复杂使用场合都可基于此代码进行添加;

感谢对本期内容不遗余力的学习,下期内容即将奉上,欢迎下次光临!

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

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

相关文章

干不完根本干不完,我也不想加班,快来围观时间管理大师

时间不够用&#xff0c;怎么办&#xff1f; 成功不靠加班。生产队的驴都不加班&#xff0c;你加什么班&#xff1f;到点就下班&#xff0c;该玩玩&#xff0c;该学习认真学&#xff0c;累了就睡觉。 你可以做任何事&#xff0c;但不必做所有事。 时间管理&#xff0c;不是管…

(十七)大数据实战——Hive的hiveserver2服务安装部署

前言 HiveServer2 是 Apache Hive 的一个服务器端组件&#xff0c;用于支持客户端与 Hive 进行交互和执行查询。HiveServer2服务的作用是提供jdbc/odbc接口&#xff0c;为用户提供远程访问Hive数据的功能。HiveServer2 允许多个客户端同时连接并与 Hive 交互。这些客户端可以通…

HOT91-不同路径

leetcode原题链接&#xff1a;不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;…

shell编程免交互

免交互 定义&#xff1a; 一键执行&#xff0c;无需人工干预&#xff0c;不需要人为控制&#xff0c;就可以完成的操作&#xff0c;继续自动化运维 免交互在linux中的运用&#xff1a; 对于Linux操作系统中&#xff0c;有许多操作都会触及到交互&#xff08;根据系统的指示做…

OpenCV项目开发实战--相机校准—并附实例Python/C++代码实现

介绍 相机标定是计算机视觉中的一项基本任务在 3D 重建、对象跟踪、增强现实和图像分析等各种应用中至关重要。准确的校准通过校正失真和估计相机的内在和外在参数来确保精确的测量和可靠的分析。这本综合指南深入探讨了相机校准的原理、技术和算法。我们探索获取相机的内在和…

在 Linux 虚拟机上使用 Azure 自定义脚本扩展版本

参考 azure创建虚拟机,创建虚拟机注意入站端口规则开放80端口、 2.转到资源&#xff0c;点击扩展应用程序&#xff0c;创建存储账户&#xff0c;创建容器&#xff0c;上传文件&#xff0c;选择文件&#xff0c;会自动执行部署。 apt-get update -y && apt-get insta…

电信流失用户画像

三大运营商电信、联通、移动&#xff0c;都想扩大自己的客户群体。据研究&#xff0c;获取新客户所需的成本远高于保留现有客户的成本。因此为了满足在激烈竞争中的优势&#xff0c;提前预测出用户是否会流失&#xff0c;采取保留措施成为一大挑战。本文和你一起探索电信流失客…

挤牙膏的iPhone15真不值,实在太敷衍,看完基本没了购买欲望

随着苹果大概会如往年那样在9月13日发布iPhone15&#xff0c;目前iPhone15四款手机的消息已经基本剧透&#xff0c;没啥秘密可言&#xff0c;从透露的消息可以看出低配的iPhone15实在太鸡肋&#xff0c;不值得消费者购买。 据悉iPhone15和iPhone15 plus将采用灵动岛设计&#x…

systrace: 系统级跟踪工具的解析

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、获取systrace文件3.1 通过python命令获取3.1.…

HCIP学习-ospf3

前置内容 HICA学习--ospf动态路由协议_板栗妖怪的博客-CSDN博客 HCIA学习--ospf配置_板栗妖怪的博客-CSDN博客 HCIP学习--ospf1_板栗妖怪的博客-CSDN博客 HICP学习--ospf2_板栗妖怪的博客-CSDN博客 5类、7类路由类型 概念 5、7类的路由会纯在一个类型1和类型2的区别 设备…

Jlink RTT工具打印日志

背景 平常调试代码中使用串口打印log&#xff0c;往往需要接出串口引脚&#xff0c;比较麻烦&#xff0c;并且串口打印速度较慢&#xff0c;串口的中断可能会影响代码的执行效率。 SEGGER RTT支持使用J-link调试器输出来自目标微控制器的信息&#xff0c;也可以接收输入&#…

Python 潮流周刊#15:如何分析异步任务的性能?

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。标题取自其中一则分享&#xff0c;不代表全部内容都是该主题&#xff0c;特此声明。 本周刊精心筛选国内外的…

dubbo3-高级特性

dubbo-admin 1.dubbo-admin管理平台&#xff0c;是图形化的管理页面 2.从注册中心中获取所有的提供者/消费者进行配置管理 3.路由规则&#xff0c;动态配置&#xff0c;服务降级&#xff0c;访问控制&#xff0c;权重调整&#xff0c;负载均衡等管理功能 dubbo-admin是一个前…

一文读懂!一年耗能堪比2个三峡电站的大数据中心,背后竟隐藏着这些秘密......

全国大数据中心1年的能耗规模相当于2个三峡电站一整年的发电量&#xff0c;这是为什么&#xff1f; 大数据中心每耗费1度电&#xff0c;只有一半用在了“计算”上面&#xff0c;其他的都应用在散热、照明等方面到底是怎么回事&#xff1f; 为什么说在算力上每投入1元&#xff0…

【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(下)

基于 JenkinsDockerGit 的简单 CI 流程实践&#xff08;下&#xff09; 5.环境测试 5.1 远程 clone 代码测试 clone 云主机 docker-git 上的仓库 tomcat-java-demo.git&#xff1a; [rootdocker-jenkins ~]# yum install git vim wget -y [rootdocker-jenkins ~]# git confi…

【数据结构】-- 栈和队列

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;数据结构 &#x1f4a8;吾生也有涯&#xff0c;而知也无涯 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 前言一、栈&#x1f4d9;1.1 栈…

windows程序基础

一、windows程序基础 1. Windows程序的特点 1.用户界面统一、友好 2.支持多任务:允许用户同时运行多个应用程序(窗口) 3.独立于设备的图形操作 使用图形设备接口( GDI, Graphics Device Interface )屏蔽了不同硬件设备的差异&#xff0c;提供了设备无关的图形输出能力…

“新基建”重新定义大数据安全

摘要&#xff1a;数字信息经济发展时代,大数据已逐渐成为最新和最重要的生产要素。国家大力支持推进“新基建”发展战略,由此带来的大数据安全挑战俨然愈发严峻。“新基建”重新定义了大数据安全&#xff0c;面对层出不穷的网络安全事件,需要构建主动安全防御体系。 关键词:新…

前端开发环境搭建,换新电脑前端开发的步骤,node环境配置

一、下载安装nodeJS 1、下载地址官方网址 NodeJs 2、下载完成后&#xff0c;双击“node-v11.5.0-x64.msi”&#xff0c;开始安装Node.js&#xff0c;一路next&#xff0c;注意&#xff1a;安装目录看自己需求&#xff0c;本人安装在D:\nodejs目录下 3、测试 键盘按下【winR…

Kotlin读写分离CopyOnWriteArrayList

Kotlin读写分离CopyOnWriteArrayList 基于读写分离思想Copy-On-Write(COW)设计的线程安全ArrayList变体&#xff0c;读读共享、写写互斥、读写互斥、写读互斥。读时直接读&#xff0c;不用加锁同步&#xff0c;线程安全。写/删/修改数据时复制一个副本&#xff0c;在新的List副…