![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
基于MOOC平台上浙大的课程
藕丝炖刺猬
做该做的事才会开心吧
展开
-
平衡二叉树图解-实现
目录平衡二叉树的定义平衡二叉树的调整平衡二叉树的定义平衡二叉树的高度能达到log2n吗?设 nh 高度为h的平衡二叉树的最少结点数。结点数最少时:结构定义如下:typedef struct AVLNode *AVLTree;typedef int ElementType;struct AVLNode { ElementType Data; AVLTree Left; AVLTree Right; int Height;};...原创 2020-08-11 18:05:51 · 442 阅读 · 0 评论 -
二叉搜索树
查找问题: 静态查找与动态查找 针对动态查找,数据如何组织?利用二叉搜索树可以实现高效的动态查找二叉搜索树操作的特别函数:Position Find( ElementType X, BinTree BST ):从二叉搜索树BST 中查找元素X,返回其所在结点的地址; Position FindMin( BinTree BST ):从二叉搜索树BST中查找并返回 最小元素所在结点的地址; Position FindMax( BinTree BST ) :从二叉搜索树BS...原创 2020-07-30 17:00:26 · 154 阅读 · 0 评论 -
树的同构
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N(≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1...原创 2020-07-26 16:47:11 · 186 阅读 · 0 评论 -
二叉树—遍历非递归算法
#include <iostream>#include <stack>using namespace std;typedef struct TreeNode* BinTree;//typedef BinTree Position; struct TreeNode { char Data; BinTree Left; BinTree Right;};/*以前序遍历的形式输入来创建树*/void CreatBinTree(Bin...原创 2020-07-25 10:28:52 · 420 阅读 · 0 评论 -
二叉树基本储存和遍历(递归)
二叉树的顺序储存适用于完全二叉树,普通二叉树为了实现基本的访问实现有相当大的空间浪费下面是更常用的链表储存,以及三种基本遍历的实现:#include <iostream>using namespace std;typedef struct TreeNode* BinTree; //typedef BinTree Position; struct TreeNode { char Data; BinTree Le...原创 2020-07-22 16:46:23 · 240 阅读 · 0 评论 -
02-线性结构4 Pop Sequence
Given a stack which can keepMnumbers at most. PushNnumbers in the order of 1, 2, 3, ...,Nand pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, ifMis 5 andNis 7, we can o...原创 2020-07-21 18:23:53 · 310 阅读 · 0 评论 -
树和树的表示
什么是树?客观世界中许多事物存在层次关系人类社会家谱 社会组织结构 图书信息管理分层次组织在管理上具有更高的效率!大规模数据,顺序查找与二分查找效率差别非常大。二分查找的启示?数据也可以以树的形式存储组织之后会学习的二分查找树与二分查找效率上可以达到一致,但是查找树在树里面插入删除结点比数组要方便得多。树的定义子树是不相交的; 除了根结点外,每个结点有且仅有一个父结点; 一颗N个结点的树有N-1条边有一种说法,树是保证各结点连接的最少的连接方式...原创 2020-07-20 17:02:32 · 170 阅读 · 0 评论 -
线性数据结构—队列
队列的顺序储存实现通常采用循环队列实现,front和rear指针的移动采用“加1取余”法来体现“循环”写代码时会发现一个问题,队列空满的判断条件是怎么样的?由于采用了取余的思路,最终会导致队列空满时 front和rear均相对,最终无法通过rear与front来判断队列空满状态。为什么会出现这样的情况?大小为n的数组实现的队列中可以存放的数据状态有n+1种(0->n),但是rear front所能描述的状态最多只能由n种解决方案:1)使用额外标记:Size或者tag域2原创 2020-07-16 20:31:29 · 187 阅读 · 0 评论 -
线性数据结构——堆栈小结
首先栈的链式存储结构实际上就是一个单链表,叫做链栈。插入和删除操作只能在链栈的栈顶进行。栈顶指针Top应该在链表的哪一头?显然应该是在头部,尾部无法进行删除操作(无法找到它的前一个结点)代码实现如下:typedef struct SNode* Stack;struct SNode{ ElementType Date; struct SNode *Next;}; Stack CreateStack(){//建立一个头节点,返回指针 Stack S; S = new struc原创 2020-07-13 16:29:18 · 186 阅读 · 0 评论 -
线性数据结构——栈的顺序存储结构
堆栈最基本的特征就是先进后出,后进先出通过数组来实现堆栈最基本的堆栈通过一个整型变量来记录栈顶,-1表示栈为空typedef int Position;struct SNode { ElementType *Data; /* 存储元素的数组 */ Position Top; /* 栈顶指针 */ int MaxSize; /* 堆栈最大容量 */};typedef struct SNode *Stack; Stack CreateStac原创 2020-07-07 15:02:18 · 290 阅读 · 0 评论 -
01-复杂度1 最大子列和问题 (20分)
01-复杂度1最大子列和问题(20分)给定K个整数组成的序列{N1,N2, ...,NK},“连续子列”被定义为{Ni,Ni+1, ...,Nj},其中1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。各组测...原创 2020-07-02 14:54:38 · 397 阅读 · 1 评论