数据结构
rasotae
普通码农
展开
-
622. 设计循环队列
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取元素。如果队列为空,返回 -1 。Rear: 获取队尾元素。如果队列为空,返回 -1 。enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。deQueue()原创 2021-01-05 17:51:02 · 146 阅读 · 0 评论 -
完整的逆波兰式计算
这是对之前的逆波兰式计算的修改,更改思路,使得可以处理多层函数和表达式嵌套的情况,如ln(ln(3))这里是采用将数学函数和乘方号同样看成是一种优先级较高的操作符,进栈情况满足一般的逆波兰式,需要注意的就是小数点和乘方号的区分。同样,这里采用数字栈和符号栈来同时表示一个表达式的逆波兰式,在数字栈中的符号位置使用MARK来标识,遇到MARK时,就去符号栈找对应的符号来计算即可。中体思路还是和...原创 2018-10-18 19:49:36 · 3685 阅读 · 1 评论 -
堆排序
堆排序堆是一个数组 -- 看成一个近似的完全二叉树A.length 给出数组元素个数A.heap_size 表示有多少个堆元素存储在该数组中虽然A[1...A.length] 可能都存有数据,但是A[1...A.heap_size] 中存放的是堆的有效元素如下可以计算出某一个节点的父亲,左右孩子PARENT(i)return floor(i / 2);LE...原创 2018-10-05 21:00:11 · 133 阅读 · 0 评论 -
图讲解
图图(Graph)是由顶点的有穷非空集合和顶点之间的边的集合组成,通常表示为:G(V, E), V为顶点集,E为边集,G为图图的定义图(Graph)是由顶点的有穷非空集合和顶点之间的边的集合组成,通常表示为:G(V, E), V为顶点集,E为边集,G为图几点说明1)线性表中的数据元素称元素,树中称结点,图中则称为顶点(Vertex)2)线性表可以没有数据元素,称空表,树可以没有结点...原创 2018-09-21 21:05:45 · 284 阅读 · 0 评论 -
Prim算法
#include<stdio.h>#include<stdlib.h>#define MAXVEX 100#define INFINITY 65535typedef struct{ int vexs[MAXVEX]; int arc[MAXVEX][MAXVEX]; int numVertexes,numEdges;}MGraph;void cre...原创 2018-09-21 19:47:04 · 135 阅读 · 0 评论 -
Kruskal算法
#include<stdio.h>#include<stdlib.h>#define MAXVEX 10#define MAXEDGE 20#define INFINITY 65535typedef struct{ int vexs[MAXVEX]; int arc[MAXVEX][MAXVEX]; int numVertexes,numEdges;}...原创 2018-09-21 19:46:26 · 190 阅读 · 0 评论 -
Floyd算法
typedef int Pathmatirx[MAXVEX][MAXVEX];typedef int ShortPathTable[MAXVEX][MAXVEX];//Floyd 算法,求网图G中各顶点到其余顶点 w 最短路径P[v][w] 及带权长度D[v][w]void ShortestPath_Floyd(MGraph G, Pathmatirx *P, ShortPathTabl...原创 2018-09-21 19:45:41 · 106 阅读 · 0 评论 -
Dijkstra算法
#define MAXVEX 9#define INFINITY 65535typedef int Pathmatirx[MAXVEX]; //用于存储最短路径下标的数组typedef int ShortPathTable[MAXVEX]; //用于存储到各点最短路径的权值和 //Dijkstra算法,求有向网G的v0顶点...原创 2018-09-21 19:44:59 · 203 阅读 · 0 评论 -
树讲解
树树(Tree)是n个结点的有限集,在任意一颗非空树种有一下特点1)有且仅有一个根(Root)结点2)当n > 1时,其余结点可分为m(m > 0)个互不相交的有限集,其中每一个集合本身又是一个树,称为根的子树(SubTree)树的定义是一个递归的定义,即在树的定义种又用到树的概念,可以反应出树的固有特性一般,分等级的分类方案都可以用层次结构来表示,即可以使用树结构树结...原创 2018-09-21 19:40:08 · 695 阅读 · 0 评论 -
串讲解
串串的类型定义串是由零个或多个字符组成的有限序列,串中字符的数目n称为串的长度。零个字符的串称为空串,它的长度为零串中任意个连续的字符组成的子序列称为串的子串,包含子串的串称主串通常称字符在序列中的序号为该字符在串中的位置称两个串是相等的,当且仅当这两个串的值相等,即对应位置字符相同,长度相同NOTE 串值必须用单引号括起来,但是单引号并不属于串串的常见基本操作由查找子串,求取...原创 2018-09-21 19:39:19 · 262 阅读 · 0 评论 -
队列
队列队列是一种先进先出(FIFO)的线性表,只允许在表的一端进行插入,在另一端进行删除在队列中,允许插入的一端叫队尾,允许删除的一端称队头。链队列一个链队列需要两个分别指示队头和队尾的指针(头指针和尾指针)才能唯一确定,为了操作方便,增添一个头结点,令头指针指向头结点由此,空链队列的判决条件为头指针和尾指针均指向头结点//单链队列的存储结构typedef struct QNode...原创 2018-09-21 19:38:41 · 239 阅读 · 0 评论 -
栈讲解
栈栈 stack 限定仅在表尾进行插入删除操作的线性表,表尾称栈顶 top 表头称栈底 bottom栈又称先进后出的线性表 LIFO栈抽象数据类型定义ADT Stack{ 数据对象 数据关系 基本操作 InitStack(&S) //构造空栈 DestroyStack(&S) //销毁栈 ClearStack(&S) //清空栈 Stac...原创 2018-09-21 19:37:49 · 683 阅读 · 0 评论 -
线性表讲解
第二章 线性表线性结构特点 : 在数据元素非空的有限集中1 存在唯一一个第一和最后一个元素2 除第一个元素之外,集合中的每个元素都只有一个前驱3 除最好一个元素之外,集合中每个元素都只有一个后继线性表:n 个数据元素的有限序列抽象数据线性表定义ADT list{ 数据对象 D : = {......} 数据关系 基本操作{ InitList(&L); //构造...原创 2018-09-21 19:35:48 · 301 阅读 · 0 评论 -
逆波兰式的计算(含有数学函数和浮点数)
这里的实现较为简单,也只能处理没有嵌套的表达式的情况。相对完善的代码请见另一篇博客--完整的逆波兰式计算,修正了函数嵌套时出现的问题,调整的一定的处理方式,使得代码更加简洁。不过大体思路与本代码基本相同。//本代码提供的测试数据//9.4+(3.27-1.05)*3.44+10/2.1+cos(0.52)+ln(3)/log(5)+3^2#include<stdio.h&...原创 2018-10-03 12:09:21 · 1736 阅读 · 0 评论 -
查找
查找查找(Search)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素查找概论1)查找表(Search Table)是由同一类型的数据元素或记录构成的集合2)关键字(Key)是数据元素中某个数据项的值,又称为键值,用它可以标识一个数据元素,也可以标识一个记录的某个数据项(字段),称为关键码若此关键字可以唯一地标识一个记录,则称此关键字为主关键字(Primary ...原创 2018-09-23 20:26:21 · 120 阅读 · 0 评论