- 博客(71)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 B-树 C++模板类封装
定义:一棵m阶B-树是拥有以下性质的多路查找树:1、非叶子结点的根结点至少拥有两棵子树;2、每一个非根且非叶子的结点含有k-1个关键字以及k个子树,其中⌈m/2⌉≤k≤m;3、每一个叶子结点都具有k-1个关键字,其中⌈m/2⌉≤k≤m;4、key[i]和key[i+1]之间的孩子节点的值介于key[i]、key[i+1]之间5、所有的叶子结点都在同一层。ps: ⌈m/2
2016-06-24 12:49:41
795
3
原创 程序在内存中的分布
650) this.width=650;" src="http://images2015.cnblogs.com/blog/932784/201604/932784-20160430194004941-1042441876.png" alt="" style="border:0px;" />代码段(.text),也称文本段(Text Segment),存放着程序的机器码和只读数据,可执行指令就是从
2016-06-05 10:14:12
490
原创 广义表
广义表是非线性结构,其定义是递归的。以下给出几种简单的广义表模型:650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/7F/22/wKioL1cU06LDp3cZAAAGadRgppI798.png" style="float:none;" title="QQ图片20160418202025.png" alt="wKioL1cU06L
2016-06-05 10:14:09
770
原创 Maze迷宫问题(最优解)
迷宫地形我们可以通过读文件的形式,通过已知入口逐个遍历坐标寻找通路。文件如图:650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/7F/13/wKiom1cSCnTB8pO4AAAZiAM5LuE146.png" title="QQ图片20160416174705.png" alt="wKiom1cSCnTB8pO4AAAZiAM5L
2016-06-05 10:14:07
1450
原创 稀疏矩阵的压缩存储及转置
没有经过处理的稀疏矩阵其实就是一个特殊的二维数组,数组中的大部分元素是0或者其他类型的非法值,只有少数几个非零元素。 为了实现压缩存储,可以只存储稀疏矩阵的非0元素。在存储稀疏矩阵中的非0元素时,必须要存储该元素的行列号以及元素值。我们可以封装一个三元组类来存储这些元素。//三元组templatestruct Triple{ size_t _row; //行 size_t _co
2016-06-05 10:14:04
832
原创 菲波那切数列
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/7E/F3/wKioL1cN-Geik7rBAAAIj9YuLYs357.png" title="QQ图片20160413154025.png" alt="wKioL1cN-Geik7rBAAAIj9YuLYs357.png" />//递归写法long long Fibonacci
2016-06-05 10:14:01
811
原创 对称矩阵及对称矩阵的压缩存储
设一个N*N的方阵A,A中任意元素A[i][j],当且仅当A[i][j] == A[j][i](0 && 0 ),则矩阵A是对称矩阵。以矩阵的对角线为分隔,分为上三角和下三角。650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/7E/ED/wKiom1cMz5zzQr_rAAAb3l_RgBs093.png" title="QQ图
2016-06-05 10:13:58
524
原创 C语言实现单链表
链表结构:650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/7E/D6/wKiom1cJ9Qqh3PaNAAANce2FK0A214.png" title="QQ图片20160410143950.png" alt="wKiom1cJ9Qqh3PaNAAANce2FK0A214.png" />SList.h#pragma once
2016-06-05 10:13:55
304
原创 分离编译
分离式编译是指一个完整的程序或项目由若干个源文件共同实现,每个源文件单独编译生成目标文件,最后将该项目中的所有目标文件连接成一个单一的可执行文件的过程。 每个.cpp源文件经过预处理,它所包含的.h文件的代码都会被展开到其中。再经过编译器的编译汇编等过程,将该.cpp文件转变为.obj文件,这是此文件已经变为二进制文件,本身包含的就是二进制代码。这时,该文件还不一定能够执行,因为并不保证其中
2016-06-05 10:13:52
390
原创 程序的编译流程
程序的基本流程如图:650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/7E/89/wKioL1cDsP_goUwlAAAlcbFkNbs906.png" title="Image.png" alt="wKioL1cDsP_goUwlAAAlcbFkNbs906.png" />1. 预处理预处理相当于根据预处理指令组装新的C/C++程
2016-06-05 10:13:49
255
原创 模板实现单链表
由于类模板不支持分离编译,我们可以将模板类成员函数的声明和定义放在一个.hpp的文件中650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/7E/63/wKioL1b-DTfhVzcnAAAKFtUh58k269.png" title="QQ图片20160319195210.png" alt="wKioL1b-DTfhVzcnAAAKF
2016-06-05 10:13:46
267
原创 模板实现动态顺序表
定义类模板时,成员函数可以定义在类内部,也可以在类模板外定义。 此时成员函数中若有类型参数存在,则需注意: (1)要在成员函数定义之前进行模板声明。 (2)在成员函数名前加上“ 类名 ”#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;#in
2016-06-05 10:13:43
254
原创 模板函数
模板是C++中泛型编程的基础,是C++语言的一个重要特性。利用模板机制可以显著减少冗余信息,节约程序代码。 模板函数,实际上就是建立一个通用的函数,函数的参数类型和返回类型不具体指定,利用虚拟的类型来代替,在编译调用模板函数时,编译器会根据传递的参数自动推演出模板形参的类型,并自动生成相应的代码。//模板的声明格式:template 返回类型 函数名(模板形参表){ ...(函数
2016-06-05 10:13:40
572
原创 memcpy与memmove
函数原型:void* memcpy(void *dst,void const *src,size_t count)void* memmove(void *dst,void const *src,size_t count)头文件:#include字符串由"\0"结尾,所以字符串内部不能包含任何'\0'字符('\0'的ASCII值为0),否则我们将读不到'\0'后的字符内容。但是,非字符串内部包含零
2016-06-05 10:13:38
289
原创 比较分析与数组相关的sizeof和strlen
// 形如:int a[]={1,2,3,4,5};char name[]="abcdef";无论是整型数组还是字符数组,数组名作为右值的时候都代表数组首元素的首地址。数组发生降级(数组名退化为数组首元素的地址)的情况:数组传参、数组名参与运算数组名不会发生降级的情况:sizeof(数组名)、取地址数组名(取到的是整个数组的地址而不是首元素的地址)(以下结果都经过VS2013验证)我们先来定义
2016-06-05 10:13:35
223
原创 深拷贝的现代写法
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/7D/FD/wKioL1b0wXzBjJphAABE5Xm1wLU459.png" title="Image.png" alt="wKioL1b0wXzBjJphAABE5Xm1wLU459.png" />#includeusing namespace std;class St
2016-06-05 10:13:20
321
原创 深拷贝的传统写法
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/7D/FD/wKioL1b0wHTQP_TZAAA3oYkk79E281.png" title="Image.png" alt="wKioL1b0wHTQP_TZAAA3oYkk79E281.png" />650) this.width=650;" src="http://s2.51
2016-06-05 10:13:17
364
原创 C++实现双向链表
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/7D/BD/wKiom1busnuAA28CAAAKTYkUuD4299.png" title="QQ图片20160320222427.png" alt="wKioL1busLOTWsqhAAAI3EcuKqo751.png" />List.h////////////////////
2016-06-05 10:13:14
302
原创 C++实现单链表
单链表的结构有多种这里介绍的链表有头结点、有尾节点并且尾节点指向头结点650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/7D/AD/wKioL1btPpKSlsBmAAAKFtUh58k849.png" title="QQ图片20160319195210.png" alt="wKioL1btPpKSlsBmAAAKFtUh58k84
2016-06-05 10:13:12
250
原创 C++实现动态顺序表
#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;#includetypedef int DataType;class SeqList{public: SeqList() :_array(NULL ) ,
2016-06-05 10:13:08
249
原创 【笔试题】result变量的输出结果是多少?
#includeusing namespace std;int i = 1;class MyCls{public: MyCls() :m_nFor(m_nThd) , m_nSec(i++) ,m_nFir(i++) ,m_nThd(i++) { m_nThd = i; } void echo() { cout << "result:" << m_nF
2016-06-05 10:13:06
719
原创 _CRT_SECURE_NO_WARNINGS
在编程的过程中我们常常会遇到一些过时或者不安全的函数举一个简单的例子:650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/7C/CF/wKioL1bYPE3xYyi8AAAg6jCwIdw541.png" title="QQ图片20160303212714.png" alt="wKioL1bYPE3xYyi8AAAg6jCwIdw54
2016-06-05 10:13:03
439
原创 银行家算法
1 需求分析1.1 银行家算法的实现思想 允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。 1.2 死锁的概念死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一
2016-06-05 10:13:00
833
原创 作业调度算法
先来先服务、短进程优先算法一.实验目的 通过使用c对先来先服务、短进程优先算法的实现,进一步理解并掌握调度算法的逻辑过程,以及每种算法分别在进程调度和作业调度中的的处理方法.二.实验原理先来先服务:该算法在每次调度中,都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为他们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个
2016-06-05 10:12:57
666
原创 C++实现 复数类
#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;//实现复数类的基本成员函数//实现复数之间比较大小//实现复数的四则运算 /* 复数加法:复数z = a + bi(a, b为实数)当b = 0时, z为实数, 可以比较大小;当b不为零时, z为虚数, (a = 0时为纯虚数), 不能比较大小.*
2016-06-05 10:12:54
602
原创 C++实现日期类
VS2013#define _CRT_SECURE_NO_WARNINGS 1#include#include using namespace std;//在实现日期之间的运算之前,要先进行日期是否非法的检查//实现日期间大小的比较//计算两个日期间相差的天数//计算一个日期加或减上day天后的日期class Date{public: Date(int year,int
2016-06-05 10:12:51
241
原创 动态分区分配
一.实验目的1.通过这次实验,加深对动态分区分配的理解,进一步掌握首次适应算法和最佳适应算法的理解。了 解动态分区分配方式中使用的数据结构和分配算法,进一步加深对动态分区存储管理方式及其实现 过程的理解。提高学生设计实验、发现问题、分析问题和解决问题的能力。2.学会可变式分区管理的原理是在处理作业过程中建立分区,使分区大小正好适合作业的需求。3.当一个作业执行完成后,作业所占的分区应归还给
2016-06-05 10:12:49
5652
原创 顺序表的静态存储
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。1.顺序表的结构体声明#define MAX_SIZE 5 //定义数组的大小typedef int DataType;typedef struct SeqList{ DataType array[MAX_SIZE]; size_t size;}SeqList;2.顺序表
2016-06-05 10:12:46
464
转载 TCP建立连接和拆除连接的过程
1、TCP报文格式650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/77/11/wKiom1ZiSO7DKJh_AAClFg1mtgc653.png" title="360反馈意见截图16370622317666.png" alt="wKiom1ZiSO7DKJh_AAClFg1mtgc653.png" />2、TCP连接建立时三次
2016-06-05 10:12:43
14448
原创 printf函数源码实现
#include #include //va_start(arg,format),初始化参数指针arg,将函数参数format右边第一个参数地址赋值给arg//format必须是一个参数的指针,所以,此种类型函数至少要有一个普通的参数, //从而提供给va_start ,这样va_start才能找到可变参数在栈上的位置。 //va_arg(arg,char),获得arg指向参数的值,
2016-06-05 10:12:40
27075
6
转载 memset函数源码分析
void *memset(void *s, int ch, size_t n);作用:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作。不知道有没有像我一样把memset当作万能的初始化工具,例如:int arr[n];memset(arr,1,n*sizeof(int));这样得到的arr数组一定不是全
2016-06-05 10:12:37
786
原创 memset函数源码实现
void * memset(void *dst, int val, size_t count)将dst所指向的某一块内存中的前count个 字节的内容全部设置为val指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。简单来说就是把dst所指内存区域的前count个字节设置为val。返回指向dst的指针。#in
2016-06-05 10:12:35
1723
原创 求数组长度sizeof
当数组当作参数传递时,它就退化成指针了,要求数组长度的话,可以在main函数内部求得#define _CRT_SECURE_NO_WARNINGS 1#include void fun(int arr[], int len){ printf("---%d\n", sizeof(arr)); printf("---%d\n", sizeof(arr[0])); print
2016-06-05 10:12:32
448
转载 vector中erase用法注意事项
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素vector::erase()方法有两种重载形式如下:iterator erase( iterator _Where);iterator erase( iterator _First, iterator _Last);如果是删除指定位置的元素时:返回值是一个迭代器,指向删除元素下一个元素;如果是删除某范围内
2016-06-05 10:12:29
454
原创 笔试题: 不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数
笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数。函数接口声明如下:int my_strlen(const char *p);strlen函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符'\0'。而返回的长度大小不包括'\0'。#include #include //使用中间变量//int my_strlen(const cha
2016-06-05 10:12:26
666
转载 strlen和sizeof的区别和联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值
2016-06-05 10:12:23
189
原创 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和非负整数n%10会得到它的最低位,不断地模10再除10,会得到它的每一位,把每一位都加起来,最终返回所有数字之和。#include#includeint DigitSum(n){ if (n>0) { return n % 10 + DigitSum(n/10); } return 0;}int ma
2016-06-05 10:12:20
891
原创 递归实现 n的k次方
编写一个函数实现n^k,使用递归实现使用尾递归的方法,当传入的参数k等于0的时候返回num;参数不为0是返回num*num(每使用一次递归调用一次函数k都要减去1)递归必须要有限定条件,否则递归会无限制的进行下去,程序会出现溢出的崩溃问题#include#includeint power(int num, int k){ k--; if (k == 0) return num;
2016-06-05 10:12:17
1113
原创 冒泡排序
冒泡排序就是把小的元素往前调或者把大的元素往后调冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数,针对所有的元素重复以上的步骤,除了最后一个。也就是把数组中最小的那个往上冒,冒的过程就是和他相邻的元素交换。这个冒的过程就是内循环。经过了一个冒的过程,可以使一个最小的元素冒出
2016-06-05 10:12:14
233
转载 参数传递 可变长参数函数
在C语言中,函数参数的传递方式有值传和址传.值传是把实参的一个专用的、临时的复制值给被调函数中相应的形参被调用函数使用、修改这个传来的复制值,不会影响实参的值.址传则是把变量(实参)的地址传给被调函数.被调函数通过这个地址找到该变量的存放位置,直接对该地址中存放的变量的内容进行存取操作.因此,在被调用函数中可以修改实参的值.这也是函数参数址传的优点.无论是值传还是址传,都要求实参的数目及类型与形参
2016-06-05 10:12:12
292
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人