自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 问答 (1)
  • 收藏
  • 关注

原创 搜索树

二叉搜索树的应用不是很多,但他是重要的数据结构AVL树和红黑树的基础。二叉搜索树二叉搜索树是一棵二叉树,可能为空;一棵非空的二叉搜索树满足以下特征:每个元素有一个关键字,并且任意两个关键字都不同;因此,所有的关键字都是唯一的;在根节点的左子树中,元素的关键字(如果有的话)都小于根节点的关键字;在根节点的右子树中,元素的关键字(如果有的话)都大于根节点的关键字;根节点的左、右子树也都是二叉搜索树。若是有重复值的二叉搜索树则把大于改成大于等于,小于改成小于等于。索引二叉搜索树源于普通二叉搜索

2021-02-01 19:45:55 1640

原创 竞赛树(tournament tree)

竞赛树的基本操作是替换最大(或最小)元素。如果有n个元素,这个基本操作的用时为O(logn)O(logn)O(logn),虽然用堆和左高树也能用近似的时间(O(logn)O(logn)O(logn))完成这个操作,但是用来实现可预见的断接操作都不容易,当我们需要按指定的方式断开连接时,比如选择最先插入的元素,或选择最左端元素(假定每个元素都有一个从左到右的名次),这时,竞赛树就成了我们要选择的数据结构。有两种竞赛树:赢者树和输者树,赢者树更直观且模拟的是现实的竞赛树,但输者树的实现更加高效。...

2021-02-01 16:04:09 1745

原创 优先级队列

优先级队列优先级队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先级队列执行的操作有1)查找一个元素;2)插入一个新元素3)删除一个元素。与这些操作对应的是top、push、pop。在最小优先级队列中,查找和删除的元素都是优先级最小的元素;在最大优先级队列中,查找和删除的元素都是优先级最大的元素。堆一棵大根树:每个节点的值都大于或等于其子节点的值。一棵大根堆:既是大根树也是完全二叉树。(图中的a和c)大根堆的操作大根堆的插入其中a是初始状态,通过插入后,状态应该变为b,其插入过

2021-01-31 20:24:20 395

原创 二叉树和其他树

树一棵树t是一个非空的有限元素的集合,其中一个元素为根,其余的元素(如果有的话)组成t的子树,数根是1级,孩子是2级,一个树的高度或深度为数树中级的个数。一个元素的度是指其孩子的个数。叶节点的度为0,一棵树的度是指其元素度的最大值。二叉树一棵二叉树是t个有限元素的集合,当二叉树为空时,其中有一个元素称为根,余下的元素被划分成两科二叉树,分别称为t的左子树和右子树。二叉树和树的根本区别是:二叉树的每个元素都恰好有两棵子树(其中一个或两个可能为空)。而树的每个元素可有任意数量的子树。在二叉树中,每

2021-01-31 10:37:43 378

原创 跳表和散列

增加了额外的向前指针的链表叫做跳表。它采用随机技术来决定链表的哪些节点应增加向前指针,以及增加多少个指针,跳表的查找、插入、删除的平均复杂度为O(logn)O(logn)O(logn),然而,最坏情况下的时间复杂度却变成O(n)O(n)O(n)。散列是用来查找、插入、删除的另一种随机方法。与跳表相比,它把操作时间提高到O(1)O(1)O(1),但最坏情况下的时间复杂度认为O(n)O(n)O(n)。字典字典是由一些形如(k,v)的数对组成的集合,其中k是关键字,v是与关键字k对应的值。任意两个数对,其关

2021-01-30 22:49:21 473

原创 队列及其应用

队列的各种实现队列和栈一样,是一种特殊的线性表。队列的插入和删除操作分别在线性表的两端进行。因此,队列是一个先进先出(FIFO)的线性表。队列(queue)是一个线性表,其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾(back或rear),删除元素的那一端称为队首(front)#ifndef QUEUE_H_INCLUDED#define QUEUE_H_INCLUDEDusing namespace std;template<class T>class queue

