∨∨坑逼数据结构课
就算过了一载春秋
等待着热泪盈眶的那一天
展开
-
笔记:单链表的倒置
问题背景:使用Shaffer编写的教材《数据结构与算法分析》的LList类,给LList类的实现添加一个成员函数,倒置线性表中元素的顺序。对于n个元素的线性表,算法的运行时间应该为Θ(n) 预备知识:表头结点:表中的第一个结点,数据域不存储任何信息,指针域存储指向第一个结点的指针。不被当做表中的实际元素。 正文: 教材中的LList类有表头结点,不再需要考虑空链表或...原创 2018-10-12 23:42:17 · 2522 阅读 · 0 评论 -
实验八 排序(插入排序、归并排序、快速排序)
发现一个不大不小的bug,每次第一种方法排完序后,第二、第三种排序时都是对已排好序的数组进行排序了。。所以应该借助一下temp数组,第一、二种方法排完序后将A数组还原成一开始无序的状态,比较时间代码及运行结果未修改。以下代码仅供参考2019-1-3更新------------------------------------------------------------------...原创 2019-01-01 21:11:47 · 2372 阅读 · 0 评论 -
并查集、实验六 图的应用
树的并查算法 实验六 图的应用 CCF-201709-4 通信网络一、树的并查算法使用并查集一般都有优化,合并和压缩,有的合并考虑树的高度,有的合并考虑根结点的权值等等。在这个例子中,用编号代表每个元素,数组array表示的是父亲的编号,par[x]=x时,x是所在的树的根。1、ParPtrTree.h#include<iostream>using namespac...原创 2018-12-15 15:37:08 · 866 阅读 · 1 评论 -
实验七 查找(启发式规则为转置的自组织线性表)
说明 启发式规则为转置的自组织线性表一、说明1、自组织线性表(self-organizing list):根据实际记录访问模式修改记录的顺序的线性表。2、管理自组织线性表的三个传统的启发式规则:计数、移至前端和转置。下例采用的是转置。3、相比较于实验一 线性表的物理实现(顺序表+单向链表),除了修改相应的命名外,增添了转置(transpose)和查找(find)操作。4、下列的...原创 2018-12-25 00:41:21 · 1254 阅读 · 0 评论 -
堆的物理实现(大根堆+小根堆)
说明 基于顺序表实现的堆一、说明1、堆是一颗完全二叉树,因此能用一维数组来存储堆,但堆本质上是一种实现了“局部有序”的树结构。2、最大堆:任何一个结点存储的值都大于或等于任意一个子结点存储的值。根结点存储着最大值。 最小堆:任何一个结点存储的值都小于或等于任意一个子结点存储的值。根结点存储着最小值。3、本文中存储堆的数组下标从0开始。则下标为i的左孩子结点为lc=2*i+...原创 2018-12-03 15:29:01 · 759 阅读 · 0 评论 -
实验五 图的物理实现(邻接矩阵)
2018-12-5更新邻接矩阵分为有向图邻接矩阵和无向图邻接矩阵,矩阵元素可以仅表示相应的边是否存在,也可表示相应边的权值。若是有向带权图的邻接矩阵,看到两种表示法,一种是不存在边的两个顶点i,j,matrix[i][j]=0或者+∞;另一种是matrix[i][i]=0,不存在边的两个顶点i,j,matrix[i][j]=+∞(i!=j)。具体采用哪种方法是根据实际需求来...原创 2018-11-28 16:17:25 · 1395 阅读 · 1 评论 -
实验五 图的物理实现(邻接表)
2018-12-4更新增添了memset函数对标记数组mark重置---------------------------------------------------------------------------------------------------------------------------------------------------说明 基于邻接...原创 2018-11-29 11:51:44 · 796 阅读 · 0 评论 -
例题:加权合并与路径压缩
题目:使用加权合并规则与路径压缩,对下列从0到15之间的数的等价对进行归并,并给出所得到的树的父指针表示法的数组表示。在初始情况下,集合中的每个元素分别在独立的等价类中。当两棵待归并的树的规模同样大时,使结点值较大的根结点作为值较小的根结点的子结点。(0,2)(1,2)(3,4)(3,1)(3,5)(9,11)(12,14)(3, 9)(4,14)(6,7)(8,10)(8,7)(7,0)(1...原创 2018-11-15 00:10:49 · 8734 阅读 · 6 评论 -
实验四 特殊二叉树的应用(二叉搜索树)
2018-11-20更新若是按照17号所改,则会出现新的问题,当不满足前两个条件且要删除的结点没有右子树时就无法正确求解。17号改条件的原因是:教材中提到,假设左子树的最大值为G,如果左子树的其他结点也有值G,那么选择G作为根结点就会导致一颗二叉树的左子树中具有与子树根结点值G相同的结点,不满足二叉树的性质。因此将删除操作修改为:需要删除的结点没有右儿子,那么就将左儿子提上去。 ...原创 2018-11-15 23:21:16 · 663 阅读 · 0 评论 -
实验三 二叉树的物理实现(二叉链表)
说明 基于链表实现的子结点表示法 参考资料一、说明:1、关于二叉链表,(百度百科上的自相矛盾了,引用日期:2018-11-8),也没找着一个确切的说法,有说两个指针一个指向左孩子一个右孩子的,也有说是两个指针一个指向左孩子一个指向兄弟的。在本文中指的是前者(一个指向左孩子,一个指向右孩子);2、部分说明参考上一篇https://blog.csdn.net/qq_40889820/ar...原创 2018-11-08 21:36:50 · 1127 阅读 · 0 评论 -
实验三 二叉树的物理实现(左子右兄弟-顺序表)
说明 基于顺序表的左子/右兄弟结点表示法 参考资料一、说明1、树的存储结构一般有父结点表示法(双亲表示法,一般是顺序表),子结点表示法(链表+顺序表),左子/右兄弟结点表示法(链表+顺序表);2、在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)(来源于百度百科);3、左子结点/右...原创 2018-11-08 20:49:48 · 3773 阅读 · 2 评论 -
表达式树的实现与计算
说明 基于二叉树实现的表达式树 参考文献一、说明:1、本文中表达式树指的是保存算术表达式的二叉树,分支结点存储操作符,而叶结点存储操作数;2、教材中为减少空间上的浪费将叶结点和分支结点的定义分开了。本文为了避免麻烦,不分别定义叶结点和分支结点;3、本文中实现二叉树的方式是链表实现的子结点法;4、输入的是一个合法的表达式,输入的表达式中操作符仅包括+、-、*、/以及(),单个操...原创 2018-11-11 00:00:21 · 1764 阅读 · 0 评论 -
队列的物理实现(顺序队列+链式队列)
说明 基于顺序表实现的顺序队列 基于链表实现的链式队列一、说明本文基于顺序表实现的顺序队列中,数组的大小为n+1,但只存储n个元素,方便区分满队列和空队列;基于链表实现的链式队列中,front始终指向头结点(数据域为空),rear指向队列的尾结点(数据域不为空)。二、基于顺序表实现的顺序队列Queue.h#include<iostream>using name...原创 2018-11-02 13:31:31 · 678 阅读 · 1 评论 -
双端队列的物理实现(顺序双端队列+链式双端队列)
说明 基于顺序表实现的顺序双端队列 基于链表实现的链式双端队列一、说明思路大致与队列相同,增添了从头部入队、尾部出队等操作。再次感叹delete的耗时二、基于顺序表实现的顺序双端队列1、Deque.h#include<iostream>using namespace std;#ifndef _Deque#define _Dequenamespace ...原创 2018-11-04 11:22:55 · 1037 阅读 · 0 评论 -
栈的物理实现(顺序栈+链式栈)
说明 基于顺序表实现的顺序栈 基于链表实现的链式栈一、说明:本文中基于顺序表实现的顺序栈中top指的是栈中第一个空闲位置,基于链表实现的链式栈中top指向链式栈中第一个结点(栈顶)的指针,无头结点。二、基于顺序表实现的顺序栈Stack.h#include<iostream>using namespace std;#ifndef _Stack#define ...原创 2018-11-01 00:10:18 · 444 阅读 · 0 评论 -
实验二 线性表的应用(双向链表)
注意事项:注意输出多项式的时候,当一项的系数为0时该项不输出,系数为1时省略1,系数为-1时省略1保留负号,除第一项之外系数为负数时该项需要打括号,次数为0时该项为系数的值,次数为负数时需要将次数括起来。定义的sort函数是根据选择排序的思想将多项式降幂排列的。定义的add函数实现的前提是两个多项式都有序(降幂),因此两个多项式相加前先排序。这里将尾结点处理为同头结点一样,数据域为...原创 2018-10-29 15:15:16 · 501 阅读 · 0 评论 -
实验一 线性表的物理实现(顺序表+单向链表)
基于顺序表实现的线性表 基于链表实现的线性表 实验中遇到的问题(&DevC++中的骚操作)一、基于顺序表实现的线性表List.h#include <iostream>using namespace std;#ifndef _List#define _Listnamespace wangzhe{ template <typename E> ...原创 2018-10-22 00:06:14 · 1357 阅读 · 0 评论