自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 day18之用shell脚本实现一个希尔排序

#!/bin/bashfunction ShellSort(){ echo "输入数组的长度" read size for((i=0; i<size; ++i)) do echo "输入第$((i+1))个元素" read array[i] done echo "${array[@]}" #array=(34 87

2017-07-31 13:01:27 409

原创 排序一之插入排序和希尔排序

1.插入排序 插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 算法描述: 1.从第一个元素开始,该元素

2017-07-31 12:53:33 266

原创 day17之将二叉搜索树转换成一个排序的双向链表

题目: 输入一棵二叉搜索树,将该二叉搜索树转换为一个排序的双向链表。要求不能创建任何新的节点,只能调整树中指针的指向。 分析与解法: 1、由于要求链表是有序的,可以借助二叉树中序遍历,因为中序遍历算法的特点就是从小到大访问结点。当遍历访问到根结点时,假设根结点的左侧已经处理好,只需将根结点与上次访问的最近结点(左子树中最大值结点)的指针连接好即可。进而更新当前链表的最后一个结点指针。

2017-07-30 01:53:02 353

原创 C语言模拟实现C++继承和多态

-C语言模式实现C++继承和多态C++中的多态我们知道的是在C++中会维护一张虚函数表,根据赋值兼容规则,我们知道父类的指针或者引用是可以指向子类对象的。如果一个父类的指针或者引用指向父类的对象,会调用父类的函数,如果该父类对象的指针或者引用指向的是子类的对象,而且该子类已经重写了父类的虚函数,则该指针会调用子类的已经重写的虚函数。//c++中的多态class A{

2017-07-28 23:52:36 362

原创 day16剑指offer---重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输出的前序遍历和中序遍历的结果都不含有重复的数字。前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5二叉树节点的定义如下:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeN

2017-07-28 23:31:04 250

原创 day15之求二叉树中两个节点的最近公共祖先

求二叉树两个节点的最近公共祖先:1:二叉树每个节点有parent(三叉链) 2:二叉树是搜索二叉树。 3:就是普通二叉树。(尽可能实现时间复杂度为O(N))

2017-07-27 18:19:11 572

原创 day15之判断一棵树是不是完全二叉树

1.完全二叉树的定义? 判断一棵树是否是完全二叉树,首先要知道什仫是完全二叉树?完全二叉树就是除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。 2、如何判断一棵树是完全二叉树? 两种判断完全二叉树的方法: 1)标记法: 设置标记flag=false,如上图所示,从根结点开始层序遍历入队列,如果队列不为空,一直循环。遇到第一个没有左孩子或者右孩子的结点,设

2017-07-27 18:04:39 746 1

原创 day14之判断一个节点是否在一棵二叉树中+判断一颗二叉树是是否是另一颗树的子树

判断一个节点是否在一棵二叉树中struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};判断一棵树是不是另一颗树的子树。

2017-07-26 17:29:33 1364

原创 day13之二叉树的前中后序遍历非递归+两个链表求差集

实现二叉树的前序/中序/后序非递归遍历。已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。 链表结点的结构类型定义如下: struct node { int elem; node* next;

2017-07-26 15:23:12 313

原创 day12之判断一棵二叉树是否是平衡二叉树+求一颗二叉树的镜像+判断一个数在二维数组中是否存在

判断一棵二叉树是否是平衡二叉树struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};//方式一:求每个节点的左右子树的高度,判断是

2017-07-25 01:45:31 795

原创 day11之求二叉树的高度+销毁一颗二叉树+链表每K个节点之间逆序

求二叉树的高度链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现Node* RotateList(Node* list, size_t k). 提示:这个题是链表逆置的升级变型

2017-07-23 23:08:33 275

原创 day10之求二叉树叶子节点的个数+求二叉树第k层的节点个数+数组中超过一半的数字

