
数据结构
文章平均质量分 63
goudan蒻
刚转到计科的计算机学生,大一是生物工程的,现大二
展开
-
数据结构之无向无权图邻接表存储
在我的图的基本知识的博客中说到有两种存储方法,这个博客我来分享无向图的存储方式,邻接表法名字中有邻接两个字,实际上就是跟邻接顶点有关的方法,也就是把邻接顶点,以链表的方式接在其相应顶顶点数组对应位置的后面。如下图:大概就是这样。那么我们要实现这种结构我们需要什么:1.表示顶点的字符串。2.表示存储顶点的数组。3.实现存储邻接顶点的链表,实际意义也就是边的意思。4.数组也要有个指针指向其所带的链表。所以得出结论就是,一个带着指针的数据数组,好多个链表节点以其规则指针链接。好,我们来实现基础原创 2021-02-20 15:09:44 · 2229 阅读 · 0 评论 -
数据结构之图的矩阵法存储
上个博客讲过了图的基本概念后,我们来实现图的存储之一————有向图的矩阵法存储。首先我们来看以下有向带权图:这样的图适合用矩阵法来存储。分析一下我们需要的结构:二维数组,表示顶点的字符串,存储顶点的容器,表示定点数量,表述边的数量,边的指向向用向量坐标的形式,也就是坐标法表示(A,B)和(B,A)在二维数组中表示的概念是不一样的是一个道理。所以我们来动手操作一下:第一步:我先准备表示顶点的字符串和边的类型表示typedef char VertexType[4];typedef int VR原创 2021-02-20 13:46:26 · 833 阅读 · 1 评论 -
数据结构之图的概念
定义:图 (Graph) 是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物,连接两顶点的边则用于表示两个事物间具有这种关系。图论 (Graph theory) 是数学的一个分支,图是图论的主要研究对象。表达式:G=(V, E)V:顶点(数据元素)的有穷非空集合。E:边的有穷集合。Graph = (Vertex, Edge)四种图形式:无向无权图:顶点之间相连的线我们称为边,每条边都是无方向的,边无权值。有向有权图:顶点之间相原创 2021-02-19 21:30:05 · 412 阅读 · 0 评论 -
数据结构之二叉搜索树
前言:这个结构不难,但是删除的时候的逻辑思维难,建议这个博客配合着自己画图理解来实现你的二叉搜索树二叉搜索树的概念二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。两句话:左节点比根节点的关键值小,右节点比根节点的关键值大我决定用二元组来当作数据,一个是键值,原创 2021-02-18 23:34:17 · 200 阅读 · 0 评论 -
数据结构之堆(大顶堆)实现
这个博客总结一下二叉树的堆概念首先我们要了解堆是什么:堆其实就是用一维数组实现二叉树。(当然你要是用二叉链表来实现我也没办法,只不过很占内存罢了)堆是一种非线性结构,可以把堆看作一个数组,也可以被看作一个完全二叉树,通俗来讲堆其实就是利用完全二叉树的结构来维护的一维数组按照堆的特点可以把堆分为大顶堆和小顶堆大顶堆:每个结点的值都大于或等于其左右孩子结点的值小顶堆:每个结点的值都小于或等于其左右孩子结点的值完全二叉树的概念在我之前博客已经整理过了。这里不再论述但是既然是一维数组实现,且为完全二原创 2021-02-17 20:50:55 · 4299 阅读 · 0 评论 -
数据结构之二叉树之二叉链表树代码实现
上个博客整理了二叉树的基础知识,这里是链接:二叉树的一些基本知识了解到基本要点和基本结构后,我们来实现一下这个数据结构:首先我们得了解到这个数据结构的单体是什么样子的,他单体包括了数据和两个指向左右孩子的指针所以我们用结构体写出来这个二叉树节点:typedef struct treenode { char data; struct treenode* Lchild; struct treenode* Rchild;}TREE,*LPTREE;因为这个节点名字太长了,我就起个别名,这里要注原创 2021-02-14 20:46:16 · 1319 阅读 · 0 评论 -
数据结构之二叉树基本概念
二叉树的基本概念二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分来自百度词条二叉树的基本形态:1.空的二叉树:其实就是指向空的指针2.只有根节点的二叉树:也就是一个指针指向一个节点,这个节点是根节点3.只有左子树和右子树:只有左子树和右子树(又称斜树,其实也就成了链表):如下图:原创 2021-02-13 22:21:09 · 2011 阅读 · 0 评论 -
数据结构之哈希表之跳表
上次写的博客总结了数组实现哈希表,这次总结一下链表实现哈希表。哈希表的基础知识在上次的数组实现哈希表里讲过了,这是链接:数组哈希跳表结构如下:那么我们来写它需要的结构体以及所需函数:先是数据类型的结构体:struct datatype { int first; char second[20];};这里跟数组哈希是一样的,一个是需要取余的键值,一个是存放的数据既然是链表结构,那么该有的链表节点我们得写一下,这个看我的数据结构专栏的帅哥都很熟悉,或者经常写链表的靓仔都很熟悉,所以直接上了:原创 2021-02-09 19:33:28 · 731 阅读 · 0 评论 -
数据结构之哈希表
哈希表的数组实现哈希表的概念:哈希,又叫做散列表,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。哈希两大重点:哈希映射(也就是确定哈希地址的函数):y(x)=F(x);比如y(x)=x;这是直接取址法;哈希地址不是真正意义上的地址,是抽象原创 2021-02-09 11:54:22 · 387 阅读 · 0 评论 -
数据结构之顺序表
顺序表(一直都不知道还有这玩意?)所以以下是来自百度百科:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中其实我也不太懂,直到后来自己实现了一下这个结构,这貌似就是个容器的作用?相当于c++的v原创 2021-02-06 20:22:23 · 2319 阅读 · 1 评论 -
数据结构之优先队列(线性结构的优先队列,数组实现和链表实现)
优先队列(priority queue)普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征优先队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有1) 查找;2) 插入一个新元素;3) 删除.在最小优先队列(min priority queue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素原创 2021-02-06 16:17:22 · 2108 阅读 · 0 评论 -
蓝桥杯单片机学习之数码管
这里是我的数码管的学习笔记,欢迎大家一起进步数码管的初始化原理参照以下链接(本人写的博客)初始化原理请务必多看一下,里面还有关于P0口的一些信息那么看一下原理图,了解一下数码管的工作原理可以看到我所画的大致示意图,也就是Y6C控制com一系列引脚来选择要显示的数码管然后选择哪个灯管亮的是Y7C控制的abcdefg。也就是说,先用Y6C位选数码管,Y7C位选亮的数码管比如Y6C开启,P0=0xff,也就是选中所有的数码管展示然后Y7C开启,P01=0;所有的数码管的a管亮,也就是全是最上面原创 2021-02-05 13:36:35 · 1690 阅读 · 2 评论 -
小白的基础数据结构的学习(链接目录篇)
我最近在学习基础的数据结构,并在博客中详细介绍和c代码实现,特意放出目录链接来分享,希望大家一起进步:点击蓝色字体就可以看了哦1.链表1.1 链表之有头链表1.2 链表之无头链表1.3 链表之双向链表1.4 链表之双向循环链表2.栈2.1 栈之链式栈2.2 栈之数组栈2.3 栈之栈的寻路3.队列3.1 队列之链式队列3.2 队列之数组队列还在更新哦,小白已经够努力了...原创 2021-02-04 17:35:16 · 259 阅读 · 0 评论 -
数据结构之数组队列
建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针tail,它指向下一个入队元素的存储位置我的链式队列里面讲到,队列的概念和实现方式,现在我们来用数组实现:首先是比较麻烦的方法,但是是比较能理解的方法#include<stdio.h>#include<stdlib.h>const int MAX = 20;struct queue { int* queuem; //数组队列原创 2021-02-04 14:37:11 · 234 阅读 · 0 评论 -
数据结构之链式队列
我们今天来学习队列,这个博客我写的是链式队列首先我们来了解一下什么是队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列有两种实现方式,他跟栈极其相似,只不过他是先进先出,顾名思义,他就跟我们现实排队是一模一样的。跟栈一样,两种实现方式,一种是链式队列,一种是数组队列链式队列的实现方式就是无头链表的头删原创 2021-02-04 13:50:07 · 291 阅读 · 0 评论 -
数据结构之利用栈寻路(深度优先搜索)
写完了栈的两种实现方式的博客,我们来看利用栈来寻路:栈的特性适合来存储路径坐标,并且撞墙后可以以栈的弹顶元素来实现回退功能,所以用栈来实现这个算法,我这里运用的是深度优先搜索思想了(虽然我没有特别明显的dfs函数,大佬请不要喷,本菜面对的是新手)首先我们绘迷宫肯定是二维数组实现了,但是存储这个点就需要结构体了所以我们来封装一下:struct point { int x; int y;};接下来用栈来存储路径struct point path[100];//存放路径int stacktop原创 2021-02-03 19:27:22 · 909 阅读 · 3 评论 -
数据结构之数组栈
写过了链式栈,我也提到了,有两种写栈的方法,剩下的就是数组栈数组可用于实现(有界)堆栈,如下所示。第一个元素(通常在零点偏移处)是底部,导致数组[0]成为被推到堆栈上的第一个元素,最后一个元素弹出。程序必须跟踪堆栈的大小(长度),使用一个可变的顶部记录到目前为止推送的项目数,从而指向数组中下一个元素要插入的位置(假设从零开始的索引约定)。因此,堆栈本身可以有效地实现为三元素结构。我们先看一些书上实现的数组栈:struct mystack { int* stackme;//整形指针用来开辟数组 in原创 2021-02-03 15:53:34 · 739 阅读 · 0 评论 -
数据结构之链式栈
链式结构我的博客已经写完了,那么我就开始栈的内容了,栈的结构非常简单就是后进先出的一种结构堆栈可以通过数组或链表轻松实现。在这两种情况下,将数据结构标识为堆栈的不是实现,而是接口:只允许用户将项目弹出或推送到数组或链表上,几乎没有其他辅助操作。这个博客我来实现链式栈,也巩固一下链表的写法:链表栈大概是这样子的:可以看到,使用无头链表就行所以我们做一下准备工作,也是我们之前写链表经常有的一些基础struct node { int data; struct node* next;};str原创 2021-02-03 14:41:55 · 370 阅读 · 0 评论 -
数据结构之双向循环链表
双向循环链表:就是在双向链表的基础之上把头节点和尾结点也用两个指针相互链接,形成一个环:结构我们懂了那么接下来开始我们的准备工作:#include<stdio.h>#include<stdlib.h>struct node { int data; struct node* left; struct node* right;};struct list { int size; struct node* headnode; struct node* tailno原创 2021-02-02 16:46:40 · 564 阅读 · 5 评论 -
数据结构之双向链表
讲过无头链表之后,双向链表就更好理解了它的大致结构是这样子的:那么就是设计一个结构体来表示节点,很多人都用front,next来表示,但是我觉得左右更适合这样的图来理解,重要的不是变量名而是实现功能,数据结构就是为了存取数据存在的,所以这个我觉得只要自己能理解,就行:struct node { int data; struct node* left; struct node* right;};我还用给我上一个数据结构的博客————数据结构之无头链表所用的结构体封装来表示,这样的结构利于我原创 2021-02-01 20:53:02 · 206 阅读 · 0 评论 -
数据结构之无头链表
数据结构之无头鱼 咳咳无头链表上次我介绍了有头链表,这次我来写无头链表,其中有两种形式——————1.二级指针 2.利用结构体封装第一种用二级指针:顾名思义,利用一个node指针来充当一个头,然后就不用创建新的链表,只需要一个指针指向链表开始的地方:struct node { int data; struct node* next;};struct node* creatnode(int data) { struct node* newnode = (struct node*)ma原创 2021-02-01 14:27:56 · 656 阅读 · 2 评论 -
基础数据结构———有头链表(小白学习笔记)
链表就是不连续的内存块通过指针联系起来成为一个数组(个人的理解)结构体的两大块:数据块,指针块我们可以通过结构体来实现链表但是如何新建一个链表呢,我这里讲一个有头链表头的话就是没有数据域只有指针,带向后面的节点,后面的节点再指向一个节点我们可以用结构体先表现出来节点struct node{ int data; struct node* next;};创建有头链表:即分配头指针空间并把指针指向NULL:struct node* creatlist() { struct node*原创 2021-01-31 10:57:55 · 768 阅读 · 0 评论