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

数据结构代码归纳

线性表

线性表的顺序表示

定义与初始化

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&#xff0c;同样的虚拟机配置&#xff1a;内存2G、cpu一核&#xff0c;物理主机同一台macbookpro&#xff08;13-2020款&#xff09;&#xff0c;所以硬盘IO读写速度一致。 综上&#x…...

筑起厂区安全--叉车安全防护装置全解析

在繁忙的工业生产领域中&#xff0c;叉车作为搬运工&#xff0c;穿梭于仓储与生产线之间。然而&#xff0c;叉车的高效运作背后&#xff0c;也隐藏着诸多安全风险&#xff0c;尤其是在那些空间狭小、物流繁忙的环境中。为了降低这些潜在的危险&#xff0c;叉车安全防护装置便成…...

深入浅出云计算 ---笔记

这是博主工作闲时的一些日常学习记录&#xff0c;有些之前很熟悉的&#xff0c;但工作中不常用&#xff0c;慢慢就遗忘了&#xff0c;在这里记录&#xff0c;也是为了激励自己坚持复习&#xff0c;如果有能帮到你&#xff0c;那我将感到非常的荣幸~ 快速到达↓↓↓ IaaS篇>&…...

ARINC 标准全解析:航空电子领域多系列标准的核心内容、应用与重要意义

ARINC标准概述 ARINC标准是航空电子领域一系列重要的标准规范&#xff0c;由航空电子工程委员会&#xff08;AEEC&#xff09;编制&#xff0c;众多航空公司等参与支持。这些标准涵盖了从飞机设备安装、数据传输到航空电子设备功能等众多方面&#xff0c;确保航空电子系统的兼…...

SNMP 协议介绍

SNMP 协议详细介绍 SNMP(Simple Network Management Protocol,简单网络管理协议)是一个用于管理和监控计算机网络设备(如路由器、交换机、服务器等)的协议。它允许网络管理员通过网络查看和控制这些设备的状态、配置和性能。 SNMP 协议定义了网络设备如何与管理系统进行通…...

Python中的数据结构深入解析:从列表到字典的优化技巧

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! Python是一门以易用性和可读性著称的高级编程语言,其内置的数据结构为开发者提供了强大的工具,但了解其底层实现及性能优化策略却常被忽略。本文深入探讨Python中的核心数据结构,包括列表(list)、元组…...

如何利用Java爬虫获得商品类目

在当今数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。获取和分析数据的能力对于任何希望在市场上保持竞争力的企业来说都是至关重要的。对于电子商务平台和市场研究公司而言&#xff0c;获取商品类目数据尤为重要&#xff0c;因为这些数据可以帮助他们更好地理解市场…...

力扣面试题 32 - 检查平衡性 C语言解法

题目&#xff1a; 实现一个函数&#xff0c;检查二叉树是否平衡。在这个问题中&#xff0c;平衡树的定义如下&#xff1a;任意一个节点&#xff0c;其两棵子树的高度差不超过 1。 示例 1&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]3/ \9 20/ \15 7 返回 true 。 …...

【机器学习】机器学习的基本分类-监督学习-决策树-ID3 算法

ID3&#xff08;Iterative Dichotomiser 3&#xff09;是决策树的一种构造算法&#xff0c;由 Ross Quinlan 在 1986 年提出。它主要用于分类问题&#xff0c;通过信息增益选择特征来构建决策树。ID3 假设数据是离散型特征&#xff0c;且不支持连续型数据。 1. 核心思想 划分标…...

Implicit style-content separation using lora

1.Introduction 图像风格化,这个任务涉及根据某些风格参考改编图像的风格,这些参考可以是基于文本或基于图像的,同时保持其内容不变,内容指的是图像的语义信息和结构,而风格通常指的是视觉特征和模式,例如颜色和纹理。这是一个有挑战的任务,因为风格和内容之间的强关联…...

ROS[aruco_ros+easy_handeye]手眼标定(眼在手外+UR10e+realsense-d435i)

参考链接&#xff1a; https://zhuanlan.zhihu.com/p/576861119 https://blog.csdn.net/qq_32618327/article/details/120730198 本次在Docker中使用 打印Aruco码&#xff1a;https://chev.me/arucogen/ 选择Dictionary为 Original ArUco(aruco_ros默认这个&#xff0c;如果…...

第九篇:k8s 通过helm发布应用

什么是helm&#xff1f; Helm 是 Kubernetes 的包管理器。Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。 在红帽系的Linux中我们使用yum来管理RPM包&#xff0c;类似的&#xff0c;在K8s中我们可以使用helm来管理资源对象&#xff08;Deployment、Service、Ingress…...

dataTable

在 C# 中&#xff0c;DataTable 是 .NET Framework 中用于处理数据表格的一个类&#xff0c;属于 System.Data 命名空间。它是一种内存中表示数据表的结构&#xff0c;通常用于临时存储和操作数据&#xff0c;类似于数据库中的表。DataTable 的主要特点是行列结构&#xff0c;其…...

json+Tomact项目报错怎么办?

在响应请求的时候&#xff0c;如果http响应没有指定响应数据的content-type&#xff0c;浏览器就不知道按照什么格式解析响应体的数据&#xff0c;因为浏览器只知道怎样解析http的行和头&#xff0c;再从头里获取响应体的字节长度和类型&#xff0c;按照你给的长度去截流&#…...

Flume——sink连接Hive的参数配置(属性参数)

目录 配置文件官网属性参数例子 配置文件官网 可以参考官网的说明 属性参数 属性名默认值说明type无&#xff08;必须指定&#xff09;组件类型名称&#xff0c;必须是"hive"hive.metastore无&#xff08;必须指定&#xff09;元数据仓库地址&#xff0c;例如&…...

