自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浅谈SQLITE3运用

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

2018-02-07 16:41:24 378

原创 用QT做一个单机版答题系统(数据库MySql)

在用QT做一个答题系统之前,先实现单机版的从数据库读题的功能。 以下是我在上一篇的基础上加入连接数据库并读题的代码及最后实现的界面。 首先在pro里加入sqlQT += core gui sql在数据库中建表的时候 需要题号,题目,选项A,B,C,正确答案选项 于是在头文件中建了6个表来存放:#ifndef WIDGET_H#define WIDGET_H

2018-02-07 16:32:38 5909 4

原创 面试题7:用两个栈实现队列

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。template typename T> class CQueue{public: CQueue(void); ~CQueue(void); void appendTail(const T& node)

2018-01-29 22:02:40 351

原创 用QT做一个简单的答题界面

学了两天的QT界面,今天老师布置了作业让我们用QT做一个简单的单人答题界面类似微信应用里的头脑王者,每十秒答一题,一共答5题,最后输出分数。下面是我自己的步骤、界面及程序:(尽量从简的)首先打开QT ,新建一个应用程序 创建完成以后创建设计师界面类 在界面中插入倒计时用的时间(lcdNumber),切换页面用的窗口(stacked widget),所需文本(Label)等等。 大致是这样,然后

2018-01-29 21:06:11 10505 2

原创 面试题6:重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果。请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如图所示的二叉树并输出它的头节点。二叉树结点的定义如下struct BinaryTreeNode{ int m_nValue;

2018-01-26 21:18:11 284

原创 一些知识点

库函数与系统调用的联系与区别一般而言,跟内核功能与操作系统特性紧密相关的服务,由系统调用提供; 具有共通特性的功能一般需要较好的平台移植性,故而由库函数提供。库函数与系统调用在功能上相互补充,如进程间通信资源的管理,进程控制等功能与平台特性和内核息息相关,必须由系统调用来实现。ls -al每一列的意思ls -al 查看文件信息 drwx——+ 9 zyu st

2018-01-26 10:46:28 294

转载 linux下的符号链接文件

链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link,也叫做软链接)。默认情况下,ln命令产生硬链接。 (一)硬链接 1.产生硬链接的语法ln 源文件 目标文件 (注意:不能为目录创建硬链接)2.关于inode inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 … … )被格式化为文件系统后,应该有两部

2018-01-26 09:59:42 24157

原创 面试题5:从尾到头打印链表

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};看到这道题后,很多人的第一反应是从头到尾输出将会比较简单,于是我们很自然的想到把链表中链接结点的指针反转过来,改变链表的方向,然后就可以从头到尾输出了。但该方法会改变原来

2018-01-25 20:39:05 332

原创 类型转换、异常

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

2018-01-25 18:52:53 1119

原创 函数模板与类模板

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

2018-01-25 18:47:49 237

原创 多态

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

2018-01-24 19:58:38 329

原创 继承与派生

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

2018-01-24 19:42:12 282

原创 面试题4:替换空格

题目:请实现一个函数,把字符串中的每个空格替换成“%20”.例如输入“We are happy.”则输出“We%20are%20happy.”。 在网络编程中,如果URL参数中含有特殊字符,如空格、‘#’等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在‘%’后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六

2018-01-24 16:49:44 239

原创 运算符重载

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

2018-01-24 14:27:04 211

原创 面向对象编程(2)

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

2018-01-24 14:08:17 251

原创 面向对象编程(1)

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

2018-01-24 11:18:23 217

原创 引用、内联函数、默认参数、占位参数、函数重载

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

2018-01-24 10:45:20 276

原创 C++入门

一、命名空间 将全局空间进行划分,全局空间也被称为默认命名空间,命名空间可以相互嵌套。//命名空间的定义,命名空间内可以写变量、函数、宏定义namespace Name1{ int a;}namespace Name2{ int a; int b; int c;}命名空间的使用:1.使用域解析符Name1::a = 10;Name2::a = 20;

2018-01-24 10:08:22 502

原创 面试题3:二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于属组不含有该数字,则返回false。 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 1

2018-01-23 19:37:32 237

原创 归并排序

方法1#include <stdio.h> #include <stdlib.h> void Merge(int array[], int start, int middle, int end) { int i, j, k, n1, n2; n1 = middle - start + 1; n2 = end - middle;

2018-01-23 12:23:33 179

原创 快速排序

快速排序是一种非常高效的排序方法,采用“分而治之”的思想,把大的拆分为小的,小的在拆分为更小的。 原理是:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前部分的所有记录均比后部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均为有序为止。#include <stdio.h> void Sort(int array[], int low, i

2018-01-23 12:20:31 135

原创 面试题2: 实现Singleton模式

题目:设计一个类,我们只能生成该类的一个实例 只能生成一个实例的类是实现了Singleton(单例)模式的类型。由于设计模式在面向对象比程序设计中起着举足轻重的作用,在面试过程中很多公司都喜欢问一些与设计模式相关的问题。在常用的模式中,Singleton是唯一一个能够用短短几十行代码完整实现的模式。因此,写一个Singleton的类型是一个很常见的面试题。不好的解法一:只适用于单线程环境 由

2018-01-22 16:09:54 249

原创 希尔排序

希尔排序也称为“缩小增量排序”,基本原理是:首先将待排序的元素分为多个子序列,使得每个子序的元素个数相对较少,对各个子序分别进行直接插入排序,待整个待排序序列“基本有序后”,再对所有元素进行一次直接插入排序。 具体步骤如下: (1)选择一个步长序列t1, t2, ..., tk,满足ti >tj(i <j),tk = 1。 (2)按步长序列个数k,对待排序序列进行k趟排序。

