- 博客(55)
- 资源 (12)
- 收藏
- 关注
转载 网桥
1原理编辑网桥将两个相似的网络连接起来,并对网络数据的流通进行管理。它工作于数据链路层,不但能扩展网络的距离或范围,而且可提高网络的性能、可靠性和安全性。网络1 和网络2 通过网桥连接后,网桥接收网络1 发送的数据包,检查数据包中的地址,如果地址属于网络1 ,它就将其放弃,相反,如果是网络2 的地址,它就继续发送给网络2.这样可利用网桥隔离信息,将同一个网络号划分成多个网段(属
2015-04-28 19:52:42 700
转载 反转单链表的几种方法
最近面试遇到了关于单项链表的问题来一个最常见的题目:反转单链表。假设单链表的数据结构定义如下: typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkedList;
2015-04-28 09:09:07 272
转载 单链表反转
单链表的翻转是一道很基本的算法题。 方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。 方法2:使用三个指针遍历单链表,逐个链接点进行反转。 方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。 方法1的问题是浪费空间。方法2和方法3效率相
2015-04-27 22:41:25 363
转载 未定义行为
在计算机程序设计中,未定义行为(英语:undefined behavior)是指行为不可预测的计算机代码。这是一些编程语言的一个特点,最有名的是在C语言中。[1]在这些语言中,为了简化标准,并给予实现一定的灵活性,标准特别地规定某些操作的结果是未定义的,这意味着程序员不能预测会发生什么事。例如,在C语言中,在任何自动对象被初始化之前,通过非字符类型的左值表达式读取这个变量存储的值会产生
2015-04-26 21:19:24 1494
转载 C语言undefined behaviour未定义行为
C语言中的未定义行为(Undefined Behavior)是指C语言标准未做规定的行为。同时,标准也从没要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果,又或者如果程序调用未定义的行为,可能会成功编译,甚至一开始运行时没有错误,只会在另一个系统上,甚至是在另一个日期运行失败。当一个未定义行为的实例发生时,正如语言标准所说,“什么事情都可能发生”,也许什么
2015-04-26 21:13:01 388
原创 深入了解路由器与交换机的功能和区别
最近看到很多人在询问交换机、路由器是什么,功能如何,有何区别,笔者就这些问题简单的做些解答。 首先说交换机(又名交换式集线器)作用可以简单的理解为将一些机器连接起来组成一个局域网。而路由器与交换机有明显区别,它的作用在于连接不同的网段并且找到网络中数据传输最合适的路径 ,可以说一般情况下个人用户需求不大。路由器是产生于交换机之后,就像交换机产生于集线器之后,所以路由器与交换机也有
2015-04-25 20:54:00 1712
转载 一步一步写算法(之hash表)
hash表,有时候也被称为散列表。个人认为,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,但是数据查找十分麻烦;二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。 打个比方来说,所有的数据就好像许许多多的书本。如果这些书本是一本一本堆起来的,就好像链表或者线性表一样,整个数据会显
2015-04-18 11:00:54 272
转载 漫谈经典排序算法:五、线性时间排序(计数、基数、桶排序)
1、序言这是《漫谈经典排序算法系列》第五篇,给出了三种线性时间排序,分别是计数排序、基数排序、桶排序。各种排序算法的解析请参考如下: 《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经典排序算法:二、各种插入排序解析及性能比较》《漫谈经典排序算法:三、冒泡排序 && 快速排序》《漫谈经典排序算法:四、归并排序》《漫
2015-04-18 10:39:46 283
转载 漫谈经典排序算法:六、各种排序算法总结
1、这是《漫谈经典排序算法》最后一篇,总结了各种排序算法的时间复杂度、稳定性、辅助空间、约束条件。各种排序算法的解析请参考如下:《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经典排序算法:二、各种插入排序解析及性能比较》《漫谈经典排序算法:三、冒泡排序 && 快速排序》《漫谈经典排序算法:四、归并排序》《漫谈经典排序算法:五、线性时
2015-04-18 10:38:18 333
转载 漫谈经典排序算法:三、冒泡排序 && 快速排序
1、序言这是《漫谈经典排序算法系列》第三篇,先解析了冒泡排序,然后引出快速排序,给出了快速排序的两种实现版本。各种排序算法的解析请参考如下:《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经典排序算法:二、各种插入排序解析及性能比较》《漫谈经典排序算法:三、冒泡排序 && 快速排序》《漫谈经典排序算法:四、归并排序》《漫谈
2015-04-18 10:37:22 354
转载 漫谈经典排序算法:四、归并排序(合并排序)
1、序言这是《漫谈经典排序算法系列》第四篇,解析了归并排序。 各种排序算法的解析请参考如下:《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经典排序算法:二、各种插入排序解析及性能比较》《漫谈经典排序算法:三、冒泡排序 && 快速排序》《漫谈经典排序算法:四、归并排序》《漫谈经典排序算法:五、线性时间排序(计数、基数、桶排
2015-04-18 10:37:01 392
转载 漫谈经典排序算法:二、各种插入排序解析及性能比较
1、序言这是《漫谈经典排序算法系列》第二篇,解析了各种插入排序算法。主要包括:直接插入排序、折半插入排序、表插入排序、希尔插入排序。每一种算法的开头都叙述了引出该算法的原因,然后给出代码,最后分析算法效率及和其他插入排序相比,优劣在哪里。各种排序算法的解析请参考如下:《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经典排序算法:二、各种插入排序解
2015-04-18 10:36:32 384
转载 漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析
1、序言这是《漫谈经典排序算法系列》第一篇,该篇从最简单的选择排序算法谈起,由浅入深的详细解析两种选择排序算法的过程及性能比较。逐步揭露选择排序的本质及其基本思想。各种排序算法的解析请参考如下:《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经典排序算法:二、各种插入排序解析及性能比较》《漫谈经典排序算法:三、冒泡排序 && 快速排序》
2015-04-18 10:34:52 814
转载 排序算法——桶排序
桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将阵列分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的阵列内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。 例如要对大小为[1
2015-04-18 10:12:48 266
转载 基数排序
一. 算法描述基数排序(以整形为例),将整形10进制按每位拆分,然后从低位到高位依次比较各个位。主要分为两个过程:(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中重复(1)(2)过程,从个位到最高位(比如32位无符号整形最大数4294967296,最高位10
2015-04-17 17:48:11 260
转载 基数排序
一. 算法描述基数排序(以整形为例),将整形10进制按每位拆分,然后从低位到高位依次比较各个位。主要分为两个过程:(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中重复(1)(2)过程,从个位到最高位(比如32位无符号整形最大数4294967296,最高位10
2015-04-17 17:48:05 220
转载 计数排序
计数排序的基本思想是:统计一个数序列中小于某个元素a的个数为n,则直接把该元素a放到第n+1个位置上。当然当过有几个元素相同时要做适当的调整,因为不能把所有的元素放到同一个位置上。计数排序假设输入的元素都是0到k之间的整数。程序如下:#include void COUNTINGSORT(int *A, int *B, int array_size, int k){
2015-04-17 16:33:07 252
转载 贪心算法
顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。问题一、活动安排问题
2015-04-16 19:31:59 316
转载 白话经典算法系列之五 归并排序的实现
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plaincopy
2015-04-16 17:18:25 282
转载 白话经典算法系列之二 直接插入排序的三种实现
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。
2015-04-16 17:02:18 266
转载 白话经典算法系列之三 希尔排序的实现
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很
2015-04-16 17:01:40 347
转载 一步一步写算法(之排序二叉树)
前面我们讲过双向链表的数据结构。每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起。然而今天我们讨论的数据结构却有一点不同,它有三个节点。它是这样定义的:[cpp] view plaincopytypedef struct _TREE_NODE { int d
2015-04-16 16:02:19 564
转载 数据结构与算法常见笔试题
第一章 数据结构与算法一.算法的基本概念计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报。2.算法的基本要素:算法中对数据的运算和操作、算法的控制结构。3.算法设计的基本方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。4.算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求二.算法的
2015-04-16 11:23:34 615
转载 常用的排序算法的时间复杂度和空间复杂度
常用的排序算法的时间复杂度和空间复杂度排序法最差时间分析平均时间复杂度稳定度空间复杂度冒泡排序O(n2)O(n2)稳定O(1)快速排序O(n2)O(n*log2n)不稳定O(log2n)~O(n)选择排序O(n2)O(n2)稳定O(1)二叉树排序O(n
2015-04-16 11:22:40 331
转载 插入排序
一. 算法描述 插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个
2015-04-16 09:07:06 266
转载 杨氏矩阵查找
1. 简述杨氏矩阵中,每行元素是递增的,每列元素也是递增的。即a[i][j]2. 原理从矩阵的左下角或者矩阵的右上角处开始递归运行,以左下角为例,key为要查找的值,(i,j)为当前矩阵中的位置,初始为(N-1, 0)。如果超过了矩阵范围则说明不存在这样的元素。下面, 每行元素从左到右递增,每列元素从上到下递增。例如:5 52 3 4 5 63 4 5 6 7
2015-04-15 18:27:27 348
转载 杨氏矩阵查找
先看一个来自算法导论习题里6-3与剑指offer的一道编程题(也被经常用作面试题,本人此前去搜狗二面时便遇到了): 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字6,则返回true;如果
2015-04-15 16:49:06 338
转载 二叉查找树(二)之 C++的实现
上一章介绍了"二叉查找树的相关理论知识,并通过C语言实现了二叉查找树"。这一章给出二叉查找树的C++版本。这里不再对树的相关概念进行介绍,若遇到不明白的概念,可以在上一章查找。目录1. 二叉树查找树2. 二叉查找树的C++实现3. 二叉查找树的C++实现(完整源码)4. 二叉查找树的C++测试程序转载请注明出处:http://www.cnblogs.com/skyw
2015-04-14 11:16:31 365
转载 求阶乘N!末尾0的个数
POJ上有这个题目。http://poj.org/problem?id=1401。去掉一大堆没有用的信息,POJ的描述如下:For example, they defined the function Z. For any positive integer N, Z(N) is the number of zeros at the end of the decimal form of nu
2015-04-14 10:44:52 562
转载 在牛客网看到这样的一个选择题,给出自己的见解
题目是:以下程序输出是____。12345678910#include using namespace std; int main(void) { constint a = 10; int* p = (int *)(&a); *p =20; co
2015-04-14 08:56:58 454
转载 c++字符串详解(转)
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题………首先,为了在我们的程序中使用
2015-04-12 22:35:34 275
转载 C++ new、delete(new[]、delete[])操作符重载需要注意的问题
这篇文章主要介绍了C++ new、delete(new[]、delete[])操作符重载需要注意的问题,本文同时讲解了兼容默认的 new、delete 的错误处理方式、多态的问题等内容,需要的朋友可以参考下new、delete(new[]、delete[])操作符的重载需要注意:1.重载的 new、delete(或者 new[]、delete[])操作符必须是类的静态成员函数(
2015-04-11 22:48:05 768
转载 C语言/C++中如何产生随机数
C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数。需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件。使用rand()函数获取一个随机数如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机
2015-04-11 22:42:16 324
转载 C++运算符重载的规则
C++对运算符重载定义了如下几条规则。1) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 例如,有人觉得BASIC中用“**“作为幂运算符很方便,也想在C++中将”**“定义为幂运算符,用”3**5“表示35,这样是不行的。2) 重载不能改变运算符运算对象(即搡作数)的个数。如关系运算符“>”和“ 3) 重载不能改变运算符的优先级别。例如“*”和“
2015-04-11 22:23:56 474
转载 C++运算符重载的方法
运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下: 函数类型 operator 运算符名称 (形参表列) { // 对运算符的重载处理 }例如,想将”+”用于Complex
2015-04-11 22:23:19 329
转载 C++运算符重载函数作为类成员函数和友元函数
例10.2中对运算符“+”进行了重载,使之能用于两个复数的相加。在该例中运算符重载函数operator+作为Complex类中的成员函数。可能有的读者会提出这样的问题:”+“是双目运算符,为什么在例10.2程序中的重载函数中只有一个参数呢?实际上,运算符重载函数有两个参数,由于重载函数是Complex类中的成员函数,有一个参数是隐含的,运算符函数是用this指针隐式地访问类对象的成员。可以
2015-04-11 22:21:55 3739
转载 C++类型转换函数(类型转换运算符函数)
用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。C++提供类型转换函数(type conversion function)来解决这个问题。类型转换函数的作用是将一个类的对象转换成另一类型的数据。如果已声明了一个Complex类,可以在Complex类中这样定义类型转换函数
2015-04-11 22:00:23 428
转载 C++数据类型转换以及转换构造函数
标准数据类型之间的转换在C++中,某些不同类型数据之间可以自动转换,例如 int i = 6; i = 7.5 + i;编译系统对 7.5是作为double型数处理的,在求解表达式时,先将6转换成double型,然后与7.5相加,得到和为13.5,在向整型变量i赋值时,将13.5转换为整数13,然后赋给i。这种转换是由C++编译系统自动完成的,用户不需干预。这种转换称为
2015-04-11 21:57:59 303
转载 C++类型转换函数(类型转换运算符函数)
用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。C++提供类型转换函数(type conversion function)来解决这个问题。类型转换函数的作用是将一个类的对象转换成另一类型的数据。如果已声明了一个Complex类,可以在Complex类中这样定义类型转换函数
2015-04-11 19:57:04 1346
转载 C++数据类型转换以及转换构造函数
标准数据类型之间的转换在C++中,某些不同类型数据之间可以自动转换,例如 int i = 6; i = 7.5 + i;编译系统对 7.5是作为double型数处理的,在求解表达式时,先将6转换成double型,然后与7.5相加,得到和为13.5,在向整型变量i赋值时,将13.5转换为整数13,然后赋给i。这种转换是由C++编译系统自动完成的,用户不需干预。这种转换称为
2015-04-11 19:48:53 530
oxygen xml editor 17.0.7z keygen
2015-07-29
java基础教程_Java快车
2015-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人