
数据结构
数据结构相关内容的代码实现,以项目工程的形式记录
TU.路
日积跬步,以至千里
展开
-
数据结构 ——哈希表
下面是用数组实现哈希结构,开放地址法解决冲突的简单哈希表操作。3、邻接表法实现哈希结构。原创 2024-12-15 17:47:41 · 432 阅读 · 0 评论 -
数据结构 ——前缀树查词典的实现
下面是利用前缀树在一个给定的文件log.txt,来实现一个简单的查词典功能。插入key:ant过程,查找单词同插入差不多。插入key:donkey。关于指针数组的一点理解。二、查词典的代码实现。原创 2024-12-14 16:41:05 · 417 阅读 · 0 评论 -
数据结构 ——二叉树转广义表
实现过程:先拿到表的第一个字符,判断是不是(,是的话继续拿第二个字符,不是)的话,则为根节点,保存该根节点数据;继续左右子树的递归存值,读完左右子树后,继续读最后一个),递归结束,返回这棵树。root=(c(a()(b()()))(e(d()())(f()(j(h()())())))) (跟(左子树)(右子树))假设广义表为 (c(a()(b()()))(e(d()())(f()(j(h()())())))) 画出该二叉树。如下一棵树,转换为广义表。2、根据广义表画出二叉树。原创 2024-12-13 14:49:14 · 579 阅读 · 0 评论 -
数据结构 ——平衡二叉树
删除逻辑:要明白指针的含义,存放的是变量的地址,如下图片为删除id为3后,由于无左孩子,右孩子直接顶替上来的示意图。以下代码包括二叉树的创建,平衡过程,遍历:前序、中序、后序和按层遍历,画图和销毁等操作。左旋:右子树重,当前节点的右孩子成为新的根节点,旧根节点连到新根节点的最左的左子树上。右旋:左子树重,当前节点的左孩子成为新的根节点,旧根节点连到新根节点的最右的右子树上。如下为一颗不平衡的二叉排序树,通过左旋和右旋操作转换为平衡二叉树的过程。1、平衡二叉树的定义:任意节点的子树的高度差都小于等于 1。原创 2024-12-12 19:08:51 · 1060 阅读 · 0 评论 -
数据结构 ——树状存储的实现
先序遍历(前序遍历):先访问根节点,然后递归地先序遍历左子树,最后递归地先序遍历右子树。按层遍历:从树的根节点开始,逐层遍历树中的所有节点。这种遍历方式也称为广度优先遍历。中序遍历:先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。后序遍历:先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。下面是以递归的思想来构建和遍历一颗二叉树。先序和中序 /中序和后序 能确定一颗树。下面为各种遍历示意图。原创 2024-12-12 16:11:07 · 499 阅读 · 0 评论 -
数据结构 ——数状存储的基本概念
计算一个节点的深度,从根节点算起(从1开始计数),到该节点所经过的节点数(包括此节点)为树的深度,如下图,D的深度为3,G为4。二叉树是一种特殊的树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。:利用链表存储二叉树。每个节点使用一个结构体表示,结构体包含数据域和两个指针域,分别指向左子节点和右子节点。:利用数组存储二叉树。通常按层次顺序存储,从根节点开始,依次存入数组的相应位置。一、树状存储基本概念。原创 2024-12-09 14:47:54 · 304 阅读 · 0 评论 -
栈和队列的应用 ——球钟算法
【代码】栈和队列的应用 ——球钟算法。原创 2024-12-07 14:44:07 · 747 阅读 · 0 评论 -
顺序栈的应用 ——计算器
2.根据输入的表达式,判断数字和运算符,各自放入对应栈中。其中对于运算符的判断如下:如果一开始运算符栈为空或者遇到( 左括号优先级最高,直接压入栈中;* 则要判断优先级是否比当前栈顶高,高的话直接入栈,低或者等于则先把运算符栈和数字栈弹出计算,直到运算符栈为空或大于当前栈顶优先级,就入栈;思路:1.可以使用顺序栈实现,先创建两个顺序栈sop(存放运算符,如()、+、-、最后是) ,右括号不入栈,此时要运算符栈和数字栈要出栈并计算,直到遇到左括号为止。、/)和snum(存放数字)。原创 2024-12-05 16:30:21 · 544 阅读 · 0 评论 -
数据结构 ——链式队列
链式队列是通过链表实现的一种队列,它将队列的元素通过指针连接起来。链式队列不需要预先分配固定大小的存储空间,因此可以动态增长,更加灵活。下面是基于变长结构体的双循环链表库进行封装实现链式队列的基本操作,以工程的形式记录。原创 2024-12-04 10:12:20 · 298 阅读 · 0 评论 -
数据结构 ——顺序队列
需要附设两个指针:队头指针(front)和队尾指针(rear),分别指向队头元素和队尾元素。队列(queue)是只允许在一端进行插入操作,在另一端进行删除操作的线性表,简称“队”。允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。用一组地址连续的存储单元,依次存放从队头到队尾的数据元素,称为顺序队列。向队列中插入新的数据元素称为入队,新入队的元素就成为了队列的队尾元素。从队列中删除队头元素称为出队,其后继元素成为新的队头元素。队列的头尾相接的顺序存储结构称为循环队列。原创 2024-12-03 10:42:24 · 369 阅读 · 0 评论 -
数据结构 ——链式存储栈
链式栈是一种数据存储结构,可以通过单链表的方式来实现,使用链式栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。调用封装的双循环链表的库进行实现,以工程的形式记录。原创 2024-12-02 16:07:47 · 277 阅读 · 0 评论 -
数据结构 ——顺序栈
顺序栈(也称为数组栈)是一种基于数组实现的栈数据结构。栈是一种“后进先出”(Last In First Out, LIFO)的数据结构,最后一个进入的元素最先被取出。顺序栈就是使用一个数组来存储元素的栈,它遵循栈的特性。在顺序栈中,我们将数组的第一个索引(位置0)作为栈顶,最后添加(push)的元素将放在数组的最后一个索引位置,而弹出(pop)操作则从数组的第一个索引位置开始。下面为一个顺序栈的简单操作实现,包括创建、判空、入栈、出栈、获取栈顶元素、遍历和销毁,以项目工程的形式记录。原创 2024-11-27 10:38:14 · 505 阅读 · 0 评论 -
数据结构 ——循环双链表的封装3-隐藏结构体
一、下面是基于变长结构体的循环双链表进行进一步封装,将结构体进行隐藏封装的实现,以项目工程的形式记录。原创 2024-12-01 17:48:02 · 138 阅读 · 0 评论 -
循环双链表封装成类的实现
面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。下面是采用面向对象的思想,将前面的循环双链表封装成类的实现。以项目工程的形式记录。原创 2024-12-01 17:39:45 · 195 阅读 · 0 评论 -
数据结构 ——循环双链表—变长结构体的使用
如果你直接使用指针而不使用数组,那么,你在分配内存缓冲区时,就必须分配结构体一次,然后再分配结构体内的指针一次,(而此时分配的内存已经与结构体的内存不连续了,所以要分别管理即申请和释放)。概念:变长结构体是由gcc扩展的一种技术,它是指其最后一个成员的长度不固定(flexible array member,也叫柔性数组)。应用: Socket通信数据包的传输、解析数据包、其他可以节省空间,连续存储的地方等。下面是基于循环双链表的基础上,使用变长结构体,以项目工程的形式记录。原创 2024-12-01 16:09:38 · 241 阅读 · 0 评论 -
数据结构 ——带头循环双链表
包含指向其前一节点以及下一节点的指针。循环双向链表在任何节点中都不包含NULL。链表的最后一个节点包含列表的第一个节点的地址。链表的第一个节点还包含的前一个指针是指向最后一个节点的地址。以下为一个通用带头结点的循环双链表的基本操作实现,以项目工程的形式记录。1、下面为项目工程使用到的带头循环双链表的示意图。2、头插和尾插示意图。3、基本操作代码实现。原创 2024-11-30 23:58:37 · 211 阅读 · 0 评论 -
无头循环单链表的应用 ——约瑟夫问题
思路:可以使用无头节点循环单链表实现(有头结点的话每次循环要判断该头结点,造成干扰)n个人围成一圈,1开始数,数到3就出列,找到最后留下来的人。2、无头循环单链表示意图。原创 2024-12-03 16:32:28 · 174 阅读 · 0 评论 -
带头单链表应用 ——多项式合并
思路:可以抽象成两个单链表,从头开始比较两个数据域(系数和x的项数),选定其中一个单链表为合并的新链。数据域小的保留下来,如果同系数则相加(若相加为0,则不需要链接该节点),依次遍历。如:p1:5+2x+8x^8 +3x^16。1、用带头结点的单链表实现多项式的合并。原创 2024-12-03 16:01:58 · 159 阅读 · 0 评论 -
数据结构 ——无头单链表
无头单链表省去了传统单链表头节点的存储空间,这使得在某些情况下可以更高效地使用内存。它直接通过头指针访问第一个数据节点,便于快速迭代整个链表,但同时也意味着在进行某些操作时,如获取链表长度,需要额外的遍历计数步骤。单链表是一种常见的基础数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。无头单链表是单链表的一种变体,其特点是没有明确的头节点,链表的第一个数据节点直接跟在头指针之后。一、无头单链表的定义与特性。1.2 无头单链表的特点。1、无头单链表示意图。原创 2024-12-03 11:47:07 · 304 阅读 · 0 评论 -
数据结构 ——带头单链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:数据域(数据元素的映象) + 指针域(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。下面为单链表的基本操作实现,以项目工程的形式记录。二、单链表的基本操作。原创 2024-11-29 14:14:36 · 276 阅读 · 0 评论 -
数据结构 ——顺序表
定义:顺序表是一种线性表的存储结构,它用一组地址连续的存储单位依次存储线性表中的数据元素。从而使得逻辑上相邻的两个元素在物理位置上也相邻。以下为顺序表的基本操作实现,以项目工程的形式记录。二、顺序表的基本操作。原创 2024-11-28 15:45:07 · 237 阅读 · 0 评论