自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 问答 (2)
  • 收藏
  • 关注

原创 MTK平台充电电量跳变分析[内空]

现象描述充电过程中,可以看到电量有在变化的过程,且变化速度正常,不存在有很大的电量异变,但是在充电一定时间后(比如说十分钟),插拔usb可以看到电量有明显的变化,幅度在5%左右。初步预估:在插拔usb过程中,会涉及到对电量计电量的获取,我们实际看到的电量都是在电量计的初始值基础上进行计算的,因此若是电量计的初始值在插拔usb状态下发生异变,那么实际UI的值的发生变化也是可以理解的。...

2018-11-05 14:59:20 1380

原创 菜鸟学习历程【34】全排列(1)

全排列定义:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。例如,对数组 int str[] = {1, 2, 3} 进行全排列,会有六种不同的组合 (1, 2, 3)、(1, 3, 2)、(2, 1, 3)、(2, 3, 1)、(3, 1, 2)、(3, 2,1)。首先,我们知道判断两个序...

2018-03-06 15:25:18 403

原创 shell的简单实用

1.获取进程ID#!/bin/shfunction GetPid #user #name{ # = 号两边不能有空格 PUSER=$1 PNAME=$2 # 换行时,在‘\’后紧跟一个ENTER # ps : 查看系统中瞬间进程信息,参数 -u 列出属于该用户的程序的状况 # grep:用于查找文件中符合字符串的当前行,参数 -...

2018-03-05 12:43:04 301

原创 面试题【9】数值的整数次方

题目:实现函数double Power(double base, int exponent),求 base 的 exponent 次方。不得使用库函数,同时不需要考虑大数问题。这道面试题看似简单,但很容易忽略一些细节问题。当指数为负数时,我们可以先对指数求绝对值,然后算出次方再求倒数。既然要求倒数了,我们很自然想到有没有可能对 0 倒数,对 0 求倒数怎么办? 根据上面的猜想,我们可以写出如...

2018-02-21 16:04:52 228

原创 面试题【8】二进制中 1 的个数

