- 博客(54)
- 收藏
- 关注
原创 【剑指offer】面试题之二叉树系列(一)
1、把二叉树打印成多行 题目描述: 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行 思路: 层序遍历 问题:怎样去确定它的每一层有多少结点按层次输出二叉树访问根节点,并将根节点入队。当队列不空的时候,重复以下操作。1、弹出一个元素。作为当前的根节点。2、如果根节点有左孩子,访问左孩子,并将左孩子入队。...
2018-08-14 19:05:51
226
原创 str系列库函数的模拟实现
1、模拟实现strlen :字符串求长度 思路:字符串都有结束标志\0,只要遍历这个字符串,知道遇到\0结束,就能轻松的获得字符串的长度了 (1)不创建计数器(递归)int my_strlen1(const char* str){ if ('\0' == *str) return 0; else return 1 + my_strlen1(...
2018-08-14 18:51:54
383
原创 rotate_list(旋转链表)
题目描述 Given a list, rotate the list to the right by k places, where k is non-negative. 给定一个链表,将链表向右旋转k个位置,其中k是非负的。 For example: Given1->2->3->4->5->NULLand k =2, return4-&g...
2018-08-09 19:04:05
346
原创 partition-list
题目描述:Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x. You should preserve the original relative order of the nodes in ea...
2018-08-07 10:56:34
200
原创 链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点。思路: 定义两个指针:一个pPre,一个pCur,让pPre先走k-1步(这里用for循环来实现pCur不动。当从第k步开始,让两个指针再同时出发(这样两个指针之间的距离始终就是k-1),当pPre走到尾指针时,pCur 刚好走到倒数第k个结点 ...
2018-08-06 21:30:43
157
原创 排序之交换排序(快排)
1、冒泡排序:稳定 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。 基本思想: (1)比较相邻的元素。如果第一个比第二个大,就交换他们两个...
2018-08-03 18:06:40
453
原创 两个链表的公共结点
题目描述: 输入两个链表,找出它们的第一个公共结点 思路: 如上图所示,两个链表从第一个公共结点开始,后面的所有结点都是重合的,并且不可能再出现分叉 思路一:在第一个链表上顺序遍历每个结点,每遍历一个结点,就在第二个链表上顺序遍历每个结点,直到找到第一个公共结点。 时间复杂度为O(mn) 思路二:首...
2018-08-03 16:45:19
316
原创 排序之选择排序
二、选择排序 1、选择排序(区间在不断地变小 ) 基本思想: 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 (首先,选出最小的数放在第一位,然后选择第二小的数,放在第二位;以此类推,直到所有的数从小到大排列.那么,对于大小为N的数组需要...
2018-07-23 13:11:52
570
原创 排序之插入排序
一、什么是排序 1、概念 排序就是将一组杂乱无章的数据按照一定的规律(升序或者降序)组织起来 2、分类 3、各排序之间的时间复杂度&空间复杂度&稳定性 二、插入排序 1、直接插入排序 基本思想: 当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好 序,此时用array[i]的排序...
2018-07-23 09:18:02
767
1
原创 shell基础之工具(一)
一、sort sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按照ASCII码值进行比较,最后将它们按升序输出(默认情况下都是升序)sort的常见几个选项: (1)sort -r:排序方式改为降序 (2)sort -u:在输出行中去除掉重复行 (3)sort -n:以数值来排序 (4)sort -t:设置间隔符 (5)sor...
2018-07-16 10:58:39
232
原创 正则表达式
相信大家都知道见过正则表达式,但什么是正则表达式嘞? 正则表达式就是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过 特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。 正则表达式目前被集成到了各种文本编辑器/文本处理工具当正则表达式的分类:基本的正则表达式(Basic Regular Expression 又叫 Ba...
2018-07-07 15:56:26
314
原创 fd与FILE结构体
前言: fopen,fclose,fwrite,fread属于C库当中的函数,为库函数调用。而open,close,write,read这几个函数属于系统提供的借口,称之为系统调用。库函数和系统调用是上下级关系,在库函数中封装了系统调用的函数。(库函数为啥都有的大哥,系统调用就是有一部分的小弟)一、文件描述符fd1、简介 文件描述符就是以0开始的一个小整数(文件描述符无...
2018-06-08 00:03:04
408
原创 【剑指offer】------将字符串中的空格替换
题目描述:将一行字符串中的空格替换成为%20 eg:hello world 准换成为 hello%20world题目分析: 方案一:可以允许开辟新的空间 遍历旧字符串复制,遇到空格就在新字符串上填入“%20” !!!方案二:不允许开辟新的空间,只能在原来的字符串上操作(原来的空间足够长) 1、从前往后 从前往后替换时,很容易覆盖掉后面的字符2、...
2018-05-26 21:21:58
181
原创 表的增删改查(CRUD)
1、增加 语法:insert into table_name[(column[,column...])] values (value [,value...]);增加进阶: 更新: 主键插入如果重复:(如果重复做更新,如果不重复做插入) insert into t7 values(1,”易烊千玺”) on duplicate key update name = ...
2018-05-26 18:29:03
2171
原创 多线程------线程的等待与分离
一、线程等待// 函数原型#include <pthread.h>int pthread_join(pthread_t thread, void **retval);// 参数 thread:线程ID retval:它指向一个指针,后者指向线程的返回值//函数功能:等待线程结束//返回值:成功返回0,失败返回错误码 ...
2018-05-15 20:26:35
549
原创 多线程-------线程的同步与互斥
一、什么是互斥量(mutex) 先来看一段代码:操作共享变量会有问题的售票系统Makefile mypthread.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <pthread.h>in...
2018-05-15 11:20:43
243
原创 数据库中表的常见七大约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业 务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。1、空属性not null:not null 此列属性不允许为空,必须做数据插入create table t1( per_name varchar(20), per_age int no...
2018-05-14 20:15:55
20844
2
原创 数据库中表的基本操作【面试常考点】
1、创建表// 语法CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;(1)field 表...
2018-05-06 20:27:18
621
原创 数据库的备份和恢复
一、创建数据库 1、数据库的创建语法:create database [IF NOT EXISTS] 数据库名; CREATE DATABASE [IF NOT EXISTS] 数据库名 [create_specification [, create_specification] ...]示例:创建一个名为mysweet的数据库 **字符集和校验规则**数...
2018-05-05 22:56:25
196
原创 多线程------线程的基本概念&创建&终止
一、什么是线程 1、概念 在Linux下进程是承担系统分配资源的基本单位。Linux下的进程称之为轻量级进程。 在一个程序里的一个执行路线就叫做线程。线程就是“一个进程内部的控制序列”(线程是在进程内部运行的)。线程是承担调度的基本单位,一个进程可以有多个线程,它的执行力度比进程更细 注意点: 在Linux中,线程和进程共用一种数据结构...
2018-05-05 10:32:26
212
原创 【剑指offer】------查找字符串中第一次只出现一次的字符
题目:查找字符串第一次中只出现一次的字符 方法一:(不建议使用第一种方法) 从头遍历字符串,当遍历到某个字符时,就将其依次和后面的字符相比较,若不相同,则这个字符就是我们要找的字符。该方法的时间复杂度较大为O(n^2) 方法二: 借助数据容器哈希表,先将字符串遍历一遍,保存每个字符出现的次数。然后再依次遍历每个字符,每遍历一个字符就找出哈希表中对应...
2018-05-02 22:01:15
200
原创 死锁概述
一、什么是死锁? 在多任务系统下,当一个或者多个进程等待系统资源,而资源又被进程本身或者其他进程所占用时,就会形成死锁。 由于资源占用是互斥的,当某个资源提出申请资源后,使得有关进程在无外力协助下永远分配不到必须的资源而无法继续运行。二、死锁产生的四个必要条件 (1)互斥条件 一个资源每次只能被一个进程所占有 (2)不可抢占资源 ...
2018-04-23 22:18:40
254
原创 并查集-----小米面试题之朋友圈问题
先来看一下题目: 已知有n个人和m个好友关系(存在数字r),如果两个人是直接或者间接的好友(好友的好友的好友……),则认为他们属于同一个朋友圈。请写程序求出这n个人里一共有多少个朋友圈? 例如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于一个朋友圈。最终结果就是2个朋友圈...
2018-04-19 19:12:36
465
原创 Linux进程信号之阻塞信号
前两天写了信号的基本概念以及如何去产生信号,欢迎大家戳博客链接:https://blog.csdn.net/apt1203JN/article/details/79955014 先来了解一下信号的三种状态:* 信号递达(Delivery):实际执行信号的处理动作* 信号未决(Pending):信号从产生到递达之间的状态* 信号阻塞(Block):进程可以选择阻塞某个信号,被阻塞的信号产生时将保
2018-04-18 21:34:53
2803
原创 如何测试机器的大小端
一、大小端 1、为啥会有大小端 在计算机系统中以字节为单位,每个地址单位都有一个字节(一个字节8个bit位)。在C语言中,有char(8bit)、short(16bit)、long(32bit,具体看编译器)。对于位数大于8的处理器,不如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在一个如何将多个字节安排的问题。so就有了大端存储模式和小端存储模式2、大小端的...
2018-04-16 17:49:19
1041
原创 Linux进程信号之如何产生信号
一、信号概念在日常生活中,我们经常也会遇见信号,比如“上下课的铃声”、“十字路口的红路灯” 。而在Linux中,信号如同交通信号灯一样,它就是给操作系统或者进程提供某种信息,让操作系统或者进程做出某种对应的反应,就如同十字路口的红路灯显示红灯时,告诉行人此时应该停下……让我们来看一下Linux系统定义的信号: 如上图所示,一共有62种信号(是不是有读者和我刚开始时一样以为有64种,哈...
2018-04-15 23:20:17
505
原创 代码实现一个日期类Date
日期类是C++类学习过程中比较重要的一个类,这次写的日期类主要用来模拟实现(1)日期的加减days(2)两个日期之间相隔的天数(3)判断两个日期时间是否相等(4)比较两个日期之间的大小日期类实现起来并不复杂,主要难点在于保证日期的有效合理性(比如需要解决每个月的天数不相等的问题,给某一天加上或者减去一个天数之后保证得到的天数是在当月的合理值之内的)。 话不多说,贴出代码……具体代...
2018-04-13 11:05:00
1305
原创 遍历二叉树-------递归&非递归
一、什么是树?什么又是二叉树 (1)树的定义 树是一种特殊的数据结构,是由N(N>=0)个节点构成的具有层次关系的集合。每棵树都有一个特殊的结点,就是根结点,根节点没有前驱结点;除过根节点的其余结点被分为若干个互不相交的集合,称之为子树;每个子树的根结点有且仅有一个前驱,可以有0个或者多个后继 (2)那么问题来了,什么是二叉树嘞?二叉树是每个结点最多有两个子树的有序树(它由一...
2018-04-10 21:48:12
230
1
原创 进程间通信之消息队列
一、消息队列? 消息队列是个什么东东嘞?它其实就是有点像我们玩的qq啊微信啊什么的,实现彼此之间的消息互发。目前有两种类型的消息队列:POSIX消息队列和System V消息队列。本篇博客学习的是System V消息队列。下面来简单接收一下消息队列:消息队列其实就是一个消息的链表。它提供了一个从一个进程向另一个进程发送一块数据的方法,每个数据块都被认为是有一个类型,接收者进程...
2018-04-08 19:49:04
173
原创 【牛客杂记】之类型转换
表达式会包含隐式类型转换,它由编译器自动执行,不需要程序员自己介入*何时发生隐式类型转换*1.在混合类型的表达式中,操作数会被转换为相同类型 eg: int a ; double b; a>=b; 这时a被转换为double2.条件表达式会被转换为bool类型 (1)条件操作符(? :)中的第一个操作数 (2)逻辑非(!)、逻辑与(&...
2018-04-07 21:37:46
192
原创 进程创建(一)之 fork & vfork
一、进程创建(PCB、虚拟地址空间、页表、数据(映射关系加载好)) 1、fork fork可以从已有的进程中创建出一个新进程也叫作子进程,原来的那个进程就叫做父进程。一般,fork创建出子进程后,子进程一般是和父进程代码实现共享,数据实现写时拷贝的。进程调用fork,当控制转移到内核中的fork代码后,内核会(1)将分配新的内存块和内核数据结构给子进程。(2)将父进程部分数据结构拷...
2018-04-07 21:00:49
302
原创 打包生成一个静态库&动态库
静态库和动态库之间不同之处就在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大;动态库(共享库)的代码是在可执行程序运行时被载入内存的,在编译过程中仅简单的引用,因此代码体积较小一、静态库和动态库的定义 1、静态库(.a) 程序在编译链接的时候把库的代码链接到可执行文件中,程序运行的时候将不再需要静态库下面打包实现一下静态库://ad...
2018-04-07 16:13:57
4074
1
原创 代码模拟实现僵尸进程&孤儿进程的场景
一、僵尸进程 1、什么是僵尸进程 当子进程退出并且父进程没有等待它(没有使用wait()调用),没有读取到子进程的退出时的返回代码时就会产生僵尸进程。即只要子进程退出,父进程继续运行,但父进程没有读取子进程的状态,此时子进程进入Z状态(僵尸状态)。下面看一段僵尸进程的例子:(进程维持30秒僵尸态) Makefile.PHONY:test test : test.c ...
2018-04-02 18:37:22
217
原创 浅析进程概念以及进程状态
一、进程是什么? 程序:完成特定任务的一系列指令的集合。(官方定义) 进程: (用户角度):程序的一次动态执行过程。 分时系统:时间片轮转 (操作系统角度):进程是操作系统分配资源的基本单位,也是最小单位 进程是怎样被操作系统管理起来? 先将进程描述起来,再将进程组织起来。那么问题来了,操作系统怎样去描述进程?这是就轮到我们PCB...
2018-04-01 17:37:01
294
原创 进程间通信之管道
进程间通信的本质就是让两个毫不相干的进程去看到同一份资源(操作系统所提供的)一、管道的定义 管道是比较古老的进程间通信的形式,把从一个进程连接到另一个进程的一个数据流称为一个“管道”。二、管道的两种方式 1、匿名管道 匿名管道是一种最基础的IPC机制,由pipe函数创建#include <unistd.h>int pipe(int f...
2018-03-30 23:31:11
159
原创 浅析堆的基本操作以及堆排序
一、堆的基本介绍1、堆的概念 堆是一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组的对象。堆满足以下的性质 (1)堆中某个节点的值总是不大于或不小于其父节点的值 (2)堆总是一棵完全二叉树2、堆的分类 (1)最小堆:任一节点的关键码均小于等于它的左右孩子的关键码,位于堆顶的节点的关键码最小(向上调整) (2)最大堆:任一节点的...
2018-03-27 21:50:05
414
原创 文件标识符(fd)和FILE结构体
前言: fopen,fclose,fwrite,fread属于C库当中的函数,为库函数调用。而open,close,write,read这几个函数属于系统提供的借口,称之为系统调用。库函数和系统调用是上下级关系,在库函数中封装了系统调用的函数。(库函数为啥都有的大哥,系统调用就是有一部分的小弟)一、文件描述符fd1、简介 文件描述符就是以0开始的一个小整数(文件描述符...
2018-03-24 22:28:34
3324
1
原创 开启虚拟机时提示VMware Workstation cannot connect to the virtual machine.时的解决办法
打开虚拟机的时候,弹出对话框如下图所示: 提示出现上述错误,无法正常启动虚拟机,为什么会出现上述的问题嘞? 解:其实这个是授权服务问题,没有这个服务打开虚拟机软件时会出现相关权限缺失或错误的提示,虚拟机无法启动。有以下两种解决办法 方法一、以管理员身份运行 方法二、 (1)打开控制面板,找到管理工具中的服务 (2)单击服务,找到VMware Authorization...
2018-03-22 19:56:35
2122
原创 Linux下的部分指令和vim的简单配置
一、Linux下的部分基础指令 1、ls指令:对于目录而言,该命令列出该目录下的所有目录和文件;对于文件而言,将会列出文件名以及其他信息 我们一般常用的有以下几个:ls -l :列出文件的详细信息ls -a : 列出文件下的所有文件,包括以 . 开头的隐含文件ls -d :将目录像文件一样显示,而不是显示其下的文件。ls -t :以时间排序ls -R :列出所有子目录下的文件 ...
2018-03-22 18:56:33
188
原创 浅析B-树分裂
一、B-树的定义(适合查找的平衡的多叉树。) 一颗M阶(M>2)的B-树,是一颗平衡的M路平衡搜索树,可以是空树或者满足B-树的性质二、B-树的性质? (1) 根节点至少有两个孩子 (2) 每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子 (3) 每个非根节点至少有M/2-i个关键字,至多有M-1个关键字,并且以升序排列 (4)...
2018-03-17 17:24:58
5457
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人