数据结构-线性表的单链式存储结构图解及C语言实现

news2024/9/24 10:25:49

概念

链式存储:结点在存储器中的位置是任意的,即逻辑相邻的数据元素在物理上不一定相邻

链式存储结构也称非顺序映像或链式映像

图解

链式存储结构中结点一般有两个部分组成,即数据域(data)和指针域,数据域是用于存放数据的,指针域是用来指向下一结点的地址的,其中头节点指向该链表的首元结点,表示该链表从这开始,尾结点的指针域是空的(NULL),当遇到空的指针域表示该链表到这个结点就已结束。

C语言实现

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

//定义链表结构体
typedef struct link{
	int data;
	struct link* next;
}Link;

//初始化链表(生成长度4的链表并存放1,2,3,4)
Link* initLink() {
	Link* head = NULL;		//创建头指针
	Link* a = (Link*)malloc(sizeof(Link));		//开辟一块内存空间给头结点
	a->data = NULL;
	a->next = NULL;
	head = a;		//头指针指向头结点
	for (int i = 1; i < 5; i++) {				//循环创建链表
		Link* n = (Link*)malloc(sizeof(Link));	//开辟新内存空间给结点
		n->data = i;
		n->next = NULL;
		a->next = n;			//将结点的next指向下一结点
		a = a->next;			
	}
	return head;		//返回链表首地址
}

//向链表中插入数据
void insertData(Link* p, int num, int data) {
	Link* temp = p;
	for (int i = 1; i < num; i++) {		//判断插入的位置是否有效
		temp = temp->next;
		if (temp == NULL) {
			printf("插入位置无效\n");
			return;
		}
	}
	Link* n = (Link*)malloc(sizeof(Link));		//创建新结点
	n->data = data;		//新结点的数据域赋值
	n->next = temp->next;		//新结点的指针域指向下一结点的地址
	temp->next = n;			//上一结点的指针域指向新结点
}

