
数据结构
浙大课程学习笔记
@今朝
学无止境
展开
-
【浙大数据结构学习笔记】习题选讲:逆转链表
要求: 给一个单链表的头结点Head和一个整数K,要求每K个结点逆转一下,并将逆转后的头结点返回给用户分析: 为了方便操作,头结点Head是空结点,头结点后一个结点才是第一个结点。用三个结点指针new、old、temp辅助实现链表逆转。其中,结点指针new指向已完成逆转的链表的头结点,结点指针old指向未完成链表逆转的老链表的头结点,结点指针temp指向old的下一个结点,用于记录地址。K个结点逆转用K次循环实现,在每次循环中调整结点指针的指向。代码:Ptr ReverseLinkedList(Pt原创 2020-08-23 09:44:11 · 350 阅读 · 0 评论 -
【浙大数据结构学习笔记】4.2 平衡二叉树
目录平衡二叉树平衡二叉树的调整左单旋右单旋左右双旋右左双旋插入平衡二叉树平衡因子: BF=hL - hR ,即左右树高的差。定义: 空树,或者平衡因子 | BF(T) |<=1#define ElementType int;typedef struct AVLNode *Position;typedef Position AVLTree;struct AVLNode{ ElementType Data; AVLTree Left,Right; int Height;};平衡二原创 2020-08-22 16:49:18 · 382 阅读 · 0 评论 -
【浙大数据结构学习笔记】4.1 二叉搜索树
目录二叉搜索树查找查找最值插入删除二叉搜索树定义:非空左子树的所有键值小于其根结点的键值非空右子树的所有键值大于其根结点的键值左右子树都是二叉搜索树#define ElementType inttypedef struct TNode *BinTree;typedef BinTree Position;struct TNode{ ElementType Data; BinTree Left,Right;};查找Position Find(ElementType X,Bi原创 2020-08-22 16:16:10 · 412 阅读 · 0 评论 -
【浙大数据结构学习笔记】3.4 二叉树的遍历
目录3.4 二叉树的遍历先序遍历中序遍历后序遍历层次遍历3.4 二叉树的遍历有四种方法:先序、中序、后序和层次遍历。用链式存储结构:typedef struct TreeNode *Position;typedef Position BinTree;struct TreeNode{ Element Data; BinTree Left,Right;};先序遍历先访问根结点,再遍历左子树、右子树。void PreOrderTraversal(BinTree BT){ if(BT)原创 2020-08-16 15:42:09 · 301 阅读 · 0 评论 -
【浙大数据结构学习笔记】3.3 二叉树
目录二叉树特殊二叉树存储结构顺序存储结构链式存储结构二叉树特殊二叉树斜二叉树:除叶子结点外,其余结点都只有左子树或者右子树。完美二叉树或满二叉树:除叶子结点外,其余结点都既有左子树又有右子树。完全二叉树:按从上至下,从左至右的顺序给结点编号,编号为 i 的结点位置与满二叉树中编号为 i 的结点位置相同。存储结构可以用顺序存储结构和链式存储结构。顺序存储结构用数组进行存储,这样空白结点也需要存储,造成空间浪费。链式存储结构相比顺序存储结构,更能节省空间。typedef struc原创 2020-08-15 21:15:27 · 180 阅读 · 0 评论 -
【浙大数据结构学习笔记】3.2 树的查找
目录3.2 树的查找静态查找之顺序查找动态查找之二分查找3.2 树的查找树的基本操作之一就是查找,它分为两类:静态查找和动态查找。静态查找: 查找的同时集合中的记录没有删除和插入操作动态查找: 查找的同时集合中的记录有删除和插入操作静态查找之顺序查找动态查找之二分查找...原创 2020-08-15 20:50:32 · 259 阅读 · 0 评论 -
【浙大数据结构学习笔记】3.1 树
目录树树的定义什么是非树树的查找三级目录树树的定义定义: n(n>=0)个结点构成的有限集合当n=0时,为空树对任意一颗非空树,具有以下性质;树的管理方法: 分层次组织什么是非树树的查找三级目录...原创 2020-08-15 20:07:47 · 120 阅读 · 0 评论 -
【浙大数据结构学习笔记】1.3、什么是数据结构
最大子序列和问题陈越老师分别介绍了四种算法,复杂度逐步降低。由最初的NNN到N*N再到Nlog N,最后降为N。后面两种算法没有理解,回顾时再看。nt MaxSubSeqSum1(int A[],int N){ int ThisSum,MaxSum=0; for(int i=0;i<N;i++) { for(int j=i;j<N;j++) { for(int k=i;k<=j;k++) { ThisSum+=A[k]; if(ThisSum原创 2020-08-08 09:39:00 · 182 阅读 · 0 评论 -
【浙大数据结构学习笔记】1.2、什么是算法
定义:例1 :选择排序的伪码描述什么是好的算法?空间复杂度S(n): 根据算法写成的程序在执行时占用存储单元的长度。这个长度 往往与输入数据的规模有关 。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断时间复杂度O(n): 根据算法写成的程序在执行时耗费时间的长度。这个长度 往往也与输入数据的规模有关 。时间复杂度过高的低效算法可能导致我们在有生之年都等不到运行结果递归输出 1~100000 :调用函数之前,系统需要将当前这个函数所有的现有的状态都存到系统内存原创 2020-08-08 09:38:11 · 223 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.4 一元多项式的加乘法运算实现
目录2.4 一元多项式的加乘法运算实现加法运算乘法运算代码实现运行结果2.4 一元多项式的加乘法运算实现加法运算算法:首先判断多项式P1当前项指数和多项式 P2当前项指数的大小关系多项式P1当前项的指数比多项式P2当前项的大: 将多项式P1当前项插在结果多项式后面,P1的位置指针后移,P2的不变。多项式P1当前项的指数比多项式P2当前项的小: 将多项式P2当前项插在结果多项式后面,P2的位置指针后移,P1的不变。多项式P1当前项的指数和多项式P2当前项的一样大: 如果多项式P1当前项的系数和原创 2020-08-07 12:17:16 · 642 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.3.2 队列的链式存储实现
目录2.3.2 队列的链式存储结构二级目录三级目录2.3.2 队列的链式存储结构二级目录三级目录原创 2020-08-05 12:59:04 · 209 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.3.1 队列的顺序结构存储实现
目录2.3.1 队列的顺序结构存储实现什么是队列队列的顺序结构存储实现非顺环队列顺环队列2.3.1 队列的顺序结构存储实现什么是队列定义: 具有一定操作约束的线性表。只能在一端插入,在另一端删除。插入数据: 入队列删除数据: 出队列特点: 先进先出(FIFO)队列的顺序结构存储实现队列的顺序存储结构通常由一个一位数组和一个记录队列头元素位置的变量front和一个记录队列尾元素位置的变量rear组成。非顺环队列插入元素,rear+1;删除元素,front+1判断队列空:rear== f原创 2020-08-01 17:16:54 · 290 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.2.2-例题:实现用一个数组实现两个堆栈,要求最大的利用数组空间
题目: 请用一个数组实现两个堆栈,要求最大的利用数组空间,使数组只要有空间入栈操作就可以成功。思路:中间为栈底,两头为栈顶两头为栈底,栈顶向内扩张很明显,思路2符合要求。 思路1 虽然实现了用一个数组实现两个堆栈,但是当stack1满,而stack2未满时,再无法向stack1插入元素,同时因stack2的剩余空间无法得到使用而造成了空间浪费。思路2不存在stack1或者stack2满的限制,直到两个堆栈占满整个数组空间才无法继续压入元素。因此,思路2 不仅实现了用一个数组实现两个堆原创 2020-08-01 16:22:48 · 468 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.2.3 堆栈的链式结构存储实现
目录2.2.3 堆栈的链式结构存储实现代码实现运行结果2.2.3 堆栈的链式结构存储实现定义: 栈的链式存储结构实际上是一个单链表,又称链栈。插入和删除操作只能在栈顶(链表的尾部——表尾)进行。代码实现包括了建立空堆栈、入栈出栈和判断堆栈空。#include "stdio.h"#include "stdlib.h"#define ERROR -2typedef struct SNode *PtrToSNode;//ptr(pointer)指针的缩写 ,PtrToSNode——指向SNode原创 2020-08-01 10:22:35 · 234 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.2.2 堆栈的顺序结构存储实现
目录2.2.2 堆栈的顺序结构存储实现代码实现运行结果2.2.2 堆栈的顺序结构存储实现堆栈的顺序存储结构通常由一个一位数组和一个记录栈顶位置的变量组成。代码实现包括了建立空堆栈、入栈、出栈、判断栈空栈满等函数的实现。#include "stdio.h"#include "stdlib.h"#define ERROR -2typedef int Position; struct SNode{ int *Data; Position top; int MaxSize;};type原创 2020-08-01 09:20:43 · 217 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.2.1 什么是堆栈
目录2.2.1 什么是堆栈定义特点图示2.2.1 什么是堆栈定义堆栈是具有一定约束的线性表。它只能在一端(栈顶)进行插入和删除操作。插入数据:入栈删除数据: 出栈特点后出先入( Last In First Out)图示...原创 2020-08-01 08:42:17 · 166 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.1.4 广义表和多重链表
目录2.1.4 广义表和多重链表广义表多重链表稀疏矩阵2.1.4 广义表和多重链表广义表定义:广义表的元素不仅可以是一个单元数,还可以是另一个广义表。它是线性表的推广,线性表的n个元素都是基本的单元素。typedef struct GNode *GList; struct LNode{ int Tag;//标志域;1-广义表;0-单元素 union{//子表指针域SubList和单元素Data复用,即公用存储空间 int Data; GList SubLi原创 2020-07-29 18:27:32 · 439 阅读 · 1 评论 -
【浙大数据结构学习笔记】2.1.3 线性表的链式结构实现
目录2.1.3 线性表的链式结构实现求表长查找插入删除2.1.3 线性表的链式结构实现线性表的顺序存储结构的物理地址是相邻的,而线性表的链式存储结构的物理地址可以不相邻,通过“链”建立起数据元素之间的逻辑关系。typedef struct LNode *List; struct LNode{ int Data; List Next; };求表长int Length(List PtrL){ List p=PtrL; int j=0; while(p){ p=原创 2020-07-29 17:09:44 · 262 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.1.2 线性表的顺序存储实现
目录2.1.2 线性表的顺序存储实现什么是线性表线性表的顺序存储实现初始化查找插入删除展示测试主函数结果输出2.1.2 线性表的顺序存储实现什么是线性表由同种数据元素构成的有序序列的存储结构。线性表的元素个数称为表长;线性表没有元素时称为空表;线性表的起始位置称为表头,线性表的结束位置称为表尾。线性表的顺序存储实现#define MAXSIZE 10typedef struct LNode *List; struct LNode{ int Data[MAXSIZE]; i原创 2020-07-29 11:35:43 · 279 阅读 · 0 评论 -
【浙大数据结构学习笔记】2.1.1 引子——多项式的表示
目录2.1.1 引子——多项式的表示二级目录三级目录2.1.1 引子——多项式的表示二级目录f(x)=a0+a1x+⋯+an−1xn−1+f(x)=a_0+a_1x+\cdots+ a_n-1x^n-1+f(x)=a0+a1x+⋯+an−1xn−1+三级目录原创 2020-07-29 09:09:15 · 279 阅读 · 0 评论 -
【浙大数据结构学习笔记】1.1、什么是数据结构
目录浙大数据结构学习笔记之第一讲什么是数据结构什么是数据结构什么是算法最大子序列和问题浙大数据结构学习笔记之第一讲什么是数据结构什么是数据结构什么是数据结构?没有明确定义,陈越老师用 例1:如何摆放书架上的书籍 来引入。要求:图书的摆放要使两个相关操作得以方便实现:、操作1:新书怎么插入?操作2:已插入图书怎么寻找?相对不好的实现方法:随便放按照字母顺序进行查找这两类方法在数量大时都不易查找,量小时无所谓。相对较好的实现方法:操作1:新书怎么插入?将图书分为不同的类别,原创 2020-07-23 12:25:55 · 221 阅读 · 0 评论