数据结构-链式存储

2023-10-27

数据结构

一.数据结构的定义:

一组用来保存一种或者多种特定关系的数据集合。

二.数据与数据之间的关系:

<1>数据的逻辑结构(数据元素与元素之间的关系):
集合:关系平等
线性结构:元素之间一对一的关系(表,队列,栈...)
树形结构:元素之间一对多的关系
图形结构:元素之间多对多的关系(网状结构)
<2>数据的物理结构(数据的逻辑结构在计算机内存中的存储形式):
顺序存储:采用一段连续的内存空间保存元素
链式存储:采用一组非连续的内存空间保存元素
索引存储:通过关键字构建索引表,通过索引表找到数据存储的位置
散列存储:将数据元素的存储位置与关键码之间建立确定的对应关系从而实现查找的存储方式

链式存储:

链表:

//以下函数中交互的协议
/*存储数据的类型*/
typedef int DataType;
/*节点类型*/
typedef struct node
{	
	DataType Data;		//数据域
	struct node * pNext;	//指针域
}LinkNode;
/*标签类型*/
typedef struct list
{
	LinkNode * pHead;	//头节点指针
	int clen;		//节点个数
}LinkList;

(1).创建链表

LinkList * creatLinkList()
{
	LinkList * pList = malloc(sizeof(LinkList))
	if(NULL == pList)
	{
		perror("fail to malloc");
		return NULL;
	}
	pList->pHead = NULL;
	pList->clen = 0;
	return pList;
}

(2).往链表里插入节点
插入节点可分为头插,尾插和指定位置插入,以下举例为头插

int insertHeadLinkList(LinkList * pList,DataType Data)//pList为链表头,Data为要存入的数据
{
	LinkNode *pInsertNode = malloc(sizeof(LinkNode));
	if(NULL == pInsertNode)
	{
		perror("fail to malloc");
		return -1;
	}
	pInsertNode->Data = Data;
	pInsertNode->pNext = pList->pHead;
	pList->pHead = pInsertNode;
	pList->clen++;
	return 0;
}

(3).删除链表的节点
删除节点可分为头删,尾删和指定删除,以下举例为头删

int deleteHeadLinkList(LinkList * pList)
{
	if(pList->pHead == NULL)
	{
		return 0;
	}
	LinkNode * pTmpNode = pList->pHead;
	pList->pHead = pTmpNode->pNext;
	free(pTmpNode);
	pList->clen--;
	return 0;
}

(4).查找链表的某个节点

LinkNode *findNodeLinkList(LinkList * pList,DataType data)//pList链表头,data查找节点的数据
{
	LinkNode * pTmpNode = pList->pHead;
	while(pTmpNode != NULL)
	{
		if(pTmpNode -> Data == data)
		{
			return pTmpNode;
		}
		pTmpNode = pTmpNode->pNext;
	}
	return NULL;
} 

(5).销毁链表;

void destroyLinkList(LinkList **ppList)
{
	while((*ppList)->pHead != NULL)
	{
		deleteHeadLinkList(*ppList);//该函数为上面的头删函数
	}
	free(*ppList);
	*ppList = NULL;
	return;
}

注:若有疑问可在讨论区询问或者私信!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构-链式存储 的相关文章

