自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java并发编程总结

Java并发编程总结

2022-08-08 01:03:25 70

原创 十大排序算法

1.冒泡排序比较相邻两元素,若前元素大于后元素则交换两元素的值,每次外循环可以将当前未有序序列中最大的元素排到最后,然后再缩小范围继续进行交换直到全体有序 public static int[] bubbleSort(int arr[]) { int temp; for (int i = 0; i < arr.length-1; i++) { for (int j = 0; j < arr.length - i - 1; j++)

2022-01-24 23:23:40 269

原创 数据库操作

数据库数据库是一种存储结构,它允许使用各种格式输入、处理和检索数据,不必在每次需要数据时重新输入数据库特点:(1)实现数据共享(2)减少数据的冗余度(3)数据的独立性(4)数据实现集中控制(5)数据的一致性和可维护性数据的一致性和可维护性主要包括:安全性控制、完整性控制、并发控制、故障的发现和维护数据库的基本结构:(1)物理数据层: 它是数据库的最内层,是物理存储设备上实际存储的数据集合。这些数据是原始数据,是用户加工的对象,由内部模式描述的指令操作处理的字符和字组成(2)概念数据层:

2021-06-27 21:45:11 275

原创 Java网络通信

网络编程是设计与其他计算机进行通信的程序,Java已经将网络编程所需要的东西封装成不同的类,我们对这些类进行调用即可进行网络编程网络协议网络协议规定了计算机之间的连接特征、寻址规则、数据发送冲突的解决方式等内容。IP协议: Internet网络采用的是TCP/IP协议(TCP/IP协议不仅仅指的是TCP 和IP两个协议, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议)。每台主机都用网络为其分配的Internet地址代表自己,这个地址就是IP地址,目前IP地址主

2021-06-16 21:37:09 306 2

原创 多线程机制

多项活动同时进行的思想在Java中称为并发,而将并发完成的每一件事称为线程。每一个线程完成一个功能,并与其他线程并发执行,这种机制被称为多线程多线程进程与线程: Windows系统是多任务操作系统,它以进程为单位。每个独立执行的程序都称为进程,一个线程则是进程中的执行流程,一个进程中可以同时包括多个线程。在单线程中,程序代码按照调用顺序依次往下执行;在多线程中,一个进程可以同时完成多段代码的操作。实现线程的两种方式:(1)继承java.lang.Thread类(2)实现java.lang.Run

2021-06-07 23:04:09 823

原创 注解与反射

注解基本内容: Java提供了 注解(Annotation) 功能,可用于类、构造方法、成员变量、方法、参数等的申明中。该功能并不影响程序的进行,但是会对编译器警告等辅助工具产生影响。(注解(Annotation)不是程序本身,但可以对程序做出解释,这一点与注释(comment)相似)内置注解:@Override: 只适用于修辞方法,表示重写超类中的方法的声明。@Deprecated: 可用于修辞方法、属性、类,通常表示存在危险或有更好的选择而不推荐使用。@SuppressWarnings: 使用

2021-06-03 21:46:44 65

原创 输入与输出(I/O流)

流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流File类基本内容: File类是java.io包中唯一代表磁盘文件本身的对象,可通过调用File类中的方法实现对文件的一系列操作。创建文件对象方法:(1)File(String pathname)(2)File(String parent,String child)(3)File(File f,String child)createNewFile(): 若文件存在,则返回false;若不存在,则返回true并新建该文件。impor

2021-05-31 21:54:40 101

原创 集合类(容器)

集合类又称容器,用来存放对象的引用。集合可以存储多个对象,对外作为一个整体存在Collection接口Collection接口:存储一组不唯一,无序的对象。概念: Collection接口是层次结构中的接口,通常不能直接使用。List接口和Set接口都继承了Collection接口,所以对List集合与Set集合通用。遍历集合通常使用 迭代器(Iterator) 实现。Collection接口中的iterator()方法可返回在此Collection进行迭代的迭代器。List集合List接口:存

2021-05-28 21:41:19 210

原创 继承与多态

类的继承**基本思想:**继承是基于父类进行拓展,以此得到一个新的子类。**作用:**通过类的继承,我们可以复用一些定义好的类,从而减少重复代码的编写,减少软件开发周期,提高软件的可维护性和可拓展性。**操作:**继承关系用extends关键字来标明。在子类中可以连同初始化父类来完成初始化子类的操作,用super关键字来调用父类的构造方法与成员方法等,不过子类无权调用父类private修饰的方法。当在子类中重写父类方法时,不能降低方法的修饰权限,只能将修饰权限的范围从小到大进行改变。重构是一种特殊的

2021-05-19 21:02:06 109

原创 基数排序

分配类排序不需要比较关键字的大小,它通过关键字中各位的值,通过对序列进行若干次分配和收集来实现的,分配类排序是一种借助于多关键字排序的思想对单关键字排序的方法,基数排序是典型的分配类排序基数排序多关键字的排序方法有最高位优先法和最低位优先法,基数排序一般利用最低位优先法,从低位到高位,对各位数上的数字进行比较从而不断调整序列元素顺序,基数排序是桶排的进阶。void RadixSort(int a[],int n)//基数排序{ int base=1,max=a[0]; for(int

2021-04-20 19:26:44 305

原创 归并排序

归并排序的基本思想:将两个或两个以上的有序表合并成一个有序表,将两个有序表合并成一个有序表的过程称为 2-路归并归并排序将含有n个关键字的序列看成是n个有序的子序列,然后两两归并,如此重复,直到得到一个长度为n的有序序列为止。...

2021-04-20 16:36:56 77

原创 选择排序

选择排序的基本思想:每一趟从待排序的序列中选出关键字最小的记录,按顺序放在已排序的序列最后,直到整个序列排完为止。一、简单选择排序简单选择排序又称直接选择排序 ,每一趟从该关键字之后寻找最小值,然后放在当前已排序的序列最后。void SSelectSort(int a[],int n)//简单插入排序{ int i,j,l,min; for(i=0;i<n;i++) { min=INF;//INF值为0x3f3f3f3f表示无穷大 for

2021-04-18 22:22:51 155

原创 交换排序

交换排序的基本思想:两两比较待排序的关键字,当失序时则进行交换,直到整个序列满足要求为止。一、 冒泡排序两两比较关键字,若失序则进行交换,使得关键字较小的记录如同气泡逐渐往上漂浮,而关键字较大的则像石头一样下落。void BubbleSort(int a[],int length)//数组下标从0到n-1{ int temp; for(int i=0;i<length-1;i++) { for(int j=0;j<length-i-1;j++)

2021-04-18 17:36:58 101

原创 插入排序

插入排序的基本思想:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有记录全部插入为止。一、直接插入排序a[0]不使用,用来作监视哨,也用来避免数组下标出界。每一次将当前失序的关键字放入监视哨,再遍历前面已经排好序的记录,将监视哨上的关键字插入适当的位置上。void Insert(int a[],int length)//直接插入排序{ int i,j; for(i=2;i<=length;i++) { if(a[

2021-04-17 23:10:01 159

原创 散列表查找

哈希表散列表一般指哈希表,散列查找法又称杂凑法或散列法。散列法通过对元素的关键字值进行某种运算,直接求出元素的地址,即使用关键字到地址的直接转换方法,而不需要反复比较。哈希表的存储空间通常是一个连续数组,散列地址是数组的下标;通常,哈希函数是一个一对多的函数,所以冲突是不可避免的,只能通过选择一个最优的哈希函数来最大的减少冲突。哈希函数并不唯一,一般按照实际情况构造哈希函数,主要有:(1)数字分析法:当事先明确知道关键字每一位上各种数字的分布情况时适用(2)平方取中法:当不能事先了解关键字的所有

2021-04-16 21:40:27 273

原创 树表查找

一、二叉排序树又称 二叉查找树,是一种对排序和查找都很有效的特殊二叉树。性质(1)其左右子树也分别为二叉排序树(2)中序遍历其可得到一个递增的有序序列(3)左子树所有结点均小于根结点,右子树所有结点均大于根结点二叉排序树的存储//二叉排序树的存储typedef struct{ int key; //还可设置其他数据项}KeyType;typedef struct BSTNode{ KeyType data; struct BSTNode *L,*R;

2021-04-15 21:31:10 372

原创 线性表查找

一、顺序查找直接遍历线性表或设置监视哨进行顺序查找。int Search(int a[],int key,int length){ int i; a[0]=key;//监视哨 for(i=length;a[i]!=key;i--); return i;}时间复杂度:O(n)设置监视哨,免去查找过程中每一步都要检测表是否查找完毕,虽然时间复杂度与直接遍历一样均为O(n),然而实践证明,当length>=1000时,这个改进能使顺序表进行一次查找所需的平均时间

2021-04-11 15:48:03 1129 1

原创 有向无环图

有向无环图简称DAG图,是用来描述一项工程或系统的进行过程的有效工具。AOV网:用顶点表示活动,用弧表示活动间的优先关系的有向图称为AOV网,是无权有向无环图AOE网:用顶点表示事件,弧表示活动权表示活动持续的时间称为AOE网,是带权有向无环图拓扑排序拓扑排序就是将AOV网中所有顶点按流程次序排成一个线性序列,该线性序列并不唯一,其过程为:(1)在有向图中选一个无前驱的顶点且输出它(2)从图中删除该顶点和并清除以它为前驱的入度(3)重复一、二步骤,直至不存在无入度为0的顶点(4)若此时输出

2021-04-10 21:37:41 953

原创 最短路径(图)

最短路径问题:一、源点到其余顶点的最短路径二、每一对顶点之间的最短路径一、迪杰斯特拉算法(Dijkstra)*Dijkstra:解决单源最短路径,按路径长度递增的次序产生最短路径的算法。*主要找出当前源点到其他顶点最短的一条路径,再利用此路径更新源点至各顶点的最小路径,循环往复直至源点到各顶点均为最短路径。定义邻接矩阵及辅助数组#include<stdbool.h>#define MAXSIZE 100#define INF 0x3f3f3f3f//邻接矩阵typedef s

2021-04-08 18:14:19 673

原创 最小生成树

在一个连通网的所有生成树中,各边权值之和最小的生成树成为最小生成树,对于具有n个顶点的连通网来讲,只需要n-1条边便可将所有顶顶点连通起来。多数最小生成树算法利用了简称为MST的性质,主要分为Prim算法和Kruskal算法**MST性质:**假设G=(V,E)是一个连通网,U是顶点V的一个非空子集。若(u,v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一棵包含边(u,v)的最小生成树。Prim算法又称加点法:从第一个顶点开始,依次连通当前已连通顶点所未接通的权值最小的边对应的顶点,逐步

2021-04-06 22:14:29 133

原创 图优先遍历

DFS深度优先搜索DFS类似于树的先序遍历。将图从顶点开始进行深度优先搜索所走过的路径便是深度优先搜索树深度搜索遍历邻接矩阵表示图//邻接矩阵表示图typedef struct{ char vexs[MAXSIZE]; int arcs[MAXSIZE][MAXSIZE]; int vexnum,arcnum;}AMGraph;//深度搜索遍历邻接矩阵表示图void DFSAM(AMGraph G,int v){ visited[v]=true; p

2021-04-05 16:27:10 119

原创 图的存储

图的存储一.邻接矩阵对具有N个结点的图构造一个N*N的矩阵,矩阵数组的下标存储结点和相应顶点的位置,数组的值即为每两个邻接顶点的边的权值。邻接矩阵可以表示有向或无向图,当两个顶点不邻接相通时我们可以将数组权值赋为0或0x3f3f3f3f(趋近无穷大值又不会溢出)。缺点:不便于增加和删除顶点,不便于统计边的数目,时间复杂度高,空间复杂度高,对于稀疏图而言十分浪费空间。二.邻接表正邻接表:每个顶点建立一个链表,对无向图来说用于存放该顶点邻接的顶点,对有向图来说便是存放该顶点通向的邻接顶点。逆邻接表

2021-04-03 20:51:50 156

原创 哈夫曼树

哈夫曼树哈夫曼树又称最优树,是一类带权路径长度(WPL)最短的树,权值越大的结点离根结点越近,反之则越远。一颗含有N0个叶子结点的哈夫曼树共有2N0-1个结点*(因为哈夫曼树没有度为1的结点,即可设哈夫曼树叶子结点即度为0的结点数为N0,度为2的结点数为N2,总结点为N,则有N=2N2+1,N=N0+N2,可得N=2N0-1),哈夫曼树可以存储在一个大小为2N0的动态分配的一维数组w[]中,树的每个结点存储双亲和孩子的信息(下标)*哈夫曼树的建立1.初始化:动态申请2n个单元,通过循环将所有单元的双

2021-04-01 22:20:53 1441

原创 线索二叉树

线索二叉树二叉树的作为存储结构时不能直接获取前驱后继的信息,为此通过对二叉树线索化来构造线索二叉树,从而存储结点的前驱后继信息。构建线索二叉树有两种选择,一是增设两个指针域,但此行会使存储密度大大降低;二是利用二叉树的未被使用的空链域来存储前驱后继信息。我们一般选择后者构建线索树。中序线索化void InThread(BiThTree p){ if(p) { InThread(p->L); if(!p->L) {

2021-03-30 22:19:04 471

原创 二叉树

二叉树的性质1.二叉树的子树有左右之分,其次序不能颠倒。2.二叉树的第i层上最多有**2^(i-1)**个结点。3.深度为k的二叉树最多有2^k-1个结点。4.设二叉树的总结点数为N,终端(度为0)结点数为N0,度为1的结点数为N1,度为2的结点数为N2,分支总数为B,则有以下关系式:N=N0+N1+N2=B+1;因为除了根节点以外,其余结点都有分支进入,则有:B=N1+2N2;N=N1+2N2+1;结合上面式子可得:N0=N2+1,即终端结点数等于度为2的结点数加1;完全二叉树:深度为

2021-03-28 18:56:03 425

原创 串匹配算法

一开始接触到字符串匹配,就会想到百度搜索,输入一串需要搜索的信息,展现的页面是与关键字重合的网页,搜索引擎便是我目前能想到最典型的串匹配实例。串匹配算法主要来通过匹配来返回主串(T)中与模式串(P)完全重合的子串位置,一般分为BF算法和KMP算法。BF算法BF算法被称为最简单直观串匹配算法,利用i、j分别遍历T串和P串,当对应字符匹配时i、j则继续向下遍历;当对应字符不匹配时i则回溯,j则清0。若i遍历完T串时未找到完全匹配的字串则返回-1值,若匹配到完全重合的字串时则返回该子串的位置。int BF

2021-03-25 22:57:36 1148 1

空空如也

空空如也

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

TA关注的人

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