数据结构与算法
数据结构虽然枯燥,但是在日后编程中却是基础中的基础。
jjjstephen
就读于天津大学,在做视觉检测相关研究。
技能:软件开发
正在开发技能:ML&DL Paper撰写
待开发技能:硬件开发、硬件设计
展开
-
最小生成树系列之prim的深入浅出的理解(LeetCode1135:联通所有城市的最低成本例题)
最小生成树系列之prim的深入浅出的理解1.最小生成树基本概念(1)最下生成树概念的解读官方概念:重新解读概念:(2)最小生成树的解读(重中之重!!!!)算法思路解读算法代码实现1.最小生成树基本概念(1)最下生成树概念的解读官方概念:• 最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。• 最小生成树可以用prim算法(今天的主角!!!!!!!)和kruskal算法(下一节来讲)求出。• 以上全都是瞎**,(我猜,各原创 2020-10-27 20:04:20 · 1084 阅读 · 0 评论 -
二叉树(前序遍历、后序遍历、中序遍历、二叉树的深度计算)
前序遍历规则:若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再前序遍历右子树。中序遍历规则:若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根节点),中序遍历根节点的左子树,然后访问根节点,最后中序遍历右子树。后序遍历:若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问右子树,最后访问根结点。test.hpp#ifndef TEST_H_#define TEST_H_#include<iostream>#include"malloc.原创 2020-09-10 09:25:26 · 690 阅读 · 0 评论 -
树(普通树)的C代码实现
由于树(普通树)的结构复杂,难以以偏概全,所以在插入子树函数中书写不当,能力所限,欢迎一起交流!树的抽象数据类型 ADT 树(Tree) Data 树是由一个根节点和若干棵子树构成。树中结点具有相同数据类型及层次关系 Operation InitTree(*T):构造空树 DestroyTree(*T):销毁树 CreateTree(*T,definition):按definition中给出的定义来构造树 ClearTree(*T):若树T存在,则将树T清为空树 TreeEm原创 2020-09-06 17:24:42 · 2862 阅读 · 0 评论 -
串的C代码实现
串的抽象数据类型 ADT 串(string) Data 串中元素仅由一个字符组成,相邻元素具有前去和后继的关系 Operation StrAssign(T,*char):形成一个其值等于字符串常量chars的串T StrCopy(T,S):串S存在,由串S复制得串T ClearString(S):串S存在,将串清空 StringEmpty(S):若串S存在,返回true,否则返回false StringLength(S):返回串S的元素个数,即串的长度 Strcompare(S,T):原创 2020-08-25 10:23:32 · 654 阅读 · 0 评论 -
循环队列c代码实现
循环队列的抽象数据类型 ADT 队列(Queue) Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继的关系 Operator InitQueue(*Q):初始化操作,建立一个空队列Q DestroyQueue(*Q):若队列存在则销毁他 ClearQueue(*Q):将队列清空 QueueEmpty(Q):若队列为空,返回true。否则返回false GetHead(Q,*e):若队列存在且非空,用e返回队列Q的队头元素 EnQueue(*Q,e):若队列存原创 2020-08-20 15:41:55 · 3582 阅读 · 1 评论 -
队列的链式存储结构C代码实现
队列的抽象数据类型ADT 队列(Queue) Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继的关系 Operator InitQueue(*Q):初始化操作,建立一个空队列Q DestroyQueue(*Q):若队列存在则销毁他 ClearQueue(*Q):将队列清空 QueueEmpty(Q):若队列为空,返回true。否则返回false GetHead(Q,*e):若队列存在且非空,用e返回队列Q的队头元素 EnQueue(*Q,e):若队列存在,插原创 2020-08-20 14:39:38 · 333 阅读 · 0 评论 -
栈的应用---中缀表达式转为后缀表达式
中缀表达式转为后缀表达式规则: 从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级, 是右括号或是优先级不高于栈顶符号(乘除优先加减),则栈顶元素一次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。*/test.hpp#ifndef TEST_H_#define TEST_H_#include"malloc.h"#define MAXSIZE 100typedef char SElemType;type原创 2020-08-19 11:08:11 · 125 阅读 · 0 评论 -
栈的应用---后缀表达式c代码实现
后缀表达式计算结果规则: 从左到右遍历表达式的每个数字和符号,遍历到数字就进栈,遍历到符号,就将处于栈顶的两个数字出栈, 进行运算,运算结果进栈,一直到最终获得结果仍然用的栈的基本数据结构test.hpp#ifndef TEST_H_#define TEST_H_#include"malloc.h"#define MAXSIZE 100typedef float SElemType;typedef struct{ SElemType data[MAXSIZE]; int to原创 2020-08-18 11:18:06 · 373 阅读 · 0 评论 -
栈的链式存储结构C代码实现
ADT 栈(stack) Data 同线性表。元素具有相同地方类型,相邻的元素具有前驱和后继关系 Operation InitStack(*S):初始化操作,建立一个空栈S DestroyStack(*S):若栈存在,则销毁他 ClearStack(*S):将栈清空 StackEmpty(S):若栈为空,返回true。否则返回false GetTop(S,*e);若栈存在且非空,用e返回S的栈顶元素 Push(*S,e):若栈S存在,插入新元素e到栈S中并成为栈顶元素 P原创 2020-08-17 10:20:16 · 349 阅读 · 0 评论 -
栈的顺序存储结构的改进写法
ADT 栈(stack) Data 同线性表。元素具有相同地方类型,相邻的元素具有前驱和后继关系 Operation InitStack(*S):初始化操作,建立一个空栈S DestroyStack(*S):若栈存在,则销毁他 ClearStack(*S):将栈清空 StackEmpty(S):若栈为空,返回true。否则返回false GetTop(S,*e);若栈存在且非空,用e返回S的栈顶元素 Push(*S,e):若栈S存在,插入新元素e到栈S中并成为栈顶元素 P原创 2020-08-14 10:55:31 · 114 阅读 · 0 评论 -
栈的顺序存储结构的一种(传统)C代码实现
一、栈的抽象数据类型ADT 栈(stack) Data 同线性表。元素具有相同地方类型,相邻的元素具有前驱和后继关系 Operation InitStack(*S):初始化操作,建立一个空栈S DestroyStack(*S):若栈存在,则销毁他 ClearStack(*S):将栈清空 StackEmpty(S):若栈为空,返回true。否则返回false GetTop(S,*e);若栈存在且非空,用e返回S的栈顶元素 Push(*S,e):若栈S存在,插入新元素e到栈S中原创 2020-08-13 11:05:04 · 116 阅读 · 0 评论 -
连接两个单链表的一种解法
单链表习题该解法并非最优,时间复杂度为O(n)。test.h#ifndef TEST_H_#define TEST_H_#include<malloc.h>typedef int ElemType;typedef struct Node{ ElemType data; struct Node * next;}Node;typedef struct Node * Linklist;//利用尾插法创建线性表整表Linklist createOneList(const i原创 2020-08-11 15:45:00 · 1240 阅读 · 0 评论 -
约瑟夫环的一种解法(源码和学习讲义有所不同)
约瑟夫问题:据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直原创 2020-08-10 17:25:09 · 89 阅读 · 0 评论 -
静态链表c代码实现(根据书本进行了部分修改,修改部分代码有注解)
静态链表的抽象数据类型ADT 线性表(List) Data 线性表的数据对象集合为{a1,a2,…,an},每个元素的类型均为DataType。其中,除了第一个元素a1外, 每个元素有且只有一个直接的前驱,除了最后一个元素,每个元素有且只有一个直接后继元素。数据 元素之间的关系是一对一的关系。 Operator InitList(*L):初始化操作,建立一个空的线性表L ListEmpty(L):若线性表为空,返回true,否则返回false ClearList(*L):将线性表清原创 2020-08-07 15:13:23 · 124 阅读 · 0 评论 -
单链表的C代码实现(根据书本进行了部分修改,修改部分代码有注解)
单链表抽象数据类型ADT 线性表(List)Data线性表的数据对象集合为{a1,a2,…,an},每个元素的类型均为DataType。其中,除了第一个元素a1外,每个元素有且只有一个直接的前驱,除了最后一个元素,每个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。OperatorInitList(*L):初始化操作,建立一个空的线性表LListEmpty(L):若线性表为空,返回true,否则返回falseClearList(*L):将线性表清空GetElem(L,I,原创 2020-08-06 16:52:23 · 139 阅读 · 0 评论 -
线性表的C代码实现(根据书本进行了部分修改,修改部分代码有注解)
线性表的抽象数据类型ADT 线性表(List)Data 线性表的数据对象集合为{a1,a2,...,an},每个元素的类型均为DataType。其中,除了第一个元素a1外, 每个元素有且只有一个直接的前驱,除了最后一个元素,每个元素有且只有一个直接后继元素。数据 元素之间的关系是一对一的关系。Operator InitList(*L):初始化操作,建立一个空的线性表L ListEmpty(L):若线性表为空,返回true,否则返回false ClearList(*L):将线性表清空 Ge原创 2020-08-05 16:36:58 · 219 阅读 · 0 评论