自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(217)
  • 收藏
  • 关注

原创 Java中Arrays.sort自定义一维数组、二维数组的排序(以及出现的问题)

一维数组方法一://降序Arrays.sort(arr, new Comparator<Integer>() { public int compare(Integer a, Integer b) { return b-a; }});问题:可以试着把arr赋值为以下值:也就是int的边界值Integer[] arr = {-2147483648, 1, 2147483647};代码:Integer[] arr = {-2147483648,

2022-04-29 18:14:15 3436

原创 Java中的优先队列PriorityQueue的使用及相关方法

简单使用PriorityQueue<Integer> p = new PriorityQueue<>();优先级队列从队头取元素,从队尾添加元素。默认情况下,队列中的数据是升序排序。PriorityQueue<Integer> p = new PriorityQueue<>();p.offer(5);p.offer(1);p.offer(3);p.offer(6);p.offer(8);while(!p.isEmpty()) { Sy

2022-04-10 18:36:23 1874

原创 Java中HashMap的常用方法

用Java语言刷题过程中常用的一些HashMap方法,在此做记录。定义Map<String ,String> map = new HashMap<String ,String>();方法1.put(Object key, Object value) //添加键值对2.putAll(Collection c) //添加指定的映射关系到目标映射关系3.get(Object key) //根据键来获取对应的值4.getOrDefault(Object key, V def

2022-04-01 21:30:09 4881

原创 Cache-主存的地址映射

映射方法1.直接映射按照Cache的大小,将主存储体划分为区,每个区的大小都和Cache大小一致。每个区的第0位只能放到Cache中的第0个字块,每个区的第1位只能放到Cache中的第1个字块,以此类推。放入之后,要在Cache前面的标记中,记下是哪个区。CPU访问时,会根据字块标记来判断是否为对应区的字块。问题:1.冲突问题严重比如第0区的第0块已经放入了Cache中,当第1区的第0块也想放入Cache中时,根据映射规则,只能放入字块0中,产生冲突。即使其他字块空闲。2.每个缓存块可以

2022-03-07 11:35:15 4102 1

原创 提高访存速度的措施

方法原因:CPU速度随着发展提高的非常快,而存储器随着时间发展提高较慢,所以就得想办法提高访存速度。1.采用高速器件这是一种较为直接的方法,让内存速度更快2.采用层次结构Cache - 主存Cache比存储器的快,可以放在存储器和CPU之间,如果存储器中的内容正好在Cache中,那么访存速度将会提高3.调整主存结构下面进行详细说明 调整主存结构1.单体多字系统每次从存储器中取出4个值或指令放到数据寄存器中,CPU使用时,通过单字长寄存器从其中取出一个即可。问题:1.写

2022-03-06 22:23:10 5209

原创 汉明码详解(哈工大计组)

奇偶校验汉明码采用分组奇偶校验那么先搞懂奇偶校验,再说分组奇偶校验说白了,就是要在代码前加入一位校验位**奇校验:**加入校验位后1的个数为奇数**偶校验:**加入校验位后1的个数为偶数以下例子都采用偶校验 分组奇偶校验分组其实有多种方式,汉明码是特殊的分组方式。我们先不采用汉明码的方式分组,看看其他分组。如下面例子:我们采用偶校验,先不分组,怎么操作呢?这个代码中有3个1,奇数个,那么最前面就要加个1,构成偶数个,如下:我们如果送出去进行校验(先忽略校验过程),

2022-03-06 16:40:28 9493 7

原创 由存储器的校验引出汉明码概念

为什么要校验信息保存在电容或者触发器中,如果其所处的电磁环境复杂或者收到带电粒子的打击,可能会造成信息出错。 合法代码集合要想使代码有检错、纠错的能力,那么代码应该具备什么条件。我们通过下面例子讨论:1.第一种如果其中一个代码出错,依然是合法代码,计算机不会检测出错误代码。2.第二种如果是000,结果计算机读出100,并不在合法代码中,所以计算机是可以检测出1位错误的。但是100这个错误代码,可以是000错误造成的,也可以是101、110错误造成的,所以计算机不知道怎么纠错

2022-03-06 11:10:23 374

原创 存储器与CPU的连接(两个例子)

例子1题目:设CPU有16根地址线、8根数据线,并用MREQ作为访存控制信号(低电平有效),用WR作为读/写控制信号(高电平为读,低电平为写)。现有下列存储芯片:1 Kx4位RAM、4 K x8位RAM、8 Kx8位RAM;2 K x8位ROM.4 Kx8位ROM、8 Kx8位ROM;74138译码器和各种门电路。如下图所示:画出CPU与存储器的连接图,要求如下:①主存地址空间分配:6000H ~ 67FFH为系统程序区。6800H ~ 6BFFH为用户程序区。②合理选用上述存储芯片,说

2022-03-05 19:55:56 15418 7

原创 存储器容量的扩展

位扩展问题:用1K×4位存储芯片组成1K×8位的存储器如2114芯片为1K×4位存储芯片,那么使用2片即可组成1K×8位的存储器。1K,共需要10根地址线,2114分别连接上。4位,所以每个芯片只有4根数据线。D7-D4连接第一个2114,D3-D0连接第二个芯片。这样就组成1K×8位的存储器。比如地址线为00…00(10个零),那么第一个2114对应存储单元输出4位,第二个2114对应存储单元输出4位,这样就是8位数据。 字扩展问题:用1K×8位存储芯片组成2K×8位的存储器

2022-03-05 16:26:40 4171

原创 动态RAM刷新及动态RAM和静态RAM的比较

集中刷新以128×128矩阵为例:每次刷新一行,每一行都要刷新刷新的时间间隔为2毫秒,存取周期为0.5微秒,那么共有4000个周期。后面128个周期用来刷新那么“死区”为 0.5微秒×128=64微秒 ,“死时间率”为 128/4000×100%=3.2%,在此时间内,想访问动态RAM必须等待。 分散刷新存取周期为1微秒。前0.5微秒用来读写,后0.5微秒用来刷新。这样128行,在128微秒内就会全部刷新一次。2ms内,就会刷新2000/128=15.625次。这是一种过度刷

2022-03-05 11:38:51 2014

原创 随机存取存储器之动态RAM

基本电路电容Cg充电,表示1电容Cg不充电,表示01.三管动态RAM读操作通过预充电信号,使T4打通VDD通过T4给读数据线充电,读数据线高电平1读选择线有效,T2导通如果没有电容,则Cg为0,T1为0,读数据线保持高电平保存0,读出1如果Cg有电,那么T1导通,读数据由原来的高电平1,通过T2、T1(接地) 放电后,成为低电平0保存1,读出0读出与原存信息相反写操作写选择先导通,T3导通如果写入1,则通过写数据线,再通过T3写入Cg。Cg是高电平。如果写入0,则通过写数

2022-03-05 10:46:08 1616

原创 随机存取存储器之静态RAM

基本电路触发器用来存储0/1T1~T4:触发器。一端为0,一端为1。A触发器原端,A‘ 触发器非端T5、T6:行开关T7、T8:列开关上图是一个存储元件,如果放到芯片中,那么就不止一个。T7和T8是一列上共用的控制开关。同时,行地址选择会继续延续,被选中时,这一行的T5、T6会都被打开。读操作触发器的非端也会有数据传输,但是经过T5、T7,到达写放大器后就会截至。写操作左侧取非。触发器两端写入相反信号。 静态RAM芯片举例Intel 2114存储容量为4K,为6

2022-03-04 20:05:04 1045

原创 半导体存储芯片及译码驱动方式

基本结构地址线: 单向,由CPU给出地址,寻找对应的存储单元数据线: 双向,连接IO设备控制线有:1.片选线: 被选择的存储单元是否在当前芯片中CS:片选信号CE:使能信号2.读/写控制线: 控制读或写具体计算:地址线为10位,数据线为4位。那么就有210存储单元,每个存储单元有个4位数据。则容量就为210×4,即1K×4位。后面两个例子同理。用16K×1位的存储芯片组成64K×8位的存储器用8个16K×1位的存储芯片组成一组,构成16K×8位的存储芯片,那么4组就构成了64

2022-03-04 17:02:22 2763

原创 存储器的分类及层次结构

存储器分类1.按存储介质分类(1)半导体存储器:TTL、MOS(2)磁表面存储器:磁头、载磁体(3)磁芯存储器:硬磁材料、环状元件(4)光盘存储器:激光、磁光材料半导体存储器在断开电源后,存储信息会消失;后面三种断开电源后,存储信息不会消失。2.按存取方式分类(1)存取时间与物理地址无关(随机访问,相同时间对指定地址读或写)①随机存储器:在程序的执行过程中可读可写②只读存储器:在程序的执行过程中只读(2)存取时间与物理地址有关(串行访问)①顺序存取存储器:磁带②直接存取存储器:磁盘

2022-03-04 10:50:00 2765

原创 总线通信控制2

半同步通信(同步、异步结合)同步:有一个定宽定距的时钟,管理整个通信过程发送方用系统时钟前沿发信号接收方用系统时钟后沿判断、识别异步:允许不同速度的模块和谐工作增加一条“等待”响应信号WAIT 输入数据为例的半同步通信时序:在T3到来时,从设备未准备好数据,那么WAIT为低电平,等待一个T,直到从设备准备好了数据。T1上升沿,给出地址信号T2上升沿给出读命令随后发现从设备没有准备好数据,那么设置WAIT为低电平,等待从设备一个T;之后还是低电平,还要插入一个T。T3

2022-03-04 09:50:29 174

原创 总线通信控制1

总线通信控制1.目的主设备获得总线使用权之后,就要和从设备进行信息交换通信控制就是解决双方协调配合问题2.总线传输周期主设备和从设备之间完成一次可靠通信需要的时间共有4个阶段:①申请分配阶段:主设备申请总线,总线判优控制(总裁决定)②寻址阶段:主设备通过地址找到从设备,并给出命令使从设备进行操作③传数阶段:主设备和从设备交换数据④结束阶段:主设备、从设备撤销有关消息3.总线通信的四种方式①同步通信:由统一时标控制数据传送②异步通信:采用应答方式,主设备发出请求,从设备应答③半同步

2022-03-03 22:02:32 713

原创 总线控制举例

总线控制解决的问题1.总线上连接着多个设备,多个设备可能同时向总线发出占用总线的请求,总线在同一时刻只能有一对设备使用,那么哪个设备可以使用总线?2.占用总线后,设备要通信,如何保证通信的准确? 总线判优控制根据是否能提出总线请求,将设备分为:1.主设备:对总线有控制权2.从设备:响应从主设备发来的总线命令总线判优控制分为:1.集中式判优逻辑集中在一个设备上①链式查询 ②计数器定时查询 ③独立请求方式2.分布式 集中式总线判优控制1.链式查询总线控制部件

2022-03-03 17:28:12 508

原创 总线的结构

单总线结构问题:总线成为系统瓶颈1.若主存向外部设备输出,或外部设备向主存输入,那么CPU就无法与主存交互,导致CPU空闲,影响效率。总线争用。2.如果外部设备过多,总线就会过长,导致主存和远端的外部设备交互时间延迟较长 双总线结构通道:具有特殊功能的处理器,由通道对I/O统一管理 三总线结构三总线结构1DMA:直接存储器访问,外部设备直接访问内存三总线结构2CPU所需的数据通过Cache来获取系统总线通过扩展总线接口连接到扩展总线扩展总线上连接着各种

2022-03-03 10:40:50 344

原创 总线性能及性能指标

总线物理实现总线印刷在微型电路板上,这个电路板叫主板。总线上有接口,供其他设备连接,比如CPU、主存、I/O设备都可以连接在上面。总线特性为了让插板有效连接在总线上,总线就要满足一些特性1.机械特性:尺寸、形状、管脚数及排列顺序2.电气特性:传输方向和有效电平范围3.功能特性:每根传输线的功能①地址信号 ②数据信号 ③控制信号 ④状态返回信号4.时间特性:信号的时序关系 总线的性能指标1.总线宽度数据线的根数2.标准传输率每秒传输的最大字节数3.时钟同步/

2022-03-03 10:07:32 1526

原创 总线的概念及分类

为什么用总线只有把CPU、存储器、外部设备连接起来,才能构成计算机的硬件系统,才能协调工作两种连接方式:1.两两相互连接,数量庞大,接口占用大量空间,系统难以扩展(每增加一个就要与其他相互连接)2.总线 总线概念连接各个部件的信息传输线各个部件共享的传输介质总线上信息传送方式:1.串行2.并行 总线结构举例1.单总线结构框图问题:1.若主存向外部设备输出,或外部设备向主存输入,那么CPU就无法与主存交互,导致CPU空闲,影响效率。总线争用。2.如果外

2022-03-02 22:20:15 2046

原创 主机完成一条指令及运行简单程序过程

例子:取数指令完成一条指令的3个过程:取指令、分析指令、执行指令我们都知道,指令和数据都存放在存储器中,而指令的地址存放在PC中。取指令过程如下:PC将指令的地址送往MAR,MAR再送到存储体中,在存储体对应的地址中找到该指令,再把该指令送到MDR中,最后由MDR送到IR中。这样,取指令的过程就完成了分析指令和执行指令:IR得到指令后,将指令的操作码送到CU中,分析执行什么操作(对应5)。因为我们当前分析的是取数指令,所以CU分析后得知为取数操作。将指令的地址码送到MAR,MAR送到存储

2022-03-02 18:32:53 6525 2

原创 控制器的基本组成及功能

功能1.解释指令2.保证指令的按序执行 完成一条指令的过程取指令:取内存单元中的指令放到控制器中分析指令:将指令的操作码部分送给控制单元进行分析执行指令:控制单元控制相应的部件完成操作PC:存放当前欲执行指令的地址(PC)+1->PC,下一条指令IR:存放当前欲执行的指令 控制器的基本组成PC取指令到IR中,随后PC自动调整值,到下一条指令...

2022-03-02 17:20:55 1388

原创 运算器的基本组成及操作过程

运算器的基本组成ACC:累加器;ALU算数逻辑单元;X操作寄存器;MQ乘商寄存器。核心为ALUACC和X为两个寄存器,用于数据的输入,ACC也能保存结果由于乘法操作结果较长,会把增加出来的部分放到MQ各个组成部分执行运算时,要存放的数据:加法与减法类似:乘法:除法:加法操作①初态:ACC中要保存 被加数②假设加法指令中,加数的地址为M,那么取出M中的数据放到X寄存器中,即 [M]->X③由ALU执行加法,最后放到ACC中减法操作减法操作与加法操作一样乘法操作①

2022-03-02 16:46:32 6005 2

原创 计算机运行简单程序的过程

举例ax2+bx+c操作数:运算中,一个保存在累加器中,另一个来自主存储器指令:加法指令、乘法指令、取数指令、存数指令、打印指令、停机指令过程:假设a、b、c、x都存放在了主存储器中①取x至运算器的累加器中...

2022-03-02 11:21:23 937 1

原创 计算机的基本组成

一、冯·诺依曼计算机特点:1.计算机有五大部件组成(运算器、控制器、存储器、输入设备、输出设备)2.指令和数据以同等地位存放在存储器中,可按地址寻访。3.指令和数据用二进制表示4.指令由操作码和地址码组成5.存储程序6.以运算器为中心冯·诺依曼计算机硬件框图:运算器(ALU):算术运算、逻辑运算存储器:存放数据和程序控制器(CU):指挥程序运行,完成指令执行,指令之间先后控制输入设备:将信息转换为机器能识别的形式输出设备:将结果转换成人们熟悉的形式存在的问题:计算机以运算器为

2022-03-01 21:45:37 2043

原创 计算机系统简介

一、计算机系统计算机系统包括:硬件+软件硬件计算机硬件,如主机、外设等软件又分为系统软件和应用软件系统软件:系统软件让计算机使用者、其他软件,将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。(摘自百度百科)如:1.语言处理程序,将高级语言源程序编译链接,翻译成目标程序,最后被计算机识别。2.操作系统,Windows系统(Win7、Win10、XP等)、Mac系统、Linux系统等等。操作系统提供一个让用户与系统交互的操作界面。应用软件:按任务需要编制成的各种程序,如音乐播

2022-03-01 18:36:57 2929

原创 C/C++实现堆排序

介绍堆排序是指利用堆这种数据结构所设计的一种排序算法。首先,堆不是容器,而是组织容器元素的一种特别方式。堆的逻辑结构与完全二叉树类似。堆又分为大顶堆和小顶堆大顶堆: 父节点总是大于或等于子节点小顶堆: 父节点总是小于或等于子节点下文利用大顶堆进行堆排序。 代码堆排序,利用大顶堆对数组进行排序,那么我们就得先构造大顶堆。思路: 把所有非终端结点都检查一遍,也就是把所有父结点遍历一遍,看其是否满足大顶堆要求。按照上图,从最后一个父结点开始,是下标 i=(数组长度)/2 的元素,

2021-08-12 20:30:09 945 4

原创 C/C++实现简单选择排序

介绍从待排序元素中选择最小/最大元素,与待排序元素第一位交换。 实现void SelectSort(int A[],int n){ for(int i=0;i<n-1;i++){ int min=i; for(int j=i+1;j<n;j++){ if(A[j]<A[min])min=j; } if(min!=i)swap(A[i],A[min]); }}代码比较简单:外层for循环,控制运行次数,前面n-1个元素处理好之后,最后一个

2021-08-09 14:30:18 149

原创 C/C++实现快速排序(两种方式)

介绍快速排序是对冒泡排序算法的一种改进,快速排序算法通过多次比较和交换来实现排序。流程如下:(图片来自百度) 实现以下有两种实现方式,说是两种,其实就是在交换元素时具体细节上有点不同罢了。方式一int Partition(int A[],int low,int high){ int pivot=A[low];//第一个元素作为基准 while(low<high){ while(low<high && A[high]>=pivot) hig

2021-08-09 14:05:15 12995 3

原创 C/C++实现冒泡排序

介绍冒泡排序是一种交换排序,如果是升序的话,就是把较大值通过交换不断放到后面。 实现下面的代码是将较大值冒泡到数组后面,达到升序的效果;也可以从数组后,通过冒泡,把较小值放到数组前(其实也是较大值放到数组后),达到升序的效果。从前往后:void BubbleSort(int A[],int n){ for(int i=n-1;i>0;i--){ bool flag=false; for(int j=0;j<i;j++){ if(A[j]>A[j+1]

2021-08-09 11:02:10 556

原创 C/C++实现希尔排序(两种方式)

介绍希尔排序又称 “缩小增量排序”,它也是一种插入类排序的方法。希尔排序原理:希尔排序属于插入类排序,是 将整个有序序列分割成若干小的子序列 分别进行 插入排序。具体原理可看下图:......

2021-08-08 14:51:07 6918 1

原创 C/C++实现插入排序(三种方式)

介绍插入排序有点像打扑克牌,每次获得一张牌,我们就插入到这个有序序列的合适位置。用数组来看的话就是下面这个样子: 实现(三种方式)方式一经常用到的一种方式//普通的插入排序 void InsertSort1(int A[],int n){ int i,j,temp; for(i=1;i<n;i++){ if(A[i]<A[i-1]){ temp=A[i]; for(j=i-1;j>=0&&A[j]>temp;--j){

2021-08-08 10:49:05 6691

原创 C/C++实现图的邻接矩阵

图的存储:邻接矩阵 代码#include <iostream>#include <stdlib.h>#define MaxVertexNum 100using namespace std;typedef char VertexType;typedef int EdgeType;typedef struct{ VertexType Vex[MaxVertexNum];//顶点表 EdgeType Edge[MaxVertexNum][MaxVer

2021-07-22 09:38:55 1703

原创 C/C++实现树的双亲表示法(树的顺序存储)

图示存储结构: 代码#include <iostream>#include <stdio.h>#define MAX_TREE_SIZE 100using namespace std;typedef char ElemType;typedef struct{ ElemType data; int parent;}PTNode;typedef struct{ PTNode nodes[20]; int n; }PTree;int

2021-07-02 15:22:35 804

原创 C/C++实现二叉树的顺序存储

实现原理要用顺序存储的方式存储二叉树,前提为该二叉树中,结点顺序与完全二叉树结点顺序一致。 代码#include <iostream>#include <math.h>#define MaxSize 100using namespace std;typedef int ElemType;typedef struct TreeNode{ ElemType value; bool isEmpty;//结点是否为空 }TreeNode;int

2021-07-02 11:13:47 1260

原创 C/C++实现中序线索二叉树

何为中序线索化线索二叉树可以分为三种:1.将二叉树按照中序遍历构造线索二叉树,则称为中序线索化2.前序线索化3.后序线索化 本文介绍中序线索化中序线索二叉树的结点:初始化时,ltag和rtag都为0,只有结点指向中序前驱或中序后继时,二者的值才会修改为1。 寻找二叉树中序前驱!!!按照链接中方法找中序前驱,只能重头遍历树。如果将二叉树线索化,比如将二叉树进行中序线索化,那么就可以很方便的找到中序前驱。如下图: 代码#include <io

2021-06-30 11:11:04 1034

原创 C/C++实现寻找二叉树中序前驱

功能寻找二叉树中序前驱中序前驱: 中序遍历序列的前一个如:该二叉树的中序遍历的结果为DGBEAFC,如果找F结点的前驱,即序列中的A。该方法在构造线索二叉树时起到关键作用!! 代码InOrder函数实际上就是中序遍历,其包含的visit函数作用是寻找前驱:如果q和p指向了同一个结点,那么pre就是前驱;如果不同,则pre按照中序遍历向前移动,然后q按照中序遍历继续向前。#include <iostream>#include <stdlib.h>us

2021-06-30 10:30:11 977 1

原创 C/C++实现二叉树的前、中、后序遍历(递归与非递归方式)

二叉树的前、中、后序遍历又分为:1.递归遍历2.非递归遍历本文介绍递归遍历。非递归遍历(戳这里!) 基本功能1.利用前序遍历的思想创建二叉树2.前、中、后序遍历利用前序遍历的思想创建二叉树!!! 代码#include <iostream>#include <stdlib.h>using namespace std;typedef char ElemType;typedef struct BiTNode{ ElemType

2021-06-28 17:24:18 253

原创 C/C++实现串的模式匹配:暴力匹配算法

时间复杂度假设主串的长为n,模式串(子串)的长为m。最坏时间复杂度为O(nm):最坏情况也就是,每次匹配到模式串的最后一位时,才发现不等,即比较了m次。对于主串,要和模式串配对n-m+1次。时间复杂度即为O(m*(n-m+1))=O(nm-m2+m),一般情况下,n远大于m,即nm远大于m2,最后为O(nm)。最好时间复杂度为O(n):即主串每次与模式串第一位比较时就失败,那么比较1次;共比较n-m+1次。时间复杂度为O(1*(n-m+1)),即O(n)。 代码#include &

2021-06-25 20:14:01 1107

原创 C/C++串的定长顺序存储表示

存储原理串有三种存储结构:1.定长顺序存储表示2.堆分配存储表示(即不定长顺序存储表示,因为malloc会在堆区分配空间,所以又称为堆分配存储表示)3.块链存储表示(类似于单链表,一个结点可以存储一个或多个字符,然后指向下一个结点,存储不满的用‘#’填充)本文主要介绍定长顺序存储表示,即用一个一维数组存储字符串。 主要功能1.初始化字符串2.输出字符串3.求字符串的长度4.截取子串5.比较两个字符串6.在主串中定位子串的位置7.连接两个串 代码#in

2021-06-25 17:07:16 883

空空如也

空空如也

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

TA关注的人

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