//向链表中删除数据
int delData(Link* p, int data) {
	Link* temp = p;
	Link* del = NULL;
	int flag = 0;
	while (temp->next) {
		if (temp->next->data == data) {
			flag = 1;
			break;
		}
		temp = temp->next;
	}
	if (flag == 0) {
		return -1;
	}else {
		del = temp->next;
		temp->next = temp->next->next;
		free(del);
		return 1;
	}
}
//打印链表元素
void displayLink(Link* p) {
	p = p->next;
	while (p) {
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
}
int main() {
	Link *p = initLink();
	printf("初始化链表为:");
	displayLink(p);
	printf("插入元素后的链表为:");
	insertData(p, 4, 6);	//在链表中的第二个位置插入一个6
	displayLink(p);
	printf("删除元素后的链表为:");
	delData(p, 6);	//删除链表中数据域为2的结点
	displayLink(p);
} 

由于作者水平有限,如有错误请广大读者批评指正!

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

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

相关文章

目标检测——VOC2007数据集

目标检测入门code 文件目录 下载数据集——在官网下载VOC2007数据集 下载训练数据集 TRAIN data 下载测试数据集 TEST data 解压数据集 解压——训练数据集&#xff0c;在服务器上&#xff0c;目录为VOCdevkit 部分文件目录 全部文件总目录 解压——测试数据集 &#xff08;…

Python画笔案例-061 绘制万花筒

1、绘制万花筒 通过 python 的turtle 库绘制 万花筒,如下图: 2、实现代码 绘制 万花筒,以下为实现代码: """万花筒.py本程序需要coloradd模块支持,安装方法:pip install coloradd技术支持微信scartch8,QQ:406273900""" import turtle from…

桌球计时计费系统计费方式有哪些 哪个好用 佳易王台球计时计费管理系统操作教程

一、前言 桌球计时计费系统计费方式有哪些 哪个好用 佳易王台球计时计费管理系统操作教程 1、佳易王桌球计时计费软件&#xff0c;可以多种单价计费方式&#xff0c;具体使用哪种计费方式可以根据自己的情况设置即可。 2、软件已内置数据库不需再安装&#xff0c;解压即可。 …

奇瑞汽车—经纬恒润 供应链技术共创交流日 成功举办

2024年9月12日&#xff0c;奇瑞汽车—经纬恒润技术交流日在安徽省芜湖市奇瑞总部成功举办。此次盛会标志着经纬恒润与奇瑞汽车再次携手&#xff0c;深入探索汽车智能化新技术的前沿趋势&#xff0c;共同开启面向未来的价值服务与产品新篇章。 面对全球汽车智能化浪潮与产业变革…

MovieLife 电影生活

MovieLife 电影生活 今天看到一个很有意思的项目&#xff1a;https://www.lampysecurity.com/post/the-infinite-audio-book “我有一个看似愚蠢的想法。通常&#xff0c;这类想法只是一闪而过&#xff0c;很少会付诸实践。但这次有所不同。假如你的生活是一部电影&#xff0c…

Cisco Secure Firewall Threat Defense Virtual 7.6.0 发布下载,新增功能概览

Cisco Secure Firewall Threat Defense Virtual 7.6.0 - 思科下一代防火墙虚拟设备 (FTDv) Firepower Threat Defense (FTD) Software for ESXi & KVM 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-firepower-7/&#xff0c;查看最新版。原创作品&#xff0c…

为什么三星、OPPO、红米都在用它?联发科12nm级射频芯片的深度剖析

小道消息 联发科和联电在12纳米制程技术方面有潜在的合作机会… 2024年初根据相关报道,联电和英特尔宣布12纳米制程工艺合作。此外,市场传闻称联发科可能会考虑将部分订单转投给英特尔,但也有机会成为联电12纳米制程的客户。 联发科在射频产品线涵盖多种工艺和应用领域。在…

软件测试面试八股文(含文档)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一般软件测试的面试分为三轮&#xff1a;笔试&#xff0c;HR面试&#xff0c;技术面试。 前两轮&#xff0c;根据不同企业&#xff0c;或有或无&#xff0c;但最…

建立分支提交代码

git分支 git branch 产看当前分支 git branch -a 查看所有分支 git checkout 分支名 切换分支 git checkout -b 分支名 建立分支&#xff08;仅仅是在本地建立了&#xff0c;并没有关联线上&#xff09; git push --set-upstream origin 分支名 把本地分支推到先线上 建立分支…

3、SRGAN

3、SRGAN SRGAN论文链接&#xff1a;SRGAN SRGAN&#xff08;超分辨率生成对抗网络&#xff09;是在2017年由Christian Ledig等人在论文《Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network》中提出的。该模型引入了基于GAN&#xff08;…

9.5HSV体系进行颜色分割

基本概念 inRange() 函数是 OpenCV 中用于图像处理的一个非常有用的函数&#xff0c;即从图像中提取出介于指定范围内的像素值。这个函数在图像处理中特别有用&#xff0c;比如颜色检测、背景去除等应用。它主要用于图像的阈值处理&#xff0c;但与其他阈值方法&#xff08;如…

AOT源码解析4.1-model主体解析

1 输入数据 VOS的数据集处理操作可见数据集操作&#xff0c;这里是进行数据集提取完毕后的操作。 图2&#xff1a;如图所示&#xff0c;使用datasets提取出数据之后&#xff0c;在模型训练阶段对数据做图中操作。即&#xff1a;将batch_size大小的ref_imgs、prev_imgs&#x…

【JavaEE】——线程“饿死问题” wait notify

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 引子&#xff1a; 一&#xff1a;情景引入 二&#xff1a;线程饿死问题 1&#xff1a;线程饿死 2&a…

24 C 语言常用的字符串处理函数详解:strlen、strcat、strcpy、strcmp、strchr、strrchr、strstr、strtok

目录 1 strlen 1.1 函数原型 1.2 功能说明 1.3 案例演示 1.4 注意事项 2 strcat 2.1 函数原型 2.2 功能说明 2.3 案例演示 2.4 注意事项 3 strcpy 3.1 函数原型 3.2 功能说明 3.3 案例演示 3.4 注意事项 4 strcmp 4.1 函数原型 4.2 功能说明 4.3 案例演示 …

在 VS Code 中调试 C++ 项目

选择调试器环境 从预定义的调试配置中进行选择&#xff0c;生成预定义launch.json文件,可能是空模板 {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft…

Qwen2-VL全面解读!阿里开源多模态视觉语言模型,多项超越GPT4o与Claude 3.5-Sonnet

文章链接&#xff1a;https://arxiv.org/pdf/2409.12191 Github链接&#xff1a;https://github.com/QwenLM/Qwen2-VL 亮点直击 本文介绍了Qwen系列大型视觉语言模型的最新成员&#xff1a;Qwen2-VL系列&#xff0c;该系列包括三款开放权重模型&#xff0c;总参数量分别为20亿、…

QString 构建SQL语句可以往数据库中添加“\n“字符串

网上找了很多案例关于怎么样能在Mysql数据库中插入带\n的字符串&#xff0c;如图&#xff1a; 本以为很容易的一件事&#xff0c;没想到思考了半天&#xff0c;在这里记录一下&#xff0c;以为\n是转义字符的原因&#xff0c;所以并不是我想的那么简单。网上有用R&#xff08;“…

力扣 困难 154.寻找旋转排序数组中的最小值 II

文章目录 题目介绍题解 题目介绍 题解 题源&#xff1a; 153.寻找旋转排序数组中的最小值 在此基础上&#xff0c;进行二分之前&#xff0c;单独处理一下左指针和最后一个数相同的情况就好了。 class Solution {public int findMin(int[] nums) {int left 0, right nums.le…

使用豆包Marscode 创建了一个”天气预报“小应用

以下是「豆包MarsCode 体验官」优秀文章&#xff0c;作者一拳干爆显示器。 前言 本文介绍了我第一次使用我在MarsCode IDE制作了一款天气预报的应用 其中在正文的头部以及结语部分发表了我在MarsCode编程中的体验情况&#xff0c;而正文的中间主要是我项目制作的细节步骤 豆…

【自动驾驶】基于车辆几何模型的横向控制算法 | Pure Pursuit 纯跟踪算法详解与编程实现

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…