数据结构
文章平均质量分 85
被刘海遮住的发际线
清醒温柔知进退,努力上进且优秀!
展开
-
数据结构 第九章(学习笔记一(查找一))
基本概念查找 :在数据集合中寻找满足某种条件的数据元素的过程。查找结果分为 查找成功 和 查找失败。查找表 :用于查找的数据集合, 由同一种数据类型(或记录)的组成, 可以是一个数组或链表等数据类型。操作:1、检索满足条件的某个特定的数据元素的各种属性;2、查询某个特定的数据元素是否在查找表中;3、在查找表中插入一个数据元素;4、从查找表中删除一个数据元素。操作1和2合起来称作 静态查找表 , 全部操作合起来称作 动态查找表。关键字: 数据元素中唯一标识该元素的某个数据项的值, 使用基于原创 2020-12-15 16:48:31 · 828 阅读 · 0 评论 -
数据结构 第七章(学习笔记四(图的应用))
图的应用最小生成树定义性质算法实现Prim (普里姆)算法算法思路代码实现Kruskal(克鲁斯卡尔)算法算法思路代码实现拓扑排序基本概念算法思想参考代码实现关键路径基本定义基本计算事件Vk的最早发生时间 Ve(k)事件Vk的最迟发生时间 Vl(k)活动ai的最早开始时间e(i)活动ai的最迟开始时间l(i)活动ai的差额d(i) = l(i) - e(i)实例分析最短路径基本定义算法实现迪杰斯特拉(Dijkatra)算法实现思路详细过程参考代码实现弗洛伊德(Floyd)算法实现思路算法思想递推公式参考代码原创 2020-12-07 18:52:58 · 908 阅读 · 0 评论 -
数据结构 第七章(学习笔记三(图的遍历))
图的遍历图的遍历图的遍历之深度优先探索深度优先探索具体实现思路实例参考代码实现图的遍历之广度优先探索广度优先探索具体实现思路实例参考代码实现DFS&BFS实现图的遍历完整代码图的遍历从图中某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次。图的遍历之深度优先探索深度优先探索深度优先搜索(DepthFirstSearch) ,也有称为深度优先遍历,简称为DFS。拿找钥匙例子来说, 无论从哪一间房间开始都可以,将房间内的墙角 、床头柜、床上、床下、衣柜、电视柜等原创 2020-11-26 19:32:03 · 228 阅读 · 0 评论 -
数据结构 第七章(学习笔记二(图的存储结构))
图的存储结构之邻接矩阵邻接矩阵的定义图的邻接矩阵(Adjacency Matrix) 存储方式是用两个数组来表示图。一个 一维数组存储图中顶点信息,一个 二维数组(称为邻接矩阵) 存储图中的边或弧的信息。图的邻接矩阵实现思路结点数为n的图G=(V)的邻接矩阵A是n x n的。将G的顶点编号为V1,V2…Vn(数组下标)若<Vi,Vj> ∈E,则 A [i][j] = 1,否则 A [i] [j] = 0实例(有向图)实例(无向图)网的邻接矩阵实现思路结点数为n的图G原创 2020-11-26 19:11:19 · 511 阅读 · 0 评论 -
数据结构 第七章(学习笔记一(图))
图图的定义图的其他基本概念无向图&有向图完全图子图连通图&强连通图生成树&生成森林稀疏图&稠密图顶点的度权&网有向树路径&路径长度&回路图的定义图(Graph)是由顶点 (Vertex) 的有穷非空集合 和顶点之间 边 的集合组成,通常表示为:G(V, E) , 其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。|V|表示图G中顶点的个数,也称为图G的阶;|E| 表示图G中边的条数。V = {A,B,C,D,E},|V| = 5原创 2020-11-24 19:31:51 · 1070 阅读 · 1 评论 -
数据结构 第六章(学习笔记四(哈夫曼树))
哈夫曼树哈夫曼树的定义构造哈夫曼树哈夫曼编码哈夫曼树的定义设二叉树具有n个带权值的叶节点,那么从根节点到各个叶节点的路径长度与相应节点权值的乘积的和,叫做二叉树的 带权路径长度。权: 权代表的是叶子结点的数据信息,是具体的值,也就是结点所储存的值。具有最小带权路径长度的二叉树称为 哈夫曼树 (也称最优数)。相同的叶节点构造出不同的二叉树构造哈夫曼树构造哈夫曼树的 原则:① 权值越大的叶节点越靠近根节点;② 权值越小的叶节点越远离根节点。构造哈夫曼树的 过程:哈夫曼编码规定哈原创 2020-11-19 17:40:00 · 2398 阅读 · 4 评论 -
数据结构 第六章(学习笔记三(线索二叉树))
回顾对于具有n个节点的二叉树,采用二叉链存储时,每个节点有两个指针域,总共有 2n 个指针域。其中只有 n-1 个节点被有效指针指向,即有 n-1 个非空指针域。所以共有 2n - (n-1) = n+1 个空链域。除根节点 (根节点没有指针指向)外,每个节点都有且仅有一个指向自己的指针,所以N个节点的二叉树,需要N-1个指针域,则空指针域有N+1个。相关概念① 采用某种方法遍历二叉树的结果是一个节点的 线性序列 。② 修改空链域,改为存放指向节点的前趋和后继节点的地址。③ 这样的指向该原创 2020-11-19 17:21:00 · 558 阅读 · 0 评论 -
数据结构 第六章(学习笔记二(二叉树))
二叉树二叉树的定义二叉树是有限的结点集合 (递归定义 )① 这个集合或者是空;② 或者由一个根结点和两颗互不相交的称为 左子树 和 右子树 的二叉树组成。二叉树的五种基本形态二叉树和二次树区别① 度不同度为2的树要求每个结点最多只能有两棵子树,并且至少有一个结点有两棵子树。二叉树的要求是度不超过2,结点最多有两个叉,可以是1或者0。② 分支不同度为2的树有两个分支,但分支没有左右之分;一棵二叉树也有两个分支,但有左右之分,左右子树的次序不能随意颠倒。③ 次序不同度为2的树从形式上看原创 2020-11-18 09:45:15 · 1148 阅读 · 0 评论 -
数据结构 第六章(学习笔记一(树))
树树的概念树的定义树的实际应用树的逻辑表示树的基本术语树的性质树的运算和存储结构树的基本运算树的遍历树的存储结构树的概念树的定义树的形式化定义: T = {D, R} (D表示 数据对象,R 表示数据关系)D是包含n个节点的有限集合(n≥0)。当n = 0时为空树,否则关系 R 满足以下条件:① 有且仅有一个节点 d0 ∈ D,它对于关系R来说没有前趋节点,节点d0称作树的根节点。② 除根节点外每个节点有且仅有一个前趋节点。③ D中每个节点可以有零个或多个后继节点 。树的递归定义: 树是由n原创 2020-11-10 17:08:01 · 592 阅读 · 0 评论 -
数据结构 第五章(学习笔记一(数组与广义表))
数组数组的定义1:一个 N 维数组是受 N 组线性关系约束的线性表。二维数组的逻辑结构可形式地描述为:2_ARRAY(D,R)其中 D={aij} | i=0,1,…,b1-1; j=0,1,…,b2-1;aij∈D0}R={Row,Col}Row={<aij,ai,j+1>|0<=i<=b1-1;0<=j<=b2-2;aij,ai,j+1∈D0}ai,j+1是aij在行关系中的后继元素。Col={<aij,ai+1,j>|0<=i<原创 2020-11-06 20:34:23 · 443 阅读 · 0 评论 -
数据结构 第三章(学习笔记四(链队列和循环队列))
队列的定义队列和栈相反,队列(queue)是一种先进先出(FIFO:first in first out)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。队列和我们日常生活中的排队是一致的,最早进入队列的元素最早离开。在队列中,允许插入的一端叫队尾(rear),允许删除的一端称为队头(front)用链表表示队列,即链队列链队列的操作即为单链表的插入和删除操作的特殊情况,只是尚需修改尾指针和头指针。C语言实现链队列完整代码#include <stdio.h>#includ原创 2020-11-03 16:52:19 · 262 阅读 · 0 评论 -
数据结构 第三章(学习笔记三(表达式求值))
刚刚学习C语言的时候我们都写过计算器,但是当时写的计算器只能进行一步四则运算,对于一次输入类似这种(1+2)*3+4的运算则没有办法计算。本篇博客利用栈这种数据结构实现了支持带括号的表达式求值计算器。C语言实现表达式求值的完整代码#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>typedef int ElemType;#define STACK_I原创 2020-11-03 16:14:13 · 154 阅读 · 0 评论 -
数据结构 第三章(学习笔记二(迷宫求解))
《数据结构》严蔚敏版用栈实现迷宫求解问题求迷宫中从入口到出口的所有路径是一个经典的程序设计问题。由于计算机解决迷宫问题时,通常用的是“穷举求解”的方法,即从口出发,顺某方向向前探索,若能走通,则继续往前走;否则沿原入口路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中应用栈。程序中,建立二维数组为迷宫,0为墙壁,1为可以通行的道路。算法的基本思想是:若当前位置“可通”,原创 2020-10-27 16:49:06 · 499 阅读 · 2 评论 -
数据结构 第三章(学习笔记一(顺序栈和链栈))
什么是栈栈是限定只能在表的一端进行插入或删除操作的线性表。允许插入、删除操作的一端是栈顶、另一端是栈顶。一般将插入和删除操作称为入栈和出栈。现实生活中有很多类似于栈的操作,比如洗碗的时候,将洗干净的碗一个接一个的往上放(相当于入栈),取碗时,则从上面一个接一个往下取(相当于出栈)。我们放碗的顺序是12345、取碗的顺序是54321,放碗的时候必须按照从下往上的顺序放,不能先放上面的再放下面的,取得时候必须从上往下取。特点:限制在表的一端操作,后入先出(LIFO,即 Last In First原创 2020-10-18 11:31:54 · 316 阅读 · 0 评论 -
数据结构 第二章(学习笔记三(一元多项式的表示及相加))
线性表(一元多项式的表示及相加)运用线性表的链式存储结构以及链表的基本操作,实现一元多项式相加我们可以根据自己的需求分别输入两个一元多项式,并且能够实现显示输入的一元多项式,再将这两个一元多项式相加,输出结果。输入的要求是按照指数从小到大进行输入,并且项数必须为正整数,指数需为整数,系数为双精度型且不能为0。C++实现一元多项式相加代码#include<iostream>using namespace std;struct ListNode { double coef;//系数原创 2020-10-10 15:09:43 · 386 阅读 · 0 评论 -
数据结构 第二章(学习笔记二(链表))
线性表之链式存储(单链表)C语言实现单链表基本操作#include<stdio.h>#include<stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#pragma warning(disable:4996)using namespace std;typedef int Status;原创 2020-10-07 20:13:04 · 289 阅读 · 0 评论 -
数据结构 第二章(学习笔记一(顺序表))
线性表之顺序存储线性表线性表(linear list)是最基本、最简单、也是最常用的一种数据结构。线性表是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表是具有相同特征的数据元素的一个有限序列。**线性表(linear list)**由n(n>=0)个数据元素(结点)a1,a2,…,an组成的有限序列线性表中元素的个数n(n≥0)称为线性表的长度,n=0时称为空表。对于非空的线性表或线性结构,特点为:1.存在唯一的一个被称作"第一个"的数据元素;2.存在唯一的一原创 2020-10-04 13:19:00 · 832 阅读 · 0 评论 -
数据结构 第一章(学习笔记)
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。1.掌握数据、数据元素、抽象数据类型、数据结构、数据的逻辑结构与存储结构等概念。数据(Data):是客观事物的符号表示。在计算机科学中指的是所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素(Data Element):是数据的基本单位,在程序中通常作为一个整体来进行考虑和处理,有时也称之为结点、顶点或记录。数据项(Data Item):是数据元素的组成部分,是对客观事物某一方面特性的数据描述,是数原创 2020-09-07 16:04:03 · 2123 阅读 · 3 评论