自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 题10:二进制中1的个数

题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9 表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。思路:我们先一步步分析。如果最后一位是1,减去1就会变成0,左边的其他的数字都不会改变。如果最后一位是0,减去1就会最后位的1变成0,而1位之后的所有0变成1,左边其他数不变。 根据上面说的,我们继续分析。不管是什么状况,我们发现整数减去1,就是把最右

2018-02-07 17:28:39 274

原创 题9:斐波那契数列

题目:写一个函数,输入n,求斐波那契数列的第n项。 首先很容易能想到用递归的方法,但是递归又很多的重复运算,如果n很大,程序的效率就会很低,所以我们可以把每个数都保存下来,这样的话,会改进很多。用循环就可以解决。#include using namespace std;long long Fibonacci(unsigned int n){ int result[2]

2018-02-07 16:24:20 330

原创 题8:输入5个数(含负数、小数)将它们按由小到大的顺序排列起来 提示:需要排数的数字通过参数传递进来, 例如:输入:./a.out -1 2.1 -3 5 7 输出: -3 -1 2.1

题目:输入5个数(含负数、小数)将它们按由小到大的顺序排列起来 提示:需要排数的数字通过参数传递进来, 例如:输入:./a.out -1 2.1 -3 5 7 输出: -3 -1 2.1#include #include void Bubble(float a[], int length){ int i, j; for(i = 0; i 1; i++) {

2018-01-30 21:51:56 469

原创 题7:旋转数组中的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组中最小的元素。例如:数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小元素为 1 。使用两个指针,一个指向数组的开始,一个指向数组的末尾,那么一般情况下(存在特例)数组的首元素 会 大于数组的末尾元素。当 中间元素 大于 数组首元素 时,中

2018-01-30 21:35:46 229

原创 题6:用两个栈实现队列

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

2018-01-28 20:02:32 299

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

