自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 数据结构与算法(十二)——二叉树的存储和遍历(概念)

我们举相同的例子。先处理以A为根结点的树:再处理以B为根结点的树:再处理以D围殴根结点的树:此时我们就把整棵树左子树给遍历完了此时的中序遍历结果:GDHBA再处理以C为根结点的树:再处理以E为根结点的树:此时就将整棵树遍历完了。完整的中序遍历顺序是:GDHBAEICF。

2024-01-10 18:19:48 1345 2

原创 数据结构与算法(十一)——二叉树的相关概念

定义:二叉树(Binary Tree)是指树中结点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。二叉树的特点有:(1)每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。注意不是只有两棵子树,而是最多有。没有子树或者有一棵子树也是可以的。(2)左子树和右子树是有顺序的,次序不能任意颠倒。就像人的左脚和右脚,穿鞋的时候不能穿反。(3)

2023-09-13 21:54:08 319 1

原创 数据结构与算法(十)——树的存储

这种方法在面对树中各结点的度相差很大时,显然是很浪费空间的,因为有很多的结点,它没有那么多孩子结点,所以造成了指针域是空的。具体办法是,把每个结点的孩子排列起来,以单链表作为存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为空。当然,对于树这样的层级结构来说,只研究结点的兄弟是不行的,我们观察后发现,这种方法克服了浪费空间的缺点,对空间的利用率是很高了,但是由于各个结点的链表是不同的结构,加上要维护结点的度的数值,在运算上就会带来时间的损耗。但是,树的每个结点的度,也就是它的孩子个数是不同的。

2023-09-12 20:49:07 374 1

原创 数据结构与算法(九)——树的概念

定义:树(Tree)是n(n>=0)个结点的有限集。当n==0的时候,我们称之为空树。在任意一棵非空树中,有几个特点:(1)有且仅有一个特定的称为根(Root)的结点。(2)当n>1时,其余结点可以分为m个互不相交的有限集,T1,T2,T3....Tm,其中每一个集合本身又是一棵树,并且被称为根的子树(SubTree)。乍一看定义很长,看起来很懵。不急,咱一句句解释。第一句“树(Tree)是n(n>=0)个结点的有限集。” ,这里重点是有限集,首先它是一个集合,集合里面装的啥?装的是n个结点。

2023-09-07 17:26:44 269 1

原创 数据结构与算法(八)——双端队列

双端队列(Double-ended Queue,简称Deque)是一种具有队列和栈特性的数据结构,可以在队列的两端进行插入和删除操作。双端队列允许从前端和后端同时进行插入和删除操作,因此可以称为“两端都可以进出的队列”。双端队列有以下几个特点:1、可以在队列的头部和尾部进行插入和删除的操作。2、元素的插入和删除操作可以分别称作入队和出队操作。3、可以进行先进先出(FIFO)和先进后出(LIFO)两种操作方式。4、可以实现栈和队列以及其他需要在两端进行插入和删除操作的场景。

2023-09-05 22:29:50 4542 1

原创 数据结构与算法(七)——队列

定义:队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。从这个定义我们就能看出来和栈的区别,栈的定义是:限定仅在表尾进行插入和删除操作的线性表。1.队列是一种先进先出(First In First Out)的线性表,简称FIFO。2.只允许插入的一端称为队尾,允许删除的一端称为队头。

2023-08-06 03:01:44 365

原创 数据结构与算法(六)——栈

(一)什么是栈?

2023-07-31 22:23:37 195 1

原创 数据结构与算法(五)——线性表(下)循环链表篇

(一)循环单链表概念Q:循环链表是个啥,它跟单链表有什么联系?A:实际上循环单链表就是由单链表变来的。你可以将循环链表看做成,单链表的尾结点(最后一个结点)原本是指向NULL的。然后我们改变它的指向,最终指向头结点,这样就实现了循环的目的。画个图理解一下:顺便预告一下(这个图只是为了理解循环链表概念,后面写代码不是以这个为准,头尾指针的问题还会讨论)Q:为什么循环链表还要保留一个没有数据的头结点?这样循环起来跳过这个点挺麻烦的。A:说白了还是为了一致性。为了使空链表和非空链表一致。

2023-07-09 15:26:27 229 1

原创 数据结构与算法(四)——线性表(下)双向链表篇

上一篇讲到了静态链表,它的本质和单链表相同,换了一种实现的形式罢了。双向链表和单向链表的不同就在于,它可以指向前面,也可以指向后面。所以自然想到在指针域中多添加一个Pre指针(指向该结点的前驱),配合上Next指针,就可以达到效果。因为之前我们去找结点2是利用结点1的Next,现在结点1的Next都修改了,所以就找不到了结点2了。找都找不到,更不可能改变不结点2的Pre了。第二步的逻辑:结点2->Next->Pre=结点2->Pre;第一步:新结点的Next指向结点2,Pre指针指向结点1。

2023-07-08 20:44:21 192 2

原创 数据结构与算法(三)——线性表(下)静态链表篇

Q1:啥叫静态链表?简单点说静态链表是用数组描述的链表。注意:和前面的线性存储不一样,这里是用数组模拟链表。Q2:为啥会出现静态链表这种东西?A:这就得说说C语言的伟大了,因为它具有指针的能力,这样使得它可以非常容易的操作内存中的地址和数据。但后来的面向对象语言,如:Java、C#等。它们是没有指针这个东西的。更别说一些早期的语言,如:Basic、Fortran等。由于没有指针,按照之前单链表的结构,指针域就没办法实现。所以衍生了静态链表这个产物。Q3:那我们是如何用数组描述链表的呢?

2023-07-03 02:54:24 6533 6

原创 数据结构与算法(二)——线性表(中)

一个数据域储存数据,另一个是指针域指向为“空”(NULL),因为它没有后继了嘛。

2023-06-30 01:09:40 207

原创 数据结构与算法(一)——线性表(上)

作为一名计算机专业的学生,每次查资料的时候发现,很多的资料查阅需要付费而且答案冗长不精炼。于是自己就想着能不能自己写一个免费“合集”,细致的去介绍数据结构与算法。一方面巩固自己的知识。更重要的是,如果可以帮助很多初学者解决问题那么这就是一件有意义的事。这个合集是以Weiss教授的《数据结构与算法分析C语言描述》为蓝本,自己修改了一些章节的学习位置(为了帮助理解),总而言之希望大家看到这篇文章的时候能够解决很多问题。最后一点,由于笔者能力有限,如果出现了一些错误欢迎大家评论区来指正,一起做好这个专栏。

2023-06-29 00:30:38 295 3

原创 Bellman Ford算法详解

Bellman Ford算法是最短路算法之一。适用于拥有负权边的最短路问题。本文将回答学习该算法时出现的疑惑。

2022-12-30 00:28:10 733

原创 Dijkstra算法详解(二)------堆优化版

在使用Dijkstra算法时,我们每次都会对所有点遍历一遍。目的就是为了寻找距离1号点最近的点。是否有其他简单的办法去获取呢?堆优化就是解决办法。

2022-12-28 16:43:10 1688 1

原创 Dijkstra算法详解

本文详细介绍了Dijkstra算法,使用方法,简单例子(有插图理解),附有例题

2022-12-25 16:00:51 2291 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除