2018-01-22 10:24:38 198

原创 堆排序

堆排序是一种特殊的树形数据结构,其每个节点都有一个值,通常提到的堆都是指一棵完全二叉树,根节点的值小于(或大于)两个子节点的值,同时根节点的两个子树也分别是一个堆。堆排序主要包括两个过程:一是构建堆,二是交换堆顶元素与最后一个元素的位置。#include void DisArray(int a[],int n); void AdjustHeap(int a[],int s,in

2018-01-22 10:23:06 155

原创 基数排序

基数排序(Radix Sorting)是一种借助多关键字排序的思想对单逻辑关键字进行关系的方法。基数排序不需要进行记录关键字间的比较。主要分为两个过程:(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中#include #include void Radix

2018-01-22 10:21:55 173

原创 面试题1 赋值运算符函数

如下为类型CMyString的声明,请为该类型添加赋值运算符函数class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void);private: char* m_pData;};当面试官要求应聘者定义一个赋值运算符函数时,他会在检查

2018-01-21 20:02:43 314

原创 简单选择排序

简单选择排序是一种简单直观的排序算法,他的基本原理是:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮排序,得到最小的记录并与第二个记录进行位置交换;重负该过程,直到进行比较的记录只有一个为止。#include <stdio.h> void SelectSort(int *a, int n) {

2018-01-21 19:08:37 280

原创 直接插入排序

对于给定的一组记录,初始时假定第一个记录自成一个有序的序列,其余的记录为无序序列;接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列为止。#include void InsertSort(int par_array[], int array_size) { int i, j; int temp

2018-01-21 19:07:18 165

原创 网络编程代码实例

最简单的服务器、客户端连接:#include <stdio.h>#include <sys/types.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <pthread.h>#define PORT 8

2017-12-12 18:19:55 1833

原创 linux网络编程2

字节序转换 不同类型的 CPU 对变量的字节存储顺序可能不同:有的系统是高位在前,低位在后,而有的系统是低位在前,高位在后,而网络传输的数据顺序是一定要统一的。所以当内部字节存储顺序和网络字节顺序不同时,就一定要进行转换 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。 网络字节顺序采用big en

2017-12-12 18:10:54 217

原创 linux网络编程1

协议栈 Linux的优点之一就是在于它丰富而稳定的网络协议栈,其范围是从协议无关层(如通用的socket层接口和设备层)到各种网络协议的实现; 对于网络理论介绍一般采用OSI模型,但是Linux中网络栈的介绍一般分为四层的Internet模型 网络模型数据封装 TCP/IP协议族 TCP/IP 实际上一个协同工作的通信家族,为网络数据通信提供通路。为讨论方便可TCP/IP 协议组大体上分为

2017-12-10 23:40:22 240

原创 通讯录改进(可以保存至文件并读取)

头文件:#ifndef _NODE_H_#define _NODE_H_struct node { char id[100] ; char name[10]; char address[10]; char tel[100]; char mob[100]; struct node *next;};typedef struct node Node

2017-12-10 19:23:11 1070

原创 进程间通信具体实现代码(两个程序间互发信息)

无名管道#include <stdio.h>#include <stdlib.h>#include <sys/wait.h>#include <sys/types.h>int main(){ int ret; pid_t pid; int count = 0; int fd[2] = {0}; ret = pipe(fd); if(-1 == r

2017-12-10 19:19:36 1265 1

原创 linux多线程编程

多线程 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程.现在,多线程技术已经被许多操作系统所支持,包括Windows/NT、Linux进程: 进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的

2017-12-09 19:34:35 206

原创 进程间通信——信息队列

unix早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列(也叫做报文队列)则克服了这些缺点。消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式。 进程可以向其中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。消息队列分两种: POSIX消息队列以及系统V消息队列 系统V消息队列目前被大量使用1、持

2017-12-07 19:32:58 284

原创 进程间通信方式

一、进程间通信的目的: 1、数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间 2、共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到 3、通知事件:一个进程需要向另一个或一组进程发送消息,通知它发生了某种事件 4、资源共享:多个进程之间共享同样的资源,为了做到这一点,需要内核提供锁和同步机制 5、进程控制:有些进程希望完

2017-12-07 19:25:53 179

原创 linux进程控制编程

进程的定义 进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元进程与程序的区别: 程序是放到磁盘的可执行文件 进程是指程序执行的实例 进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制 进程是暂时的,程序使长久的:进程是一个状态变化的过程,程序可长久保存 进程与程序组成不同:进程的

2017-12-06 20:18:37 218

原创 linux文件编程

系统调用 所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务 由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。 因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用

2017-12-06 19:29:10 224

原创 11.23 作业

1.题目:创建单链表并赋值,要求遍历能输出1~9#include<stdio.h>#include<stdlib.h>#define malloc_error -1typedef int ElemType;typedef struct node{ElemType data;struct node *next;}Node;typedef Node *PNode;int Create_He

2017-11-30 15:35:25 340

原创 链队列基本函数

头文件:#ifndef LINKQUEUE_H_#define LINKQUEUE_H_#define SUCCESS 10000#define FAILURE 10001typedef int ElemType;typedef struct node{ ElemType data; struct node *next;}Node;typedef struct queue{

2017-11-30 15:29:15 777

空空如也

空空如也

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

TA关注的人

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