2021-01-25 09:21:53 892

原创 栈及其应用

栈的各种实现栈是一种LIFO的结构,是一种特殊的线性表,其插入(也称入栈或压栈)和删除(出栈或弹栈)操作都在表的同一端进行。这一端成为栈顶,另一端称为栈底。#ifndef STACK_H_INCLUDED#define STACK_H_INCLUDEDusing namespace std;template<class T>class stack{public: virtual ~stack(){} virtual bool empty()const = 0;

2021-01-22 15:18:28 510

原创 数组与矩阵

在实际应用中,数据通常以表的形式出现。尽管用数组来描述表是最自然的方式,但为了减少程序所需的时间和空间,经常采用自定义的描述方式。例如,当表中大部分元素都为0的时候,就会采用自定义的描述方式。一个数组的每一个实例都是形如**(索引,值)**的...

2021-01-20 20:05:45 687

原创 并查集

等价关系假定一个具有n个元素的集合U={1,2,...,n}U=\{1,2,...,n\}U={1,2,...,n},另一个具有r个关系的集合R={(i1,j1),(i2,j2),...,(ir,jr)}R=\{(i_1,j_1),(i_2,j_2),...,(i_r,j_r)\}R={(i1​,j1​),(i2​,j2​),...,(ir​,jr​)}。关系R是一个等价关系,当且仅当如下条件为真时成立:对于所有的a,有(a,a)∈R(a,a)\in R(a,a)∈R时(即关系是自反的)当且仅当(b

2021-01-19 15:04:31 60

原创 优秀网站收藏

以防日后丢失,总结于此计算机计算几何:清华大学并查集:力扣MATLAB的APIConvex hull凸包力扣JAVA工程师成神之路kaggle动手学深度学习AstonZhang技能Markdown学习:简书练习打字的typingclub英语学习:TED在线免费的PS英语学习the School of Life:Lead a more fulfilled life英语单词背诵vocabulary.com免费在线的思维导图生活topbook高效生活视频书Bilibili

2021-01-18 16:34:09 79

原创 桶排序,基数排序

桶排序这里是百度百科桶排序介绍图,排序方法描述就是:对于要排序的目标取值范围在0~n-1的m个数,实例说明,排序3,5,6,1,2,4,3这7个数字,取值在0~9之间;首先建立10个桶子,编号分别为0、1、2……9,按照这7个数字,把他们分别放到相应编号的桶子中从桶子中按顺序收集数据注明:源数据为按链表排列,每个桶子也是一个链表。代码如下:template<class T>void chain<T>::binSort(int range){// Sort t

2021-01-18 15:24:50 473

原创 线性表——数组描述

异常类的定义// exception classes for various error types#ifndef myExceptions_#define myExceptions_#include <string>using namespace std;// illegal parameter valueclass illegalParameterValue{ public: illegalParameterValue(string theMessag

2021-01-16 19:13:52 209

原创 C++基础2

本篇博客没有营养,仅仅作为个人笔记使用#include<iostream>using namespace std;template<class T>//顺序搜索int sequentialSearch(T a[], int n, const T& x){//在数组a[0:n-1]中查找元素x //如果找到返回该元素位置,如果没找到范湖-1 int i; for (i = 0;i < n && a[i] != x;i++);

2021-01-16 10:44:49 119

原创 程序性能分析、渐进记法、性能测量

程序性能分析程序性能指的是运行这个程序所需要的内存和时间的多少。用两种方法确定程序的性能:一个是分析方法即性能分析,一个是实验方法即性能测量。空间复杂度空间复杂度的组成指令空间指令空间指的是编译之后程序指令所需要的存储空间数据空间数据空间指的是所有常量和变量值所需要的存储空间,它由两个部分构成:常量和简单变量所需要的存储空间动态数组和动态类实例等对象所需要的空间环境栈空间环境栈空间用来保存暂停的函数和方法在恢复运行时所需要的信息返回地址正在调用的函数的所有局部变量的值以及

2021-01-16 09:31:53 147

原创 2020年总结

2020年总结思想上的成长技术上的成长2020年是我代码成长最大的一年,虽然身为计算机专业的学生,大一和大二上学期没有写很多代码,coding能力极差,大概是从2021

2021-01-14 22:21:25 128

原创 C++基础

C++基础知识本文作为《数据结构与算法应用-C++语言描述》的先验知识,为了日后更好学习这本书打好C++基础函数与参数传值参数计算一个整数表达式int Abc(int a,int b,int c){ return a + b + c;}a,b,c是函数Abc的形式参数。当Abc(2,x,y)被执行时,a被赋值为2,b为x,c为y。与传值形式参数相对应的实际参数的值将在函数执行之前被复制给形式参数,复制过程是由该形式参数所属数据类型的复制构造函数( copy constructor

2021-01-14 21:57:37 100

原创 初级数据结构

参考《挑战程序设计竞赛2》初级数据结构包括栈(stack)、队列(queue)、表(list)栈栈中最重要的是指向栈顶的指针top// S[1000]是栈,top是指向栈顶的指针int top,S[1000];// push入栈void push(int x){ S[++top] = x;}// pop出栈int pop(){ return s[top--];}队列队列中最重要的是指向队头的指针head和队尾的指针tail// 结构体定义形式要记住typede

2020-11-01 20:26:56 196

原创 初等排序

初等排序初等排序包括插入排序、冒泡排序、选择排序,希尔排序插入排序将开头元素视为已排序,取出未排序部分的开头元素赋给变量v;在已排序部分,将所有比v大的元素向后移动一个单位;将已取出的元素v插入空位;即:排序部分不断扩大#include <stdio.h>#include <stdlib.h>//按顺序输出数组元素void trace(int A[], int N){ int i; for(i = 0;i < N;i++){

2020-11-01 19:57:58 139

原创 接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法抽象类和抽象方法abstract抽象类,抽象类含有一个或多个抽象方法,但可能有非抽象方法;

2020-08-10 22:34:34 111

原创 Java对象的创建过程

假设有一个名为Dog的类:1.即使没有显式地使用static关键字,构造器实际上也是静态方法.当首次创建类型为Dog的对象时(构造器可以看成静态方法),或者Dog类的静态方法/静态域首次被访问时,Java解释器必须去查找类路径,以定位Dog.class文件、2.然后载入Dog.class(这将创建一个Class对象),有关静态初始化的所有动作都会指向。因此静态初始化只在Class对象首次加载时进行一次;3.当用new Dog()创建对象时,首先将在堆上为对象分配足够的存储空间;4.这块存储空间会被清

2020-08-10 16:24:44 125

原创 多态

“封装”是通过合并特征和行为来创建新的数据类型。“实现隐藏”则通过将细节“私有化”把接口和实现分离开来。多态方法调用允许一种类型表现出与其他相似类型的区别,只要它们是从同一个基类中导出的。多态又叫动态绑定、后期绑定或运行时绑定多态的初步理解多态的一个例子:(向上转型中),有些方法仅仅针对的是基类型,但因为所有导出类型都是继承自基类型,所以导出类型也能做出相应行为enum type { GOOD,MIDIUM,BAD;}class Cycle{ public void play(type

2020-08-08 17:13:37 76

原创 复用类

复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情。组合语法组合技术就是将对象的引用置于新类当中即可。关于初始化:类中域为基本类型时能够自动被初始化为零,但是对象的引用会被初始化为null,如果试图为它调用任何方法,都会得到一个异常。继承语法1.特殊的双main为每一个类都创建一个main方法使得单元测试变得可行;即使一个程序含多个类,但只有命令行所调用的那个类的main()方法会被调用 如下边可以是java D

2020-08-01 13:25:50 130

原创 访问权限控制

访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关Java的访问权限控制,从最大到最小权限依次为public、protected、包访问权限(没有关键词)和private;packageJava用关键字package控制在同一个类库单元中的构件的访问;package就是提供一个管理名字空间的机制使用某个包中的类有两种方法,一种是直接import,另一种是利用类的全名进行使用该类;如果想要import自己包,需要在CLASSPATH中设置注意两个来自不同包的相同类名的冲突使用impor

2020-07-20 17:19:25 589

原创 初始化与清理

初始化指的是在使用某一元素之前要初始化,使用完之后记得要清理。否则会产生不安全或资源耗尽的问题构造器用构造器确保初始化,构造器与类同名;不接受任何参数的构造器叫做默认构造器(or无参构造器),构造器也可以有自己的参数。构造器的作用是“初始化”对象,Java中“初始化”与“创建”是捆绑在一起的。比如new Rock();这行代码,就是包括了“创建”(为对象分配存储空间)和“初始化”(调用相应的构造器);自己不写构造器会有默认的无参构造器,若写了构造器那么构造器就是自己所写的构造器了。

2020-07-19 18:36:43 137

原创 一切都是对象-操作符-控制执行流程

Java中变量的存储分为五个地方1)寄存器,这是最快的存储区,因为它位于不同于其他存储区的地方——存储器内部。但是寄存器的数量及其有限,所以寄存器根据需求进行分配。2)堆栈。位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器哪里获得直接支持。堆栈指针若向下移动则分配新的内存;向上移动释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时Java系统必须知道存储在堆栈内所有项的确切声明周期。这限制了程序的灵活性;对象的引用存放在堆栈中3)堆。一种通用的内存池(位于RAM区)..

2020-07-18 18:19:29 123

原创 面向对象和面向过程

面向过程:指的是把问题分解成为一个一个步骤,每个步骤用函数实现,依次调用即可。面向对象:指的是将问题分解成一个一个步骤,对每个对象进行相应的抽象,形成对象,通过不同兑现的调用,解决组合问题;也就是说在进行面向对象编程的时候,要把属性、行为等封装成对象,然后基于这些对象的能力进行业务逻辑的实现。面向对象的三个基本特征 :封装(Encapsulation)所谓封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的进行隐藏。封装是面向对象的特征之一,是对象和类概

2020-07-17 17:57:23 4302

原创 使用Python连接MySQL,实现一个数据库管理系统(批发商零售商管理系统)

使用软件PyQt5实现图形界面使用Python中的pymysql包实现连接数据库操作本项目较小,适用于零基础Python初学者,不会的百度,很快就能理解本文思路文末有参考资料,里边大概列举了做出此系统需要的材料一、需求分析1.1 背景软件名称:批发商商品管理系统用户:零售商、批发商1.2 任务目标1.提供零售商查找商品信息和批发商的功能2.提供批发商对商品的折扣、下架、进货、出货、利润比设置3.系统符合实际使用要求,人机交货界面友好,操作方便1.3 运行环境Python 3.8M

2020-07-09 17:41:10 9421 46

原创 5服务器安全基础和课程测试

1.添加一个用户myroot,通过sudo设置,使得myroot具有和root用户同样的权限2.利用你所掌握的TCP Wrapper知识,进行如下设置i.拒绝ip为192.168.8.129的主机访问你的sshd服务ii.拒绝192.168.8.0/24网段访问你的主机上的vsftpd服务,但允许192.168.8.129访问iii.允许所有人ssh到192.168.8.128,但登陆时把用户登录的信息(至少包括登录时间和IP)记录进日志文件/var/log/sshd.log3.用iptables

2020-07-09 17:13:32 780 4

原创 4基础架构和系统维护

创建两个linux主机(可以过复制虚拟机文件的方式),通过设置ssh,实现两台主机之间无密码登 录。设置一个系统计划任务,实现在每天凌晨1点查看系统在线用户信息,并把在线用户线信息写入 一个名叫user_online的文件分别运行mpstat、vmstat、iostat命令,并说明命令输出的每一行每个数据的含义1 创建两个linux主机(可以过复制虚拟机文件的方式),通过设置ssh,实现两台主机之间无密码登 录。首先克隆虚拟机CentOS7两者的区别仅仅在于IP地址不同(192.168.15.

2020-07-09 16:57:02 842 2

原创 3Linux实验_存储和网络管理

警告Warning:进行如下命令时可能会把系统搞崩,因为本人对全部命令准确度没有十足把握,但是步骤是对的,本人在做此实验时,系统重装过很多次1.用适合的命令查看你的系统分区信息,假定你发现系统中某个分区容量不够了,需要扩容,请设计一个方案和步骤以实现扩容。现在在设备里添加了两块磁盘A和B,他们容量分别为500G和1T,请设计一个步骤,把A和B添加到卷组中2.利用lvm实现如下功能:i. 在sdb上创建建一个5G的分区,并格式化为ext3,并开机自动挂载至/dataii.在sdb上创建一个2G的分区,

2020-07-09 16:43:33 948 1

原创 2shell编程

做此实验时本人没有在系统用户下进行,自己创建了一个文件夹在里边的文件中进行,因此shell中字体会有颜色1.编写一个shell脚本,计算1~100的和2.编写一个shell脚本,批量建立用户user_00、user_01…user_993.编写shell脚本,要求实现如下功能:当执行一个程序的时候,这个程序会让使用者选择boy或者girl;如果使用者输入B或者b时,就显示:He is a boy;如果使用者输入G或者g时,就显示:He is a girl;如果是除了B/b/G/g以外的其他字符,就显示

2020-07-09 16:03:26 1581 2

原创 1Linux的基本操作

以下操作建立在安装于虚拟机上的CentOS7系统上基础命令Linux中的如下命令,熟练掌握man:阅读联机帮助mkdir[目录明]:创建目录touch[文件名]:创建空文件夹cat[文件名]:查看文件内容cp [源文件][目标文件]:拷贝源文件到目标文件中mv [源文件名][目标文件名]:移动或者重命名rm [文件名]:删除文件find [文件名]:搜索文件wc[选项] 文件:统计文件中的字节数、字数、行数ln -s a.txt e.txt此方法为软连接,创建e.txt文件指向a.t

2020-07-09 15:42:44 607

原创 算法分析与设计基础_复习

第一章 绪论1.算法概念、欧几里得法求最大公约数(1.1)2.重要问题类型(1.3)、基本数据结构(1.4)1、算法是一系列解决问题的明确指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得要求的输出。欧几里得法求最大公约数:两个不全为0的非负整数m和n的最大公约数记为gcd(m,n),代表能够整除(即余数为0)m和n的最大整数。欧几里得算法就是重复应用系列等式gcd(m,n)=gcd(n,m mod n)gcd(60,24) = gcd(24,12) = gcd(12,0) = 12

2020-06-30 16:46:46 3375

原创 操作系统复习_设备管理

1.常用I/O数据传送方式2.I/O独立编址与统一编址3.Spooling系统4.I/O软件的分层结构及其功能5.磁盘设备读写时间构成6.常用磁盘臂调度算法1.常用I/O数据传送方式程序控制I/O方式中断驱动I/O方式DMA控制I/O方式通道控制I/O方式...

2020-06-22 15:43:35 188

原创 操作系统复习_文件系统

为什么要引入文件?(1)大存储容量应用的需要(2)使用信息的进程终止时,信息仍旧存在(长期存储)(3)信息与进程的独立,多进程能够并发存取有关信息文件的根本目标:长期存储信息;文件的存储介质:磁盘、磁带与光盘;做任何事情以目标为导向是最好的方法;文件是什么?文件是进程创建的信息逻辑单元;文件是磁盘上的一种地址空间;1.文件的逻辑结构、物理结构?四种文件逻辑结构:a)字节序列,b)记录序列,c)树d)索引结构文件的物理结构:文件在文件存储器上的存储形式①连续文件结构②串联文件结构③

