数据结构代码归纳
线性表
线性表的顺序表示
定义与初始化
typedef struct SqList{ElemType data[MaxSize];//ElemType *data 开动态数组 int length;
}Sqlist;
void InitList(SqList &L){L.length=0;//若静态数组//若动态数组 //L.data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
}
插入操作
在顺序表的第i(1<=i<=L.length+1)个位置插入元素 ,data的下标范围是从0开始。
bool ListInsert(SqList &L, int i, ElemType m){if(i<1||i>L.length)return false;//i超出数组范围 if(L.length>=MaxSize)return false;//length超出最大长度for(int j=L.length; j>=i; j--){L.data[i]=L.data[i-1];//将第i个及以后元素往后移动} L.data[i-1]=m;L.length++;return true;
}
删除操作
bool ListInsert(SqList &L, int i, ElemType &m){if(i<1||i>L.length)return false;//i超出数组范围 m=L.data[i-1];for(int j=i; j<L.length; j++){L.data[j-1]=L.data[j];//删除之后数组往前移 }L.length--;return true;
}
线性表链式存储
链头指能通过指针访问到链表所有结点的位置,链尾的next指针为空
定义与初始化
typedef struct LNode{ElemType data;struct LNode *next;
}LNode, *LinkList;
//带头结点
bool InitList(LinkList &L){L=(LNode *)malloc(sizeof(LNode));//创建头结点 L->next=NULL;return true;
}
//不带头结点
bool InitList(LinkList &L){L=NULL;return true;
}
插入结点
//插入结点操作
bool ListInsert(LinkList &L, int i, ElemType m){LNode *p=L;int j=1;//找到第i个结点 ,j=1表示p在第一个元素 while(p!=NULL&&j<=i-1){p=p->next;j++;}if(p==NULL)return false;LNode *s=(LNode*)malloc(sizeof(LNode));s->data=m;s->next=p->next;p->next=s;return true;
}
删除结点
与插入节点类似
//删除结点
bool ListDelet(LinkList &L, int i, ElemType &m){LNode *p=L;int j=1;while(p!=NULL&&j<=i-1){p=p->next;j++;}if(p==NULL||p->next==NULL)return false;m=p->next->data;LNode *s=p->next;m=s->data;p->next=s->next;free(s);return true;
}
头插法建立单链表/链表逆置
//头插法/链表逆置
LinkList List_HeadInsert(LinkList &L){LNode *s;int x;L=(LNode*)malloc(sizeof(LNode));//带头结点的初始化 L->next=NULL;cin>>x;while(x!=99999){//每次添加结点必须新申请空间 s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=L->next;//L是头结点 L->next=s;cin>>x;}return L;
}
尾插法
设置一个指针指向链表尾巴,每次从尾巴插入,得到的链表是正序
双链表
//双链表定义初始化
typedef struct DLNode{ElemType data;DNode *prior, *next;
}DNode, *DLinkList;
bool InitDLinkList(DLinkList &L){L=(DNode *)malloc(sizeof(DNode));if(L==NULL)return false;//如果开空间失败,可有可无 L->next=NULL;//前后指针都设置为空L->prior=NULL;return true;
}
定义与初始化
//双链表定义初始化
typedef struct DNode{ElemType data;DNode *prior, *next;
}DNode, *DLinkList;
bool InitDLinkList(DLinkList &L){L=(DNode *)malloc(sizeof(DNode));if(L==NULL)return false;//如果开空间失败,可有可无 L->prior=NULL;L->next=NULL;return true;
}
p结点后插入s
//双链表插入操作
bool InsertDList(DNode *p, DNode *s){if(p==NULL||s==NULL)return false; s->next=p->next;if(p->next!=NULL){//如果p有后继结点 p->next->prior=s; }s->prior=p;p->next=s; return true;
}
循环单链表
定义
//循环单链表
typedef struct LNode{ElemType data;struct LNode *next;
}LNode, *LinkList;
//带头结点
bool InitList(LinkList &L){L=(LNode *)malloc(sizeof(LNode));//创建头结点 L->next=L;//把链尾结点next指针指向链头结点 return true;
}
判断为空条件:L->next==L
循环双链表
定义与初始化
typedef struct DNode{ElemType data;DNode *prior, *next;
}DNode, *DLinkList;
bool InitDLinkList(DLinkList &L){L=(DNode *)malloc(sizeof(DNode));if(L==NULL)return false;//如果开空间失败,可有可无 L->prior=L;//头结点的prior指向头结点 L->next=L;头结点的next指向头结点 return true;
}
删除结点
//可以无顾虑删除,不可能有空的结点
bool InsertDList(DNode *p, DNode *s){s->next=p->next;p->next->prior=s; s->prior=p;p->next=s; return true;
}

栈
定义以及基本操作
栈判断空是判断top==-1,满是top==MaxSize-1;
共享栈是一个数组空间分为两个栈,判断左边栈空:top1==-1,右边栈空:top2==MaxSize.判断栈满条件top1+1==top2
//栈
#define MaxSize 100
typedef struct{ElemType data[MaxSize];int top;//栈顶指针
}SqStack;
int main()
{SqStack s;s.top=-1;//初始化,栈顶指针为-1:判断栈是否为空 //进栈ElemType x;s.data[++s.top]=x; //出栈s.top--;//前提top!=-1; return 0;
}
队列
队列的顺序存储
//队列
typedef struct{ElemType data[MaxSize];int front , rear;
}SqQueue;
循环队列
以牺牲一个结点判断队满队空:
头指针指向队列第一个元素,尾指针为空,指向队尾指针的下一个元素,新加入结点的位置
队满条件:(Q.rear+1)%MaxSize==Q.front
队空条件:Q.rear==Q.front
队内元素个数:(Q.rear-Q.front+MaxSize)% MaxSize


初始化
void InitQueue(SqQueue &Q){Q.front=Q.rear=0;
}
入队
bool EnQueue(SqQueue &Q, ElemType m){if((Q.rear+1)%MaxSize==Q.front)return false;//判断是否队满 Q.data[Q.rear]=m;Q.rear=(Q.rear+1)%MaxSize;//尾指针加一要取模 return true;
}
出队
//出队
bool DeQueue(SqQueue &Q, ElemType &m){if(Q.front==Q.rear)return false;//队空m=Q.data[Q.front];Q.front=(Q.front+1)%MaxSize; return true;
}
队列的链式存储
定义
//链式存储定义
typedef struct LinkNode{ElemType data;struct LinkNode *next;
}LinkNode;
typedef struct {LinkNode *front, *rear;
}LinkQueue;
带头结点的链式存储,front指向不存储数据的头结点,rear指向队尾指针
入队
//入队
bool EnQueue(LinkQueue &Q, ElemType m){LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));p->data=m;p->next=NULL;Q.rear->next=p;Q.rear=p;
}
出队
//出队
bool DeQueue(LinkQueue &Q, ElemType &m){if(Q.front==Q.rear)return false;//空队LinkNode *p=Q.front->next;m=p->data;Q.front->next=p->next;//删除 if(p==Q.rear)Q.rear=Q.front;//如果只有一个结点,删除后为空 free(p);return true;
}
树与二叉树
二叉树的定义:
树的顺序存储
跟适合完全二叉树

