- 博客(25)
- 收藏
- 关注
原创 汇编常用指令
一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA ...
2019-08-10 15:38:12 253
原创 STL关联式容器之hashtable(前言)
摘要我们前面介绍了所谓的二叉搜索树和平衡二叉搜索树,还有一种被广泛使用的平衡二叉搜索树——RB-tree(红黑树),红黑树不仅在树形的平衡上表现不错,在效率表现和实现复杂度上也保持相当的“平衡”,所以被广泛使用,也因此成为STL set和map的标准底层机制。二叉搜索树具有对数平均时间(longarithmic average time)的表现,但这样的变现构造在一个假设上:输入数据有足够的随...
2019-08-09 12:58:58 159
原创 STL关联式容器之multimap
multimap的特性以及用法与map完全相同,唯一的差别在于它允许键值重复,因此它的插入操作采用的是底层机制RB-tree的insert_equal()而非insert_unique().下面是multimap的源码摘要,只列出了与set不同之处:template<calss Key, calss T,class Compare=less<Key>,class Alloc=a...
2019-08-02 14:47:14 161
原创 STL关联式容器之multiset
multiset概述multiset的特性以及用法与set完全相同,唯一的差别在于它允许键值重复,因此它的插入操作采用的是底层机制RB-tree的insert_equal()而非insert_unique().下面是multiset的源码摘要,只列出了与set不同之处:template <calss Key, class Compare=less<Key>, class Al...
2019-08-02 14:31:36 118
原创 STL关联式容器之map
map概述map的特性是,所有元素都会根据元素的键值自动被排序。map的所有元素都是pari,同时拥有实值(value)和键值(key)。pari的第一元素被视为键值,第二元素被视为实值。map不允许两个元素拥有相同的键值。下面是<stl_pari.h>中的pari定义:template<calss T1,class T2>struct pari{ typ...
2019-08-01 18:17:53 146
转载 LeetCode之string to integer(atoi)字符串转换为整数
问题描述Implement atoi which converts a string to an integer.The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from...
2019-07-30 16:48:06 105
原创 STL之关联式容器set
set概述set的特性是,所有的元素都会根据元素的键值自动被排序。set的元素不像map那样可以同时拥有实值和键值,set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值。我们不可以通过set的迭代器改变元素的值,因为set元素值就是其键值,关系到set元素的排列规则。如果任意改变set元素值,会严重破坏set组织。稍后在源码中会看到set::iterator被定义为底层RB...
2019-07-30 16:32:49 129
原创 STL之RB红黑树(二)
RB-tree的节点设计RB-tree有红黑二色,并且拥有左右子节点,我们很容易就可以勾勒出其结构风貌。以下是SGI STL的实现代码。为了有更大的弹性,节点分为两层:从以下的minimum()和maximum()函数可清楚看出,RB-tree作为一个二叉搜索树,其极致是多么容易找到。由于RB-tree的各种操作时常需要上溯其父节点,所以特别在数据结构中安排了一个parent指针。typede...
2019-07-29 12:41:30 170
原创 STL关联式容器之RB-tree(红黑树)(一)
RB-tree(红黑树)AVL-tree之外,另一个颇具历史并被广泛运用的平衡二叉搜索树是RB-tree(红黑树),所谓RB-tree,不仅是一个二叉搜索树,且必须满足以下规则:每个节点不是红色就是黑色(图中深色底纹代表黑色,浅色底纹代表红色,下同);根节点为黑色;如果节点为红色,其子节点必须为黑色;任一节点到null(树尾端)的任何路径,所含的黑色节点数必须相同。根据规则4,新增节...
2019-07-27 14:32:07 171
原创 Linux之GDB调试程序
GDB概述GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程...
2019-07-25 18:11:03 91
原创 STL关联式容器(二)
平衡二叉搜索树也许因为输入值不够随机,也许因为经过某些插入或删除操作,二叉搜索树可能会失去平衡造成搜寻效率低落的情况:所谓树形平衡与否,并没有一个绝对的标准。“平衡”的大致意义是:没有任何一个节点过深或深度过大。不同的平衡条件,造成不同的效率表现,以及不同的实现复杂度。有数种特殊结构如AVL-tree、RB-tree、AA-tree,均可实现出平衡二叉搜索树,它们都比一般的(无法绝对维持平衡...
2019-07-25 16:58:33 178
原创 Linux之Makefile
什么是Makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧...
2019-07-24 19:49:00 203
原创 STL之关联式容器(一)
关联式容器所谓关联式容器,观念上类似关联式数据库(实则更为简单):每笔数据或每个元素都有一个键值(key)和一个实值(value)。当元素被插入到关联式容器中时,容器内部结构(可能RB-tree,也可能是hash-table)便依照其键值大小,某种特定的规则将这个元素放置于适当的位置。关联式容器没有所谓的头尾,只有最大和最小元素,所以不会有所谓push_back()、push_front()、p...
2019-07-24 19:29:05 305
原创 Linux之GCC命令
多数UNIX平台都通过CC调用它们的C编译程序.除标准和CC以外,LINUX和FREEBSD还支持gcc.基本的编译命令有以下几种:-c 编译产生对象文件(*.obj)而不链接成可执行文件,当编译几个独立的模块,而待以后由链接程序把它们链接在一起时,就可以使用这个选项,如:$cc -c hello.c ===> hello.o$cc hello.o-o 允许用户指...
2019-07-22 18:24:08 205
原创 STL序列式容器之queue
queue概述queue是一种先进先出的数据结构。它有两个出口,允许新增元素、移除元素、从底端加入元素、取得最顶端元素。但除了最低端可以取出外,没有任何其它方法可以存取queue的其它元素。换言之,queue不允许有遍历行为。将元素推入queue的操作称为push,将元素推出queue的操作称为pop。queue定义完整列表以某种既有容器为底部结构,将其接口改变,使其符合“先进先出”的特...
2019-07-22 18:18:18 233
原创 LeetCode之Reverse integer(Easy)翻转整数
Given a 32-bit signed integer, reverse digits of an integer.Example 1:Input: 123Output: 321Example 2:Input: -123Output: -321Example 3:Input: 120Output: 21Note:Assume we are dealing with an ...
2019-07-21 18:23:09 204
原创 STL序列式容器之stack
stack概述stack是一种先进后出的数据结构。它只有一个出口,如下图所示,stack允许新增元素、移除元素、取得最顶端元素。取得最顶端元素。但除了最顶端外,没有任何其它方法可以存取stack的其它元素。换言之,stack不允许具有遍历的行为。将元素推入stack的操作称为push,将元素推出stack的草操作称为pop.stack定义完整列表以某种既有容器作为底部结构,将接口改变,使之...
2019-07-21 17:57:45 308
原创 STL序列式容器之deque
deque概述vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。所谓双向开口,意思是可以在头尾两端分别做元素的插入和删除操作。vector当然也可以在头尾两端分别做元素的插入删除操作(从技术上说),但是其头部操作效率极差而无法被接受。deque和vector的最大差异,一是在于deque允许于常数时间内对起头端进元素的插入或移除操作,二在于deque没有所谓容量...
2019-07-20 19:18:39 236
原创 STL序列式容器之List
LIST概述相对于vector的连续性空间,list就要复杂的多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准性,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。list和vector是两个最常被使用的容器,什么情况下最适合使用哪一种容器,就要看元素的多或寡,元素的构造复杂度以及元素的存取行为的特性而定。L...
2019-07-17 13:26:19 221
转载 VMware Ubuntu安装详细过程
不是每一个程序员都必须玩过linux,只是博主觉得现在的很多服务器都是linux系统的,而自己属于那种前端也搞,后台也搞,对框架搭建也感兴趣,但是很多生产上的框架和工具都是安装在服务器上的,而且有不少大公司都要求熟悉在linux上开发,因此从个人职业发展有必要去多了解一下linux。(博主网上查了一下,现在大部分服务器安装的系统主要有:ubuntu server、centos、suse lin...
2019-07-17 12:22:38 89
原创 LeetCode之Add two Numbers两数相加
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return i...
2019-07-16 16:03:35 150
原创 STL序列式容器之vector
序列式容器所谓序列式容器:可序列集群,其中的元素都可序,但未必有序。vector概述vector的数据安排以及操作方式,与array非常相似。两者的唯一差别在于空间的运用的灵话性,array 是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细得由客户端自己来:首先配置一块新空间, 然后将元素从旧址搬往新址, 再把原来的空间释还给系统。 vector 是动态空间,随着...
2019-07-16 13:21:40 248
原创 C++STL概述
#STL(标准模板库)也是泛型程序库,是先辈建立的一种可重复使用的东西,以及一种得以制造出“可重复运用的东西”的方法,从子程序、程序、函数、类别、到函数库、类别库、各种组件,从结构化设计、模块化设计、面对对象设计,到模式的归纳整理为的就是复用性的提升。为了建立数据结构和算法的一套标准,并且降低其间的耦合关系,以提升各自的独立性、弹性、交互操作性而诞生了STL。##STL6大组件 功能与应用...
2019-07-15 16:29:40 292
转载 排序算法之链式基数排序(详解)内附大佬连接
所谓链式基数排序,就是实现基数排序时,为减少所需的辅助存储空间,应采用链表作存储结构,即链式基数排序。而基数排序也叫做多关键字排序,基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法。链式的基数排序算法解法思路(默认从小到大):1、以静态链表存储待排记录,并令表头指针指向第一个记录;2、“分配” 时,按当前“关键字位”所取值,将记录分配到不同的 “链队列” 中,每个...
2019-05-09 21:18:33 10558 5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人