2020-06-20 18:39:45 468 1

原创 操作系统复习_存储管理

1、分页存储管理方式原理及地址映射过程分页存储管理方式原理:把进程空间和内存空间划分为等大小的小片,进程的小片叫做页,内存的小片叫做页框,页和页框大小相等。进程以页为单位装入内存,进程以页框为单位分配使用。地址映射过程:使用页面映射表记录页和页框的对应关系,也叫页表,页式地址映射:虚拟地址->物理地址就是说,物理地址和虚拟地址的页偏移是一样的,只需要找到页号和页框号对应关系即可。如下所示:2.虚拟存储技术(覆盖、交换):内存覆盖技术指的是在较小的内存运行较大的程序;把内存分区

2020-06-20 11:33:21 368 2

原创 操作系统复习_死锁

1.死锁的概念死锁指的是两个或多个进程无期限地等待永远不会发生的条件的一种系统状态(结果:每个进程都永远阻塞)2.死锁产生的原因及必要条件:死锁的起因:系统资源有限;并发进程的推进顺序不当;必要条件:互斥条件:进程互斥使用资源,资源具有独占性不剥夺条件:进程在访问完资源前不能被其他进程强行剥夺;部分分配条件:进程边运行边申请资源,临时需要临时分配(区别于全部分配);环路条件:多个进程构成环路,环路中每个进程占用的资源被前一进程申请,而且自己所申请的资源又被环中后一进程占用着3.死锁的四