Netty面试内容整理-Netty 的应用场景

Netty 是一个高性能、异步的事件驱动网络框架,广泛应用于各种需要高并发、高吞吐量的网络通信场景。以下是 Netty 的常见应用场景: RPC 框架 ● 应用描述: ○ 远程过程调用(RPC)框架用于跨网络调用远程服务,就像调用本地方法一样。 ○...

波特图方法

在电路设计中&#xff0c;波特图为最常用的稳定性余量判断方法&#xff0c;波特图的根源是如何来的&#xff0c;却鲜有人知。 本章节串联了奈奎斯特和波特图的渊源&#xff0c;给出了其对应关系和波特图相应的稳定性余量。 理论贯通&#xff0c;不在于精确绘…...

服务器数据恢复—硬盘掉线导致热备盘同步失败的RAID5阵列数据恢复案例

服务器存储数据恢复环境&#xff1a; 华为S5300存储中有12块FC硬盘&#xff0c;其中11块硬盘作为数据盘组建了一组RAID5阵列&#xff0c;剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用&#xff0c;存放的数据主要是Oracle数据库。 服务器存储故障&#…...

在Ubuntu中运行和管理AppImage

文章目录 什么是AppImage&#xff1f;如何在Ubuntu中运行AppImage&#xff1f;如何管理AppImage&#xff1f;安装AppImageLauncher如何添加AppImage到系统&#xff1f;如何从系统中移除AppImage&#xff1f; 总结 什么是AppImage&#xff1f; AppImage是一种将应用程序打包为单…...

如何查看电脑的屏幕刷新率?

1、按一下键盘的 win i 键&#xff0c;打开如下界面&#xff0c;选择【系统】&#xff1a; 2、选择【屏幕】-【高级显示设置】 如下位置&#xff0c;显示屏幕的刷新率&#xff1a;60Hz 如果可以更改&#xff0c;则选择更高的刷新率&#xff0c;有助于电脑使用起来界面更加流…...

浏览器数据存储方法深度剖析:LocalStorage、IndexedDB、Cookies、OPFS 与 WASM - SQLite

在当今的 Web 开发领域&#xff0c;选择合适的浏览器数据存储方法对于构建高效、功能丰富的应用程序至关重要。随着 Web 应用的不断演进&#xff0c;从早期的静态 HTML 页面到如今复杂的单页应用和本地优先应用&#xff0c;数据存储需求也日益多样化。本文将深入探讨 LocalStor…...

面向金融场景的大模型 RAG 检索增强解决方案

概述 在现代信息检索领域&#xff0c;检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;模型结合了信息检索与生成式人工智能的优点&#xff0c;从而在特定场景下提供更为精准和相关的答案。在特定场景下&#xff0c;例如金融等领域&#xff0c;用户通…...

经典蓝牙(BT/EDR)蓝牙配对与连接

经典蓝牙的连接过程包括跳频&#xff0c;扫描&#xff0c;配置交换等过程。对ACL链路以及sco的连接过程也做详细的分析。 1. 为什么不配对便无法建立连接&#xff1f; 任何无线通信技术都存在被监听和破解的可能&#xff0c;蓝牙SIG为了保证蓝牙通信的安全性&#xff0c;采用…...

Flask: flask框架是如何实现非阻塞并发的

写在前面:Flask框架是通过多线程/多进程+阻塞的socket实现非阻塞,其本质是基于python的源库socketserver实现的 前言 认识WSGI协议 认识Werkzeug flask是如何实现非阻塞的 本文使用的flask框架为最新的1.1.1版本,所有代码基于python3运行 一:前言 使用过flask或者其他web框…...

JAVA |日常开发中连接Oracle数据库详解

JAVA &#xff5c;日常开发中连接Oracle数据库详解 前言一、Oracle 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 Oracle 数据库的准备工作2.1 添加 Oracle JDBC 驱动依赖2.2 了解连接信息 三、建立数据库连接3.1 代码示例&#xff08;使用服务名&#xff09;3.2 步骤解…...

头歌 进程管理之二(wait、exec、system的使用)

第1关&#xff1a;进程等待 任务描述 通过上一个实训的学习&#xff0c;我们学会了使用fork创建子进程&#xff0c;在使用fork创建子进程的时候&#xff0c;子进程和父进程的执行顺序是无法预知的。本关我们将介绍如何使得fork创建出来的子进程先执行&#xff0c;随后父进程再…...

详解日志格式配置:XML 与 Spring Boot 配置文件格式

详解日志格式配置&#xff1a;XML 与 Spring Boot 配置文件格式 日志是现代应用程序中不可或缺的一部分&#xff0c;通过定制化日志格式和颜色&#xff0c;开发人员可以更方便地调试和监控应用。本文将深入讲解如何在 XML 配置文件 和 Spring Boot 配置文件 中设置日志格式&am…...

JDK21新特性

目录 虚拟线程&#xff08;JEP 444&#xff09;&#xff1a; 顺序集合&#xff08;JEP 431&#xff09;&#xff1a; 字符串模板&#xff08;JEP 430&#xff09;&#xff1a; 模式匹配的增强&#xff08;JEP 440、441以及443&#xff09;&#xff1a; 结构化并发和作用域值…...

SqlDataAdapter

SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一个数据适配器类&#xff0c;属于 System.Data.SqlClient 命名空间&#xff08;或在 .NET 6 中属于 Microsoft.Data.SqlClient 命名空间&#xff09;。它的作用是充当数据源&#xff08;如 SQL Server 数据库&#xff…...