题目:请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是1001,有 2 位是 1 。因此,如果输入 9 ,该函数输出 2。分析:通常为了解决这个问题,我们会将每一位与 1 进行 & 运算,然后将这个数 右移(>>) 一次。那么根据这种思想,我们写出下面这样的代码:int NumberOf1(int n){ int...

2018-02-20 22:05:13 445

原创 面试题【7】对命令行参数传递的数(包括浮点数,负数,整数)进行排序

题目:输入5个数(含负数、小数)将它们按由小到大的顺序排列起来 提示:需要排数的数字通过参数传递进来, 例如:输入:./a.out -1 2.1 -3 5 7 输出: -3 -1 2.1 5 7 #include <iostream>using namespace std;float myAtof(char *ptr){ float s = 0.0; ...

2018-02-17 21:42:59 673

原创 面试题【6】斐波拉契数列

题目一:写一个函数,输入n,求斐波拉契数列的第n项。斐波拉契数列的定义如下:f(n) = 0 ,n = 0; f(n) = 1 ,n = 1; f(n) = f(n-1) + f(n-2) , n > 1大家很容易想到的方法是使用递归,太明显的递归思想,于是一顿操作猛如虎就把代码敲完了,可是为什么这么敲大家可否想过?这么敲的好处在哪? 我们先来看看低配版的代码什么样?l...

2018-02-14 23:13:34 398

原创 《头脑王者》——在线排位答题系统源码

声明:这些源码尚有可完善之处,因本人能力尚浅,如有错误,还望指正,谢谢!服务器端 1. widget.h & widget.cpp//widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QTcpServer> // tcp服务器类#include &...

2018-02-13 22:33:04 8620 9

原创 《头脑王者》--在线排位答题系统构思

《头脑王者》是一款在线排位制答题小应用,我们希望在学习完 QT 后,能做一个类似的应用,那么在真正开始着手之前,将功能细化、拆分,待整体思路清晰后,再开始写代码。抛开 排位制 和 在线 两个修饰语,答题这个功能,我们还是比较熟悉的。如何答题?在学完 C++ 的容器后,对数据的存储有了更加方便的选择,在 QT 中 进行“单机版”模拟时,我们先使用链表这个容器保存题目、选项、正确答案、实际...

2018-02-12 20:41:14 3522 2

原创 面试题【5】旋转数组中的最小数字

题干:把一个数组最开始的若干个元素搬到数组的末尾,我们称为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组中最小的元素。例如:数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小元素为 1 。我想最为直接的方法就是从头到尾,遍历一次,那么这样的时间复杂度为 O(n);通过这样的方法得到的结果,面试官虽然不能算我们错,但也绝对不会给我们高分。 我

2018-01-29 23:16:26 277

原创 面试题【4】用两个栈实现队列、用两个队列实现栈

题干:用两个栈实现一个队列。队列的声明如下:请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入结点和在队列头部删除结点的功能。首先,我们知道 栈 是先进后出的,队列 是先进先出的。我们先在 stack1 中插入 A 、 B、 C、 D 四个字母。 此时,我们如果要做出队操作的话,A 应该首先被 pop 出来,那么我们想到,把 stack1

2018-01-27 21:31:49 375

原创 面试题【3】链表的逆序打印

题干:输入链表的头结点,逆序打印出链表的值。因为每个人 对头结点的理解不一,这里 我分两种情况来写。第一种,头结点中的数据域不存放数据的; 第二种,头结点中的数据域存放数据的。 上面两种方法,都不会对链表的结构进行改变,本人之前在 菜鸟学习历程【12】链表 讲解过 将链表 结构 改变成 逆序的情况。如若,有讲述不正确的 地方,还希望得到指正。(1) 头结点中的数据域不存

2018-01-25 23:28:45 243

原创 面试题【2】替换空格

替换空格题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如:输入“We are happy”,则输出“We%20are%20happy”。我们脑海中立马闪出的想法是,从前往后遍历,每次找到一个 空格 就将 空格 后的字符向后整体移动 两个字节 ,那么 会出现部分字符 多次移动,这样时间复杂度就会提高,降低了效率。那么,我们换个思路,如果事先知道 有多少个空格,那么

2018-01-24 20:57:54 251

原创 面试题【1】二维数组中的查找

二维数组中的查找题干:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都自上而下递增的顺序排序,输入一个整数,判断该数组中是否存在。形如: 我想最普通的方法,就是一个一个,从头到尾的遍历,直到找到这个数为止,但这样效率太低了。 假如,我们需要寻找 8 ,那么发现 7 比 8 小,那么 8 肯定不在 7 这一行。因此,从 第二行 开始进行比较,发现 8 比10 小,那

2018-01-23 21:38:39 677

原创 菜鸟学习历程【33】类型转换、异常

类型转换在 c语言 中,类型转换时很简单的,大致分为两种: 1.隐式转换char c = 'A';int a = c; // a = 652.强制转换double d = 1.2;int a = (int) d; // 丢失小数部分这会导致两个问题的出现: 1)任何类型之间都可以转换,编译器很难判断正确性; 2)在源码中无法快速定位所有使用强制类型转换的语

2018-01-23 21:06:17 255

原创 菜鸟学习历程【32】函数模板与类模板

函数模板所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。模板:将 算法 与 数据类型 相分离;定义:template T>voi

2018-01-20 13:03:52 662

原创 菜鸟学习历程【31】多态

多态概念:同样的调用语句有多种不同的表现形式。 通俗的来说:根据传入的对象类型的不同,调用不同的派生类的相应函数。多态实现的条件: 1.要存在继承关系; 2.对虚函数的重写; 3.基类指针(引用)指向派生类对象静态联编与动态联编静态联编:程序匹配,连接在编译阶段实现,也称为早期联编(在编译的时候,就知道了该去调用谁) 例如:函数重载动态联编:程序联编推迟到运行时进行,

2018-01-16 20:50:35 220

原创 菜鸟学习历程【30】继承与派生

继承与派生类之间的关系:使用、包含、继承 使用:一个类使用了另一个类的对象,友元类、 包含:一个类中有另一个类的对象,例如,圆类 和 点类 继承:一个类是另一个类的特殊实例继承是使用已经编写好的类来创建新类,新的类具有原有类的所有属性和操作,也可以在原有的基础上进行增补。 通常我们将新类称为派生类(子类),将被继承的类称为基类(父类);语法:class 派生类: 继承权

2018-01-15 16:55:01 278

原创 菜鸟学习历程【29】运算符重载

我们知道,函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。 那么对于运算符而言,也可以重载实现不同的功能。不可重载的运算符有(用括号括起来): (.),(::),(.*),(?:),(sizeof) 不可使用友元函数重载的有: = 、 () 、 【】、 ->对于无法修改左操作数的时候,只能使用全局函数实现。双目运算符以“+”运算符为例//对于两个整型

2018-01-12 20:12:33 249

原创 菜鸟学习历程【28】面向对象编程(2)

对象初始化列表类中如果有一个其它类的对象,而其他类没有无参构造函数时,无法初始化该类的对象,此时需要对象的初始化列表。举个圆类与点类的例子进行说明:class Point{public: Point(int x, int y) { m_x = x; m_y = y; printf("调用了点(%d, %d)的构造函

2018-01-12 16:50:56 219

原创 菜鸟学习历程【27】面向对象编程(1)

面向过程编程 与 面向对象编程什么叫做面向过程编程?通俗的来说,这种编程风格如同从上到下,从左到右。首先,要考虑遵循的步骤,然后考虑如何表现这些数据。那么什么又是面向对象编程呢?从用户的角度出发考虑对象,描述对象所需的数据以及描述用户与数据进行交互所需要的操作。完成对接口的描述后,需要确定如何实现接口和数据存储。面向对象编程特点:封装、继承、多态封装:数据进行隐

2018-01-12 14:23:19 273

原创 菜鸟学习历程【26】引用、内联函数、默认参数、函数重载

引用我们定义一个整型变量 a ,并赋值10;int a = 10;整型数据占4个字节,a是一个标识符,这个标识符代表这个空间,对这个标识符的操作,就是对这块空间的操作。那么引用呢,就是给这段空间起一个小名,原本它被称为 a ,现在我们也可以叫它其他的名字。引用的格式:类型 & 小名 = 原名;例如:int &b = a; //b就是对a的引用别名依赖于原名,普通引用必须初始化。int &c;

2018-01-07 20:52:16 279

原创 菜鸟学习历程【25】C++入门

C++入门命名空间将全局空间进行划分,全局空间也被称为默认命名空间,命名空间可以相互嵌套。例如:这里在全局空间中,开辟了三个大的命名空间分别为Name1,Name2, Name3,其中Name3中又有两个命名空间Name4和Name5; //命名空间的定义,命名空间内可以写变量、函数、宏定义namespace Name1{ int a;}namespace Name2{ i

2018-01-05 20:25:02 336

原创 菜鸟学习历程【24】select 实现 聊天室( Server / Client 模式)

聊天室项目实战项目要求:采用client/server架构client A登录聊天服务器前,需要注册自己的ID和密码注册成功后,client A就可以通过自己的ID和密码登录聊天服务器多个 Client X 可以同时登陆聊天服务器之后,与其他用户进行通讯聊天Client A 成功登陆后可以查看当前聊天室内其他在线用户 Client xClient A 可以选择发消息给某个特定的

2018-01-05 13:12:48 829

原创 菜鸟学习历程【23】浅谈SQLITE3运用

SQLITE3数据定义(DDL):用户定义、删除和修改数据模式 数据查询(DQL):用于查询数据 数据操纵(DML):用于增、删、改数据 数据控制(DCL):用于控制数据访问权限基本常用命令:(命令前都有一个.) 1. .exit: 退出 2. .help:查看手册 3. .tables:查看有哪些表 4. .schema chat:查看表的结构SQL由命令组成,每个命令以

2017-12-25 20:22:07 304

原创 菜鸟学习历程【22】网络编程、TCP/IP、TCP与UDP

网络编程(本文很多概念源自书本《Linux高性能服务器编程》)一、TCP/IP协议族TCP/IP协议族是一个四层协议系统,分别是数据链路层、网络层、传输层、应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。 协议 应用层 TFTP、FTP、Telnet、DNS 传输层 TCP、UDP 网络层 ICMP、IP、ARP、RARP 网络

2017-12-10 17:37:52 411

原创 菜鸟学习历程【21】线程

线程在讨论线程前,我们把进程的相关概念再提一下,以便于与线程的相互比较。进程:进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元; 进程是程序执行时的一个实例,即它是程序已经执行到某种程度的数据结构的汇集。 从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点,每个进程

2017-12-09 19:38:27 203

原创 菜鸟学习历程【20】进程通信(2)

进程通信(2)信号信号本质:信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断信号是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道到底什么时候到达。信号来源:信号事件发生有两个来源,硬件来源(比如按下键盘或其他硬件故障);软件来源,最常用发生信号的系统函数是kill,raise,alarm,setitimer及sigque

2017-12-07 22:09:32 199

原创 菜鸟学习历程【19】进程通信(1)

进程通信(1)定义:一些复杂的应用程序可能会需要多个进程分工协作来满足所需的功能需求,这就必然涉及到数据在进程之间的共享或交换,称为IPC(Inter-process communication,进程间通信)。进程的用户空间是互相独立的,一般不能互相访问,唯一的例外是共享内存区;目的:数据传输:一个进程需要将它的数据发送到另一个进程,发送的数据量在一个字节到几兆字节之间。共享数据:多个进程需要共

2017-12-07 19:50:13 248

原创 菜鸟学习历程【18】通讯录项目

通信录项目实战格式: 编号 姓 名 住址 电话 座机 201701 xxxxx xxxx 183****5668 8568***1要求:使用结构体形式对数据存储功能:使用链表实现增加(在增加人员的过程中有一个自动排序功能,比如按姓名排序)、删除、修改、查找(比如:工号查找、电话查找)的功能; (1)添加用户信息(号码长度

2017-12-07 16:14:45 223

原创 菜鸟学习历程【17】进程控制编程

进程控制编程进程:进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元; 进程 程序 程序执行的实例 放到磁盘的可执行文件 进程不可在计算机之间迁移 程序通常对应着文件、静态和可以复制 动态 静态 暂时:进程是一个状态变化的过程 长久:程序可长久保存进程与程序组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)进程与程序的对应

2017-12-06 20:54:21 327

原创 菜鸟学习历程【16】文件编程

文件编程一、Linux文件Linux下,一切皆文件,在Linux下对设备和目录的操作都等同于对文件的操作。文件分类:普通文件、设备文件、目录文件、 链接文件;文件描述符:文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。二、Linux系

2017-12-05 23:04:00 249

原创 菜鸟学习历程【15-6】堆排序、归并排序、基数排序

堆排序 堆排序是将序列人为的类比做堆来处理,分为大堆和小堆,大堆就是双亲结点大于孩子结点,这里的孩子自身可能也是“双亲”,那么这个“双亲”还要大于它的孩子,小堆于此相反。 当所有结点满足这个大堆的条件后,最上面的根节点肯定是这个序列中最大的数,然后我们将这个数与最后一个结点交换,再对除了最后一个结点外的所有结点进行大堆处理,依次反复,最终会将这个序列排成从小到大的顺序。下面,让我们结合图

2017-12-04 11:49:36 894 1

原创 菜鸟学习历程【15-5】简单选择排序

5.简单选择排序简单选择排序,就是一种简单直观的排序方式,基本原理:第一次遍历时,将序列中最小的数与第一个位置的数进行交换;第二次遍历,将除去第一个数以外的所有数中最小数与第二个位置进行交换,直到最后只剩一个数;以序列a[] = {29, 17, 35, 6, 12, 31, 28, 15}为例; 这种排序比较容易理解,直接附上代码:#include void Se

2017-12-03 15:27:13 271

原创 菜鸟学习历程【15-4】冒泡排序

4.冒泡排序冒泡排序是大家最熟悉的一种排序方式,这种排序的基本思想是,将序列中两两相邻的数依次比较大小,按照递增或者递减的方式排序,以递增为例,将两两相邻的两个数中较大的数放在后面的位置,这样一轮结束后,最大的数会在序列的最后面。以序列a[] = {29, 17, 35, 6, 12, 31, 28, 15}为例;第一次遍历: 那么第一次遍历完成后,最大数35移到了序列的最后

2017-12-03 14:41:49 314

原创 菜鸟学习历程【15-3】快速排序

3.快速排序快速排序是一种非常高效的排序,采用“分而治之”的思想,将序列分成两部分,前部分的所有数据都小于后半部分,再将前半部分和后半部分拆分成两部分,这两部分的前半部分又都小于后半部分,按这样的规律排序下去,就会将整个序列按从小到大的顺序排列完成。那么具体是如何实现的,让我通过实例具体讲解一下。 以数组a[] = {28, 17, 6, 18, 37, 3, 20, 31}为例; 我

2017-12-02 21:02:46 408

原创 菜鸟学习历程【15-2】希尔排序

2.希尔排序希尔排序,也叫做减小增量排序,过程大致如下:(一般情况下,我们习惯上第一次遍历将数组长度length/2 作为一次遍历的步长)以数组a[] = {35, 27, 17, 22, 5, 25, 18, 40, 9, 11}为例;1.取数组长度(length/2)作为第一次遍历的步长,对每一组进行直接插入排序: 2.取上一次步长的一半 ,即 5/2 = 2为步长,将每一组

2017-12-02 19:00:52 324

原创 菜鸟学习历程【15-1】直接插入排序

排序就是按照递增或者递减的次序整理文件中的记录。 排序分为稳定排序和不稳定排序,什么是稳定,什么又是不稳定?例如:3 15 8 8 6 9 在上述6个数字中的排序过程中,如果将两个8的位置交换过,那么就称为不稳定排序,否则就是稳定排序。 换言之,在某个序列的排序过程中,如果对数值相等的数据进行过交换,那么这种排序就被称为不稳定排序,否则就是稳定排序。排序

2017-12-02 16:10:34 488

原创 菜鸟学习历程【14】停车场项目实战

停车场项目实战停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车要先退出,待它走后在依次进入。汽车离开时按停放时间收费。基本功能要求:          (1)建立三个数据结构分别是:停放栈、让路栈、等候队列。

2017-11-29 00:10:50 324

原创 菜鸟学习历程【13】栈和队列

栈和队列栈和队列是数据结构中比较常用的两种类型,栈(FILO)先进后出,即先存放的数据最后才能出栈、队列(FIFO)先进先出。

2017-11-29 00:10:14 431

空空如也

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

TA关注的人

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