从尾到头打印链表有很多种办法。可以逆序然后遍历打印,但是如果不让改变链表结构,这时我们就要想怎么打印才更好。遍历的同时把数据放入一个栈中,遍历结束再遍历栈便可完成倒叙。但是这种结构就会让我们想到 递归。递归的使用可以完全简化了程序。struct LinkNode{ int Data; LinkNode * next;};void PrintReverse(L

2018-01-24 21:17:02 179

原创 题4:替换空格

请实现一个函数,把字符串中的每个空格替换为“%20”。 例如字符串为“We Are Happy” 转换为“We%20Are%20Happy”我们要注意,空格转化为%20,长度也会有所改变。#include using namespace std;void ReplaceBlank(char *str, int length) { if(str == NULL && le

2018-01-24 20:26:41 199

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

题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的个二维数组和一个整数,判断数组中是否含有该整数。例: 比如,此时要寻找数字2。 从右上角开始寻找,6大于2,6这一列其他数肯定大于6,即可以排除这一列。往前一列5大于2,再往前3大于2,即可排除这两列。1小于2,应往下,2=2,找到。#include us

2018-01-24 10:28:40 154

原创 题2:实现singleton模式

题目: 设计一个类,我们只能生成一个实例。第一个,是程序一开始便自动生成一个对象。这虽正确,但并不合理。#include using namespace std;class UserManager{private: UserManager() {}public: static UserManager *Getp() { coun

2018-01-23 21:42:01 164

原创 题1:赋值运算符重载

为MyStr添加赋值运算符操作。因为原题中只有类的大体框架,我就自己写了一个类和一个完整的函数。#include #include using namespace std;class MyStr // 因为程序中没有用到拷贝构造和析构, 我省略了{public: MyStr &operator = (const MyStr &str); MyStr

2018-01-23 20:57:07 373

原创 C++:函数模板

C++提供了函数模板(function template)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。函数模板定义形式 template

2018-01-22 11:02:06 247

原创 C++:多态

多态成立三个条件: 1、要有继承 2、要有虚函数重写 3、用父类指针(父类引用)指向子类对象静态联编和动态联编: 1、C++与C相同,是静态编译型语言 2、在编译时,编译器自动根据指针的类型判断指向的是一个什么样的对象;所以编译器认为父类指针指向的是父类对象。 3、由于程序没有运行,所以不可能知道父类指针指向的具体是父类对象还是子类对象 从程序安全的角度,编译器假设父

2018-01-20 15:54:18 174

原创 排序【8】之基数排序的C语言实现

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

2018-01-20 15:10:01 2666

原创 排序【7】之简单选择排序的C语言实现

是一种简单直观的排序算法,他的基本原理是:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮排序,得到最小的记录并与第二个记录进行位置交换;重负该过程,直到进行比较的记录只有一个为止。简单选择排序特点:最 大 特 点:移动次数少 时间复杂度:总共比较 n(n-1)/2 次 ,移动次数最多n-1, 时间复

2018-01-20 14:18:14 428

原创 排序【6】之快速排序的C语言实现

快速排序是一种非常高效的排序方法,采用“分而治之”的思想,把大的拆分为小的,小的在拆分为更小的。 原理是:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前部分的所有记录均比后部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均为有序为止。快速排序特点:稳 定 性:不稳定平均时间复杂度: O(nlog

2018-01-20 13:32:36 395

原创 排序【5】之归并排序的C语言实现

利用递归与分治技术将数据序列划分为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列。 原理如下:对于给定的一组记录,首先将两个相邻的长度为1的子序列进行归并,得到n/2个长度为2或者1的有序子序列,在将其两两归并,反复执行此过程,直到得到一个有序的序列为止。归并排序特点:平均时间复杂度: O(nlog2n)稳 定

2018-01-19 19:57:46 341

原创 排序【4】之直接插入排序的C语言实现

对于给定的一组记录,初始时假定第一个记录自成一个有序的序列,其余的记录为无序序列;接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列为止。例:将 29 18 87 56 3 27 按由小到大排序 ① (29) (18 87 56 3 27) ② (18 29) (87 56 3 27) ③

2018-01-16 20:02:48 2329

原创 C++:继承和派生

继承的基本概念继承的概念: 继承是使用已经编写好的类来创建新类,新的类具有原有类的所有属性和操作,也可以在原有类的基础上作一些修改和增补。语法声明: 派生类的声明语法为: class 派生类名: 继承方式 基类名 { 派生类新增成员的声明; }性质: 1、子类拥有父类的所有成员变量和成员函数 2、子类可以拥有父类没有的方法和属性 3、子类就是一种特殊的父类 4、子类对

2018-01-16 18:23:00 248

原创 C++:运算符重载

运算符重载概念:所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。限制:.     ::     .*     ?:     sizeof以上运算符不能重载全局函数、类成员函数方法实现运算符重载步骤      1)要承

2018-01-11 12:47:48 206

原创 C++:类和对象(二)

一、对象的构造和析构1、构造函数定义:1)C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数;2)构造函数在定义时可以有参数;3)没有任何返回类型的声明。 调用:自动调用:一般情况下C++编译器会自动调用构造函数手动调用:在一些情况下则需要手工调用构造函数规则:1)当类中没有定义任何一个构造函数

2018-01-11 12:21:20 250

原创 C++:类和对象(一)

一、面向对象编程介绍

2018-01-08 19:38:27 165

原创 C++:C到C++的过渡

C++对C的加强1.命名空间为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。 命名空间将全局作用域分成不同的部分不同命名空间中的标识符可以同名而不会发生冲突命名空间可以相互嵌套全局作用域也叫默认命名空间1)定义:namespace 是C++中的关键字,用来定义一个命名空间,语法格式为:namesp

2018-01-07 20:30:53 472

原创 项目:聊天室(TCP select架构)(链表)—— 客户端

c语言项目 聊天室 TCP SELECT架构

2017-12-28 21:59:53 1505

原创 项目:聊天室(Tcp Select架构)(链表)—— 服务器

C语言项目聊天室 TCP select架构

2017-12-28 21:53:56 1066

原创 排序【3】之希尔排序的C语言实现

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

2017-12-12 17:06:06 492

原创 Linux:网络编程

1. TCP/IP理论基础

2017-12-10 23:10:33 191

原创 Linux:多线程编程

1. 线程的基本概念线程:在一个程序中的多个执行路线就叫做线程(thread)。更准确的说,线程是一个进程内部的一个控制序列。为了理解线程,先回顾一下进程的概念:进程包括程序映像、地址空间等要素。内核使用PCB来管理进程。进程是内核进行调度的基本单元,每个独立的进程都有自己的代码段、数据段以及堆栈,它们使用自己的虚拟地址空间,多个进程间互不影响。与进程相比,线程没有自己