随机推荐

  • Tomcat 8和10的安装和修改

    Tomcat10 jdk11没有jre目录了 tomcat安装后需要做一些修改 JAVA HOME usr local jdk11 JAVA BIN JAVA HOME bin export JAVA BIN JAVA HOME bin e
  • 全网最全系统学习爬虫教程,用爬虫进行数据分析(bs4,xpath,正则表达式)

    1 bs4解析基础 2 bs4案例 3 xpath解析基础 4 xpath解析案例 4k图片解析爬取 5 xpath解析案例 58二手房 6 xpath解析案例 爬取站长素材中免费简历模板 7 xpath解析案例 全国城市名称爬取 8 正则
  • jwt 非对称加密 密钥生成

    1 生成证书 有效期 100年 2 证书的名称 pubKey 3 证书生成需要的盐值 7018 z1 在java项目中使用rsa非得对称加密 只需要生成的 证书 pubKey jks以及生成的公钥 私钥一般用不到 如果加密和解密只需要公钥和
  • vs2017试用延长期已到_将Windows 7试用版从30天延长到120天

    vs2017试用延长期已到 Did you know that you can install Windows 7 without any license key and use it for 30 days What you might
  • STM32学习心得(二)点亮LED灯

    STM32学习心得 二 点亮LED灯 在创建好工程模板后 就可以开始真正进入STM32的学习 手下那当然是试着点亮一个LED灯 首先在USER目录下创建一个空文件夹 并命名为bsp led bsp的意思是板级支持包 即该代码仅支持这块板子
  • Git搭建个人博客

    Git搭建个人博客 很多人都有写博客的习惯 所以我这篇博客就讲解一下如何在git上搭建一个个人的博客 环境 搭建个人博客需要配置配置一下环境 这里我是使用win10来搭建的 因为像这种配置或者搭建东西 一般都是win系统比较麻烦 在mac和
  • Sqlilabs-16

    相较于第 15 关 单引号变成了双引号 括号 查列 uname admin and if ascii substr select group concat table name from information schema tables
  • bash: /root/.bashrc: 行 102: 语法错误: 未预期的文件结尾

    问题描述 解决方案 在添加内容的末尾加上fi
  • idea使用sonarlint插件

    JDH 邹老板 一 插件安装 由于是内网环境 根据自己安装的idea版本 去官网下载离线插件包进行离线安装 我的idea是IntelliJ IDEA 2020 2 3 安装包如下 二 sonarlint服务器配置 插件安装完成之后 在设置里
  • YaRN: Efficient Context Window Extension of Large Language Models

    本文是LLM系列文章 针对 YaRN Efficient Context Window Extension of Large Language Models 的翻译 YaRN 大型语言模型的有效上下文窗口扩展 摘要 1 引言 2 背景和相关
  • zookeeper版本选择与配置参数调优

    一 zookeeper 发布策略 Apache ZooKeeper 社区一次支持两个发布分支 stable和current ZooKeeper的稳定版本是 3 7 x 当前版本是 3 8 x 一旦发布新的次要版本 稳定版本预计将很快退役 大
  • 使用开散列实现对字典的查找插入删除(C++实现)

    一 需求分析 问题描述 实现对字典的查找 基本要求 在分块查找 AVL树 哈希查找 B树或者B 树查找中选择一种你认为最高效的动态查找方法对字典 单词 词性加释义 在内存中的动态查找结构或者在外存的字典文件的构造 查找 插入 删除 逻辑操作
  • JVM常见命令之JPS

    1 JPS Java Virtual Machine Process Status JDK1 5提供的显示当前所有进程pid的命令 2 jps q 只输出pid 3 jps l 输出应用程序main class 的完整package名或者应
  • Spring底层组件xxxAware家族

    搞懂xxxAware家族对理解Spring源码和提高代码能力也有帮助 Spring中常见xxxAware接口列举如下 ApplicationContextAware BeanNameAware EmbeddedValueResolverAw
  • 实时数仓实践以及架构

    前言 数据智能 Data Intelligence 有一个必须且基础的环节 就是数据仓库的建设 同时 数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务 从智能商业的角度来讲 数据的结果代表了用户的反馈 获取结果的及时性就显得尤为
  • IDEA在Debug模式下 对象转JSON

    如果文章对你有帮助欢迎 关注 点赞 收藏 一键三连 一起努力 IDEA在debug模式下面是不能直接复制被调试的Object为Json字符串的 但是在工作中经常会用到json入参 这里用两种方式实现这个操作 方便进行其他操作和工作交流 一
  • eds能谱图分析实例_EDS那些事儿

    什么是EDS 我们通常所说的EDS全称为能量色散X射线谱仪 简称能谱仪 可同时记录所有X射线谱 用以测量X射线强度与X射线能量的函数关系 是一种不损坏试样的快速微区成分分析方法 通过测量材料被激发的特征X射线能量进行元素的定性分析 测量特征
  • fake-useragent,python爬虫伪装请求头

    在编写爬虫进行网页数据的时候 大多数情况下 需要在请求是增加请求头 下面介绍一个python下非常好用的伪装请求头的库 fake useragent 具体使用说明如下 安装fake useragent库 pip install fake u
  • 复杂美区块链溯源系统架构

    从功能架构上 复杂美将区块链存证溯源系统按照功能划分为区块链核心层 接口层 运维管理层 溯源平台层和用户端层 1 区块链基础层 面向整个存证溯源平台提供基础信息服务 主要是为上层架构组件提供基础设施 保证上层服务可靠运行 源数据从IOT设备
  • 数据结构-链式存储

    数据结构 一 数据结构的定义 一组用来保存一种或者多种特定关系的数据集合 二 数据与数据之间的关系 lt 1 gt 数据的逻辑结构 数据元素与元素之间的关系 集合 关系平等 线性结构 元素之间一对一的关系 表 队列 栈 树形结构 元素之间一