求二叉树叶子节点的个数`struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };数组中超过一半的数字{ if(

2017-07-22 15:03:33 341

原创 day09之N的阶乘N!末尾有多少个0 + 二叉树的层序遍历

给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0 思路:看到这题我们直观的思路就是先求出N!,再判断N!末尾有多少个0,但是这有个问题,当N 很大的时候,会溢出,所以这种思路只能计算N很小的情况。int ZeroOfNum(int num){ assert(num > 0); int i = 1; long l

2017-07-21 11:08:57 339

原创 day08之元素出栈、入栈顺序的合法性+计算一个整数二进制位中1的个数

元素出栈、入栈顺序的合法性 如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。 bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size() != popV.size()) return

2017-07-20 23:51:57 283

原创 day07之包含min函数的栈+查找一个字符串中第一个只出现两次的字符

实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) class Stack{ public: void Push(int val) { s.push(val); if(minstack.empty()) {

2017-07-19 13:22:28 246

原创 day06使用两个栈实现一个队列+使用两个队列实现一个栈+字符串空格替换

1.【基础题】--1.使用两个栈实现一个队列+使用两个队列实现一个栈 ps:两个题几乎是一样的思路,所以放一起了 2.【附加题】--替换字符串中的空格为$$$。要求时间复杂度为O(N) 例如:将"talk is cheap show me the code"替换。为"talk$$$is$$$cheap$$$show$$$me$$$the$$$code"。

2017-07-18 23:41:32 260

原创 C语言函数调用过程--栈帧

什么是栈帧? 每一次函数调用都为这次函数调用开辟一块空间,这个空间就叫做栈帧。 首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),我们称为栈底指针,寄存器esp指向当前的栈帧的顶部(低地址),我们称为栈顶指针。 注意:EBP指向当前位于系统栈最上边一个栈帧的底部,而不是系统栈的

2017-07-18 13:39:49 1526

原创 day05删除一个无头单链表的非尾节点 +从尾到头打印单链表+复杂链表的复制

1.删除一个无头单链表的非尾节点,时间复杂度为O(1)2.从尾到头打印单链表 【附加题】--复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。

2017-07-17 23:39:46 308

原创 day04之链表不带环相交+带环相交问题+fork函数输出几个短线

判断两个链表是否相交,若相交,求交点。(假设链表不带环)--1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】 2.【附加题】--请问下面的程序一共输出多少个“-”?

2017-07-17 00:50:17 290

原创 day03之判断链表带环以及求环的长度及环的入口点+一个类不能被继承及只能分别在栈堆上创建对象

判断链表是否带环?若带环求环的长度?若带环求环的入口点?struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL) { }};.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象。

2017-07-16 10:04:05 327

原创 day01之合并两个有序链表+实现1+2+3...+n要求不能使用乘除法循环条件判断等

合并两个有序链表,合并以后的链表依旧有序。递归写法和非递归写法实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。(这个题有多种解法,大家可以尽量去思考,这个题最优的解法时间复杂度是O(1) 构造函数写法,虚函数写法,逻辑或短路规则

2017-07-15 11:01:47 294

原创 day02逆置/反转单链表+查找单链表的倒数第k个节点+实现一个Add函数不用四则运算

-逆置/反转单链表查找单链表的倒数第k个节点,要求只能遍历一次链表 --实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--等等

2017-07-15 10:50:18 425

原创 vim/vi常用的快捷方式

一些像jkhl,dd,yy这种简单的快捷方式就不说了,说些稍微用点复杂的快键键:1.如何进行多行注释: 1.按ctrl+v进入visual block模式 2.选择要注释的行 3.大写的i进入插入模式 4.Esc退出。2.删除多行注释: 1.按ctrl+v进入visual block模式 2.选择要删除注释的行 3.按小写的d3.删除一行中某些

2017-07-09 17:23:46 484

原创 linux定时任务crontab命令和crond服务详解

linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。 一、crond简介 crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows

2017-07-09 12:22:37 5557 1

原创 如何用shell脚本语言去截取字符串

shell中几种常用截取字符串的方法 一. 概念 在shell中通过截取字符串操作可以提取到我们所需要的特定字符串 假设变量str=http://blog.csdn.net/hj605635529/article/details/73556855二. 操作符 ① #表示 从左截取,删除左边字符,保留右边字符#!/bin/bashstr=http://blog.csdn.net/hj60

2017-07-09 00:22:39 810

原创 用shell脚本语言实现一个斐波那契数列的递归和非递归版本

代码:#!/bin/bash -x#第一种写法#first=1#second=1#last=1##if [ $1 -le 2 ];then# echo 1#fi##i=3#while [ $i -le $1 ]#do# let last=first+second# let first=second# let second=last# let i++#done

2017-07-08 00:57:23 4778 2

原创 用shell脚本实现一个彩色的进度条

演示:代码如下:#!/bin/bashindex=('|' '/' '-' '\\') #定义一个字符数组bar='#'i=0while [ $i -le 100 ]do let colour=30+i%8 echo -en "\e[1;"$colour"m" printf "[%-100s][%d][%c]\r" "$bar"

2017-07-07 15:26:58 435

原创 linux下静态库和动态库的创建和使用

一》静态库的创建和使用: 静态库的制作1>. 命名规则1). lib + 库的名字 + .a2). libmytest.a2>. 制作步骤:1). 生成对应的.o文件 -- .c --> .o          -c2). 将生成的.o文件打包  ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o3>. 发布和使用静态库:1). 发布

2017-07-05 13:58:59 717

原创 centos6.5下如何搭建一个ftp服务器和使用客户端

一:搭建服务器:1.下载vsftpd软件:2.以root身份进入/etc/vsftpd目录:3.修改vsftpd.conf这个配置文件(千万记住不要在等号两边留空格)4.重启vsftpd服务:至此服务器端就搭建完毕了,就这么简单二:客户端使用:centos下ftp客户端需要自己安装,ubuntu下下载vsftpd默认装上了

2017-07-04 10:03:04 8787

原创 centos下如何安装rar和unrar软件

如果您的centos是32位的,执行如下命令wget http://www.rarsoft.com/rar/rarlinux-3.9.3.tar.gztar -zxvf rarlinux-3.9.3.tar.gzcd rarmake看见下面这些信息就是安装成功了:mkdir -p /usr/local/binmkdir -p /usr/local/libcp rar unrar

2017-07-03 23:13:38 426

原创 linux下gzip,bzip2,tar,zip,rar压缩与解压缩命令总结

1. 压缩包管理1>. 屌丝版:1). gzip -- .gz格式的压缩包(不会保留源文件   不会打包  gz结尾   不能压缩目录)2). bzip2 -- .bz2格式的压缩包(不会保留源文件(-k能保存源文件),不会打包   bz2结尾  不能压缩目录)2>. 高富帅版:1). tar -- 不使用z/j参数 , 该命令只能对文件或目

2017-07-03 22:34:22 380

原创 connect方法会阻塞,请问有什么方法可以避免其长时间阻塞?

步骤1: 设置非阻塞,启动连接实现非阻塞 connect ,首先把 sockfd 设置成非阻塞的。这样调用connect 可以立刻返回,根据返回值和 errno 处理三种情况:(1) 如果返回 0,表示 connect 成功。(2) 如果返回值小于 0, errno 为 EINPROGRESS,  表示连接      建立已经启动但是尚未完成。这是期望的结果,不是真正的错误。

2017-07-02 21:14:11 7735

原创 udp调用connect的作用总结

1:UDP中可以使用connect系统调用2:UDP中connect操作与TCP中connect操作有着本质区别.TCP中调用connect会引起三次握手,client与server建立连结.UDP中调用connect内核仅仅把对端ip&port记录下来.3:UDP中可以多次调用connect,TCP只能调用一次connect.UDP多次调用connect有两种用途:1,指定一个新的ip&

2017-07-02 20:42:07 1303

空空如也

空空如也

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

TA关注的人

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