2017-12-09 22:41:59 216

原创 Linux:进程间通信方式

进程间通讯方式

2017-12-07 17:02:39 187

原创 项目:通讯录(I/O文件版)

#ifndef _ADDRESSBOOK_H_#define _ADDRESSBOOK_H_struct Addressbook{ char name[10]; char id[20]; char address[20]; char tele[20]; char mobile[20]; struct Addressbook *next;};ty

2017-12-07 15:47:12 388

原创 Linux:进程控制编程

进程控制编程1.进程控制理论基础进程:一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元。进程的生命周期:创建、运行、撤销。进程的状态:执行状态、就绪状态、等待状态。Linux多进程系统拥有并行性,互不干扰。每个进程都是一个独立的运行单位,拥有各自的权利和责任。Linux进程三个段:数据段、代

2017-12-06 20:09:07 416

原创 Linux:文件编程

系统调用所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务。用户程序不能直接访问系统内核提供的服务。用户编程接口—API:系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获取内核服务的接口。在实际使用中程序员调用的通常是用户编程接口—API。

2017-12-06 18:51:58 298

原创 Linux:文件编程学习中遇到的问题

1、为什么用户程序不能直接访问系统内核提供的服务呢?由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。2、我们操作完文件以后,怎么关闭文

2017-12-05 20:29:25 255

原创 C语言:近期学习整理

1、sizeof和strlen有哪些区别?区别如下:(1)sizeof是操作符,strlen是函数。(2)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型,该类型保证能容纳实现所建立的最大对象的字节大小。(3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以“\0”结尾的。(4)数组做size

2017-12-04 15:31:07 186

原创 排序【2】之冒泡排序的C语言实现

在这段日子整理了一下排序的几种方法。冒泡是运用最多的一种。基本上冒泡排序就可以解决问题,所以熟练的掌握它很有必要。冒泡排序 对于给定的n个记录,从第一个记录开始依次对相邻的两个记录进行比较,当前面的记录大于后面的记录时,交换其位置,进行一轮比较和交换位置后,n个记录中的最大记录将位于第n位;然后对前(n - 1)个记录进行第二轮比较;重复该过程直到进行比较的记录只剩下一个为

2017-12-04 12:26:44 460

原创 排序【1】之堆排序的C语言实现

堆排序堆堆是数据结构里的堆,而不是内存模型中的堆。堆可以看做一棵树。堆中任意结点的值总是不大于(不小于)其子节点的值。堆分为最小堆(小跟堆)和最大堆(大根堆)。    最大堆      最小堆堆排序的步骤1.先将数组->二叉堆2.去掉堆顶再调整为二叉堆如 将数组里的数字从小到大排序:

2017-11-30 19:45:53 364

原创 数据结构:链表

经过这几天的练习和做停车场项目,发现链表的应用非常广泛,如果可以用好它,可以解决很多的问题。所以整理一遍链表的内容。  特点 :  每个元素(表项)由结点(Node)构成。  线性结构 。  结点可以连续,可以不连续存储。  结点的逻辑顺序与物理顺序可以不一致。  表可扩充。#ifndef _LINKLIST_H_#define _LINKLI

2017-11-29 09:58:24 204

原创 项目:停车场

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

2017-11-29 00:16:06 580

原创 C语言:用栈实现四则运算

要注意对情况的分类。

2017-11-25 19:49:59 16467 2

原创 数据结构:单向链表的逆序

int ReverseList(LinkList l){ if(l == NULL)return 0; LinkList p = l->next; l->next = NULL; while(p != NULL) { LinkList q = p; p = p->next; q->next = l->next; l->next = q; } return 1;}

2017-11-24 14:41:29 302

原创 项目:通讯录(C语言的实现)

格式: 编号         姓 名        住址               电话                    住宅电话          201701       ***            xxxx        183****5668             ********要求:使用结构体形式对数据存储功能:使用链表实现增加(在增加人员的过程

2017-11-24 14:32:49 1273

空空如也

空空如也

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

TA关注的人

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