2020-06-19 21:03:15 197

原创 操作系统复习_进程管理

1.进程的基本概念、并发与并行;操作系统的功能——并发/分时环境进程是程序在某个数据集合上的一次运行活动,软/硬件环境,多个程序共存/共享的环境;特性:动态性、并发性、异步性、独立性;2.进程与程序的区别:动态与静态,暂存与长存,一个程序可能有多个进程;3.进程的状态:运行态;就绪态;阻塞态。运行态指进程已经占有CPU,在CPU上运行;就绪态指进程只差CPU;阻塞态指进程因为等待某项服务不能运行;4.进程控制块PCB;PCB是描述进程状态、资源、和与相关进程关系的数据结构;PCB是

2020-06-19 20:37:26 220

原创 操作系统复习_操作系统概述

1、操作系统的基本概念、基本功能;2、分时系统、批处理系统、实时系统的主要特征;3、用户接口、系统调用过程;4、单道与多道程序技术;5、CPU工作模式;1.什么是操作系统?2.操作系统的五大功能?进程管理;内存管理;设备管理;文件管理;用户接口。3.虚拟机是否能理解为操作系统?不能,关键从是否具备进程管理和内存管理两个功能区判定。4.操作系统的四个发展阶段?5.分时系统、批处理系统、实时系统的主要特征?分时系统:多路性、交互性、独占性和及时性;批处理系统:脱机、多道、

2020-06-19 10:43:48 384

原创 互联网的组成_网络层

学习目标:1.了解IP地址分类、理解IP层分组转发工作原理2.掌握子网掩码和无分类编址的计算1.结合电路交换与分组交换的特点,讨论网络层向上(运输层)提供哪两种服务?这两种服务各自有哪些特点?电路交换的特点是:建立连接->通信->释放连接;分组交换的特点是:存储-转发;这两种服务用文字描述为虚电路服务和数据报服务因此在网络层之初就讨论了向上应该提供哪两种服务,是面向连接还是面向无连接;面向连接指的是就像电路交换一样,即建立虚电路,两个主机在通信时先建立一个连接,然后再进行通信;

2020-06-15 17:11:48 629

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除