自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java使用一个或两个队列快速实现堆栈的方法

出自LeetCode225:只是用队列的offer、poll、isEmpty方法实现一个堆栈的存取。其基本原理都是通过对出入队列的元素顺序进行逆向处理,由于java中可以用LinkedList来实现队列,因此在每次往队列中添加一个新元素时,都可以通过循环来将此元素移动到末尾,这样实现先进后出的特性。1.使用一个队列实现class MyStack { Queue<Integer> queue; /** Initialize your data struct

2020-08-09 15:00:15 310

原创 java线程池相关知识整理

什么是线程池(thread pool)?在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要...

2019-04-30 14:30:39 191

原创 堆排序的Java实现(简化代码+详细说明)

关于堆排序已经有很多算法原理的讲解文章,这里就不多说了。本文将堆排序分成两个过程来实现:堆调整过程 排序过程以大顶堆为例,实现对数组从小到大进行排序:public class Heap_Sort { public static void main(String[] args) { int[] arr = { 54, 26, 93, 17, 77, 31, 44, 55, 2...

2019-04-21 15:28:17 519

原创 MySQL语句功能、数据类型和常用语句收集整理

功能分类MySQL语句按照不同功能可分为四大类:DDL-数据定义语言:用来定义数据库对象:创建库,表,列等。 DML-数据操作语言:用来操作数据库表中的记录,对表中数据进行增删改的操作 DQL-数据查询语言:用来查询数据 DCL-数据控制语言:用来定义访问权限和安全级别SQL数据类型double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即...

2019-03-12 16:17:06 246

原创 MySQL存储引擎分类

MYISAMMYISAM不支持事务,也不支持外键,但是访问速度较快;对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。 每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:.frm(存储表定义),.MYD(MYData,存储数据),.MYI(MYIndex,存储索引)INNODBInnoDB存储引擎提供了具有提...

2019-03-11 19:29:55 235

原创 TCP/IP协议,TCP和UDP的区别及特点

这篇博客主要用来纪录自己对TCP/IP和UDP的个人理解,若有不对还请慷慨指正一些基础知识IP地址:用来标识网络中的一个通信实体的地址。通信实体可以是计算机、路由器等。 比如互联网的每个服务器都要有自己的IP地址,而每个局域网的计算机要通信也要配置IP地址。目前主流使用的IP地址是IPV4,但是随着网络规模的不断扩大,IPV4面临着枯竭的危险,所以推出了IPV6。IPV4:32位地址,...

2019-03-11 10:27:28 23650

原创 从内存地址理解python的闭包

纪录一下目前对闭包的个人浅见:闭包的概念:存在内外层函数嵌套的情况 内层函数引用了外层函数的变量或者参数 外层函数把内层的这个函数本身当作返回值进行返回,而不是返回内层函数产生的某个值举个最简单的例子:def somebody(name): def something(what): print(name.title() + " wants to " + ...

2019-02-24 17:04:00 567

原创 python的time、calendar和datetime模块常用方法整理

import time# 获取当前时间戳now = time.time()print(now)# 获取可选的时间戳,默认当前lct = time.localtime()print(lct)# 获取格式化的时间result0 = time.ctime(now)print(result0)# 获取时间元组,然后对其格式化输出now_tuple = time.localtime(...

2019-02-23 16:55:40 179

原创 python3字符串相关知识整理

一、转义字符有时候在输出一些字符串的时候会遇到被转义字符误解的情况,比如:print("my nick name is "lalala".") #出问题了,两个双引号之间的内容被理解为单独的字符串了这种情况有很多解决方式,最简单的是在要打印出来的引号前面加上\,还可以用不同类型的引号来区分内外关系,比如:print("my nick name is \"lalala\"."...

2019-02-23 10:46:07 155

原创 对python程序执行机制的理解

严格来说python是一门先编译成字节码(PythonCodeObject,.pyc文件),然后再解释执行的语言。在创建一个a.py文件时,假设我们在终端中手动运行python a.py,那在a.py被运行期间都发生了什么?看下这张图:如果a.py中有import b等导入包或模块的话,那么会对b等被导入的包或模块从头开始一次执行机制,类似于递归。 判断.pyc和.py修改时间是否一...

2019-02-22 21:12:37 157

原创 python实现二叉树的广度优先遍历和深度优先遍历

定义二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。性质性质1: 在二叉树的第i层上至多有2^(i-1)个节点(i&gt;0)性质2: 深度为k的二叉树至多有2^k - 1个节点(k&gt;0)性质3: 对于任意一棵二叉树,如果其叶节点数为N0,而度数为2的节点总数为N2,则N0=N2+1;性质4:...

2019-02-01 17:18:29 8119 4

原创 python实现二分查找(binary search)

二分查找是一种常见的搜索方法,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,二分查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一...

2019-02-01 16:39:36 2126

原创 python实现希尔排序(shell sort)

希尔排序是插入排序的一种改进形式(我变烦了,也变强了)。希尔排序的基本思想是:将待排序的一组数据先按照一个间隔(gap)来拆开,拆成如下图所示的几组,然后在每一组中对元素进行排序,排序的方法和插入排序一致,只是外层循环的起始位置是gap,也就是说第0位到第gap位这几个元素是不进入外层循环的。当前gap分成的各组排完之后,调整gap(缩小步长),再对按更小的gap分成的各组元素进行排序,这样直...

2019-02-01 16:32:28 392

原创 python实现归并排序(merge sort)

归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。下面的动态图非常贴切,记得点开从头看:最优时间复杂度:O(nlogn) 最坏时间复杂度:O(nlogn) 稳定性:稳定代码实现:def m...

2019-02-01 16:15:43 2378 3

原创 python实现快速排序(quick sort)

快速排序(Quick sort),又称划分交换排序(partition-exchange sort),通过一轮取一个元素作为中间值,将要排序的数据分割成两部分,其中一部分的所有数据都比这个中间值都要小,另外一部分的所有数据都比这个中间值要大,然后再次按此方法依次对这两部分数据分别再次进行快速排序,注意在对各部分数据再次快排的期间是递进进行的哦!整个排序过程可以递归进行,以此达到整个数据变成有序序列...

2019-02-01 16:05:10 581

原创 python实现插入排序(insertion sort)

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。具体操作与选择排序有些许类似,都是将一个包含n个元素的一组数据看成有序部分和无序部分。一开始,将第0号元素放到有序部分里,从第1号元素(处于无序部分中)开始,与第0号元素比较,如果大于(小于)第0号元素,就把第1号元素插到第0号元素前面。这时再比较此时的第1号元素和第2...

2019-01-30 15:12:09 481

原创 python实现选择排序(selection sort)

选择排序将一组数据(包含n个元素)看成两个部分:无序部分和有序部分,一共做最多n-1轮选择,每一轮都把无序部分中最小(大)值选出来,放到有序部分中。因为每一轮选出来的都是最小(大)值,因此之后的每一轮选出来的都为次小(大)值,直接排在上一轮选出的元素后面即可。举例,按从大到小排序:第一轮选择开始:因为刚开始有序部分没有元素,先认为无序部分中的第0位元素就是当前最小值,给她一个索引:min_...

2019-01-30 14:36:55 1073

原创 python实现冒泡排序(Bubble sort)

冒泡排序算法的工作原理如下:比较相邻的元素,如果第一个比第二个大(升序),就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这一轮比较结束后,排在最后的元素会是最大的数,此时可看做这个数被归为了这组数据中的有序部分,那么剩下还没排序的即为无序部分。 开始第二轮的比较,一直比到倒数第二个数,因为最后一个在上一轮已经冒泡冒到有序部分了。 对越来越少的无序部分中的元...

2019-01-30 14:10:34 1515

原创 python3实现单向循环链表

单向循环链表是单向链表的一个拓展,主要区别在于单向循环链表尾节点的next不再指向None,而是指向链表的头节点。下面通过代码一步步实现单向循环链表并附上注释和测试,主要实现以下几个基本方法:    is_empty() 链表是否为空     length() 链表长度     travel() 遍历整个链表     add(item) 链表头部添加元素     append(it...

2019-01-17 18:37:08 302

原创 用python3实现数据结构中的单向链表single linked list

单向链表简称单链表,是链表中最简单的一种形式,单链表的每个节点包含两个域(首位相连的两部分内容),一个信息域(或叫元素域,用来存放具体数据)和一个链接域。这个链接域中存放的链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值(None)。而每个单链表都有一个隐式的head节点(self.__head),这个head节点不存放具体数据因而没有信息域,也无法从外部访问,只有一个链接域用来指...

2019-01-15 10:54:45 597

空空如也

空空如也

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

TA关注的人

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