当前位置: 首页 > 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是一种将应用程序打包为单…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...