一定要把结点编号与完全二叉树结合起来
树的链式存储:
typedef struct ThreadNode{Elemtype data;struct ThreadNode* lchild, *rchild; int ltag, rtag;//线索标记
}ThreaNode, *ThreadTree ;
二叉树遍历
二叉树三种遍历方式以及线索二叉树
相关文章:
数据结构代码归纳
线性表 线性表的顺序表示 定义与初始化 typedef struct SqList{ElemType data[MaxSize];//ElemType *data 开动态数组 int length; }Sqlist; void InitList(SqList &L){L.length0;//若静态数组//若动态数组 //L.data(ElemType*)malloc(sizeof(ElemType)*MaxSize); } …...
数仓技术hive与oracle对比(一)
准备 包括软硬件环境、数据、测试数据三方面的准备内容。 环境 虚拟机软件virtualbox7,同样的虚拟机配置:内存2G、cpu一核,物理主机同一台macbookpro(13-2020款),所以硬盘IO读写速度一致。 综上&#x…...
筑起厂区安全--叉车安全防护装置全解析
在繁忙的工业生产领域中,叉车作为搬运工,穿梭于仓储与生产线之间。然而,叉车的高效运作背后,也隐藏着诸多安全风险,尤其是在那些空间狭小、物流繁忙的环境中。为了降低这些潜在的危险,叉车安全防护装置便成…...
深入浅出云计算 ---笔记
这是博主工作闲时的一些日常学习记录,有些之前很熟悉的,但工作中不常用,慢慢就遗忘了,在这里记录,也是为了激励自己坚持复习,如果有能帮到你,那我将感到非常的荣幸~ 快速到达↓↓↓ IaaS篇>&…...
ARINC 标准全解析:航空电子领域多系列标准的核心内容、应用与重要意义
ARINC标准概述 ARINC标准是航空电子领域一系列重要的标准规范,由航空电子工程委员会(AEEC)编制,众多航空公司等参与支持。这些标准涵盖了从飞机设备安装、数据传输到航空电子设备功能等众多方面,确保航空电子系统的兼…...
SNMP 协议介绍
SNMP 协议详细介绍 SNMP(Simple Network Management Protocol,简单网络管理协议)是一个用于管理和监控计算机网络设备(如路由器、交换机、服务器等)的协议。它允许网络管理员通过网络查看和控制这些设备的状态、配置和性能。 SNMP 协议定义了网络设备如何与管理系统进行通…...
Python中的数据结构深入解析:从列表到字典的优化技巧
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! Python是一门以易用性和可读性著称的高级编程语言,其内置的数据结构为开发者提供了强大的工具,但了解其底层实现及性能优化策略却常被忽略。本文深入探讨Python中的核心数据结构,包括列表(list)、元组…...
如何利用Java爬虫获得商品类目
在当今数字化时代,数据已成为企业最宝贵的资产之一。获取和分析数据的能力对于任何希望在市场上保持竞争力的企业来说都是至关重要的。对于电子商务平台和市场研究公司而言,获取商品类目数据尤为重要,因为这些数据可以帮助他们更好地理解市场…...
力扣面试题 32 - 检查平衡性 C语言解法
题目: 实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7]3/ \9 20/ \15 7 返回 true 。 …...
【机器学习】机器学习的基本分类-监督学习-决策树-ID3 算法
ID3(Iterative Dichotomiser 3)是决策树的一种构造算法,由 Ross Quinlan 在 1986 年提出。它主要用于分类问题,通过信息增益选择特征来构建决策树。ID3 假设数据是离散型特征,且不支持连续型数据。 1. 核心思想 划分标…...
Implicit style-content separation using lora
1.Introduction 图像风格化,这个任务涉及根据某些风格参考改编图像的风格,这些参考可以是基于文本或基于图像的,同时保持其内容不变,内容指的是图像的语义信息和结构,而风格通常指的是视觉特征和模式,例如颜色和纹理。这是一个有挑战的任务,因为风格和内容之间的强关联…...
ROS[aruco_ros+easy_handeye]手眼标定(眼在手外+UR10e+realsense-d435i)
参考链接: https://zhuanlan.zhihu.com/p/576861119 https://blog.csdn.net/qq_32618327/article/details/120730198 本次在Docker中使用 打印Aruco码:https://chev.me/arucogen/ 选择Dictionary为 Original ArUco(aruco_ros默认这个,如果…...
第九篇:k8s 通过helm发布应用
什么是helm? Helm 是 Kubernetes 的包管理器。Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。 在红帽系的Linux中我们使用yum来管理RPM包,类似的,在K8s中我们可以使用helm来管理资源对象(Deployment、Service、Ingress…...
dataTable
在 C# 中,DataTable 是 .NET Framework 中用于处理数据表格的一个类,属于 System.Data 命名空间。它是一种内存中表示数据表的结构,通常用于临时存储和操作数据,类似于数据库中的表。DataTable 的主要特点是行列结构,其…...
json+Tomact项目报错怎么办?
在响应请求的时候,如果http响应没有指定响应数据的content-type,浏览器就不知道按照什么格式解析响应体的数据,因为浏览器只知道怎样解析http的行和头,再从头里获取响应体的字节长度和类型,按照你给的长度去截流&#…...
Flume——sink连接Hive的参数配置(属性参数)
目录 配置文件官网属性参数例子 配置文件官网 可以参考官网的说明 属性参数 属性名默认值说明type无(必须指定)组件类型名称,必须是"hive"hive.metastore无(必须指定)元数据仓库地址,例如&…...
Netty面试内容整理-Netty 的应用场景
Netty 是一个高性能、异步的事件驱动网络框架,广泛应用于各种需要高并发、高吞吐量的网络通信场景。以下是 Netty 的常见应用场景: RPC 框架 ● 应用描述: ○ 远程过程调用(RPC)框架用于跨网络调用远程服务,就像调用本地方法一样。 ○...
波特图方法
在电路设计中,波特图为最常用的稳定性余量判断方法,波特图的根源是如何来的,却鲜有人知。 本章节串联了奈奎斯特和波特图的渊源,给出了其对应关系和波特图相应的稳定性余量。 理论贯通,不在于精确绘…...
服务器数据恢复—硬盘掉线导致热备盘同步失败的RAID5阵列数据恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障&#…...
在Ubuntu中运行和管理AppImage
文章目录 什么是AppImage?如何在Ubuntu中运行AppImage?如何管理AppImage?安装AppImageLauncher如何添加AppImage到系统?如何从系统中移除AppImage? 总结 什么是AppImage? AppImage是一种将应用程序打包为单…...
3步从图表图片中提取精确数据:WebPlotDigitizer完全指南
3步从图表图片中提取精确数据:WebPlotDigitizer完全指南 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经面对科研…...
声明式图表工具:提升技术文档绘制的自动化方案
声明式图表工具:提升技术文档绘制的自动化方案 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin 本文旨在探讨基于文本驱动绘图的声明式图表生成方案在技术文…...
Adams新手避坑指南:从Box到拉伸体,教你正确给几何模型‘赋予灵魂’(含质量设置)
Adams新手避坑指南:从几何体到动力学构件的关键转换 在Adams中创建几何模型时,许多新手用户会遇到一个令人困惑的现象:明明已经画好了精致的Box、Cylinder等几何体,但进行动力学仿真时,这些模型要么纹丝不动࿰…...
AI 落地精准测试平台:从排障定位、回归决策到智能分析实战课系列导航
本目录沉淀了一套围绕“采集接入、报告分析、治理沉淀、智能运维”展开的教学文章系列。 共 120 篇,适合拆分发布,也适合按专题连续阅读。 AI 落地精准测试平台:从排障定位、回归决策到智能分析实战课 这套系列适合谁 测试工程师ÿ…...
BiliDownloader实战演练:解锁B站视频离线观看的智能解决方案
BiliDownloader实战演练:解锁B站视频离线观看的智能解决方案 【免费下载链接】BiliDownloader BiliDownloader是一款界面精简,操作简单且高速下载的b站下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownloader 你是否曾为无法下载B站…...
模力方舟与口袋龙虾:开源中国的AI云端与端侧协同生态解析
本文解析开源中国通过“模力方舟”与“口袋龙虾”平台构建的AI协同生态。该生态旨在解决AI开发与落地中的资源分散与端侧部署难题,为开发者、企业及终端用户提供从云端资源调用到边缘智能部署的一站式通路。核心结论是,这种“云-边-端”协同模式降低了技…...
VS2015安装后找不到控制台项目?别急,你可能只是开错了Blend
VS2015安装后找不到控制台项目?可能是你开错了Blend 刚接触Visual Studio 2015的开发者经常会遇到一个令人困惑的问题:明明安装了VS2015,却找不到Win32控制台应用程序的创建选项。这往往不是因为安装不完整,而是因为误打开了Blend…...
Kubernetes 网络与服务发现:从原理到实战避坑指南
摘要K8s 网络是很多人眼中的"黑盒"。本文深入剖析 Pod 通信、Service 发现、Ingress 网关的核心原理,结合真实生产环境的踩坑经验,带你彻底搞懂 K8s 网络模型。看完这篇,你再也不会被"服务找不到"、"跨节点通信失败…...
B站视频转文字终极指南:如何用AI工具3步搞定视频内容整理
B站视频转文字终极指南:如何用AI工具3步搞定视频内容整理 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾为了一段精彩的B站课程内容反复…...
Artisan:开源咖啡烘焙软件的终极指南,从入门到精通的完整解决方案
Artisan:开源咖啡烘焙软件的终极指南,从入门到精通的完整解决方案 【免费下载链接】artisan artisan: the worlds most trusted roasting software 项目地址: https://gitcode.com/gh_mirrors/ar/artisan 你是否曾为咖啡烘焙的不可预测性而烦恼&a…...
