C++编程
Learning_zhang
这个作者很懒,什么都没留下…
展开
-
希尔排序
希尔排序是将一个数组通过tg分为若干组,即从零开始每隔tg个数的数字为一组,再对这一组的数据进行直接插入排序,使得这一组的数据有序。一趟下来数组不能做到全部有序,但是基本上有序了,一些较大的数沉底,较小的数上升。再通过改变tg的值进行快速排序,使得整个数组更加的有序。最后再通过一次整体的直接插入排序使得整个数组有序。这是对直接插入排序的一种改进,直接插入排序是适合数据分散呈基本有序的数组,通过原创 2016-10-25 01:09:38 · 462 阅读 · 0 评论 -
链表逆置递归
#include using namespace std;typedef int ElemType;typedef struct _Node{ ElemType data; struct _Node *next;}Node;Node* initNode(){ Node *ptr = (Node *)malloc(sizeof(struct _Node)); if (p原创 2017-03-27 16:38:41 · 1379 阅读 · 0 评论 -
虚继承
///d1reportSingleClassLayout**#include using namespace std;/*class A{ int a;public: virtual void af(){cout<<"a";}};class C:virtual public A{ int b;public: void af(){cout<<"b";}};int m原创 2017-04-21 15:37:31 · 264 阅读 · 0 评论 -
extern的总结
extern可以修饰变量也可以修饰函数修饰变量和函数的时候,只是修饰其声明而不修饰定义,告诉编译器,此变量或者函数的定义在别的文件之中,生成的符号是global的,此相对于static关键字。extern可以用于C++和C函数的相互引用: 当C函数引用C++代码时,需要对.cpp文件中的C++代码的定义加extern "C"修饰,例如extern “C”{ void原创 2017-08-26 21:07:23 · 259 阅读 · 0 评论 -
归并排序实现外排序
外排序,对规模大的数据进行处理。先通过data_make制造处随机数到文件名为path的文件中去。bool data_make(char *path, int num){ FILE * fw = fopen(path, "wb"); if(fw == NULL) { return false; } srand(100); for(int i=0; i<num; i++原创 2016-10-29 15:16:15 · 2582 阅读 · 0 评论 -
迷宫
迷宫问题,递归与栈解法:首先是构建一个正确的迷宫,迷宫中是由二维数组构成,1表示围墙,0表示的是通道,走过的通道将其标识位‘#’,遇到出口符号‘!’就直接退出程序。 递归解法:每走一个通道,就对其进行判断,若是1或是#则退出函数,若是0则将此格其修改为#,再继续对其上下左右的方格用go_out1函数。void go_out1(char (*maze)[14], int x, i原创 2016-10-26 20:58:05 · 801 阅读 · 0 评论 -
冒泡排序与简单排序
冒泡排序:冒泡排序改进版本:冒泡排序 通过相邻点进行比较,每次将最大的一个数字沉底,设置一个标志位,如果在一次排序中没有进行交换可以推断该数组已经有序,然后退出循化,结束该函数。其空间复杂度复杂度是O(1),最好的情况初始数组是有序的,一次下来结束O(n),最坏情况就是整个数组要经过O(n*n)次比较,则此是数组是倒序时的情况,每一次的循化,数组中的最后一个值移动到最前面的。bool原创 2016-10-25 01:15:52 · 1112 阅读 · 0 评论 -
双向链表实现约瑟夫环
用双向链表实现约瑟夫环的代码原创 2016-09-27 08:47:14 · 1431 阅读 · 0 评论 -
顺序表的操作集合
包括对线性表的插入,删除,销毁,排序,交换等等操作#define MULTIPLE 2#define ERROR -1typedef int elem_type;#define INIT_SIZE 10typedef struct _DSEQ_LIST{elem_type *data;int length;int total_length;}Dlis原创 2016-09-19 23:16:20 · 552 阅读 · 0 评论 -
STL容器及排序问题
deque(双端队列)底层是一是双端队列,组合结构构成,功能上和vector相似,提供了'[]'和'='运算符重载函数list(列表)的底层是一个双向链表,提供了前插,尾插,前删,尾删,提供了 '='的运算符重载函数vector(向量)的底层是一个数组,有指针失效的情况。可以通过erase和迭代器来删除其中任何一个元素可以通过insert和迭代器将数组或者某个数组插入到指定位置。提原创 2017-05-04 22:17:19 · 432 阅读 · 0 评论 -
虚函数的默认传参问题
class A{public: virtual void fun(int num = 10) { cout<<"A"<<num; }};class B:public A{public: virtual void fun(int num =100) { cout<<"B"<<num<<endl; }};int main(){ B b; A &a = b;原创 2017-08-19 11:29:24 · 531 阅读 · 0 评论 -
STL内存管理
STL中的内存管理分为两级配置器,一级配置器是当内存大于512B时候使用系统系统的malloc/free进行申请释放二级配置器,将内存分为大小间距为8的等长度的chunk,使用数组进行管理。数组中存储的是大小一定的链式等大小内存块。在STL中使用长度为16的数组,0处存储8Byte,然后依次16,24,36.....依次加8字节。二级配置器维护着一个内存池,如果所申请的内存块中数组的链表下为空原创 2017-06-25 22:39:19 · 1132 阅读 · 0 评论 -
智能指针
#include using namespace std;#include //容器使用迭代器进行遍历使用//shared_ptr 强引用,将指针所指之物与自己的声明周期紧密联系,一旦自己析构,就会使得引用计数减1//weak_ptr 弱引用 不能决定底层指针的生命周期,只能根据自己的成员对象去探测是否对象存活shared_ptr test(){原创 2017-07-04 10:19:03 · 260 阅读 · 0 评论 -
使用库函数实现自定义类型的排序
class Type{public: int a; Type(int x, int y):a(x),b(y){} Type():a(0),b(0){} int b;};////////////////////////使用qsort对自定义类型进行排序,需要提供一个比较函数,传递给qsort的函数指针参数int compared(const void*x, const void *原创 2017-08-24 19:46:11 · 329 阅读 · 0 评论 -
归并排序
归并排序,通过一一排序使得两个相邻的数字有序,二二排序使得四个相邻的数字有序,四四排序使得八个相邻的数字有序,通过一定的次数使得整个数组有序。归并排序是稳定的。归并排序的空间复杂度位O(n),时间复杂度,不管初始数据有序还是乱序,都是要进行向下移动的。bool mager_once(int *arr, int len, int gap){ if (arr==NULL && len<1原创 2016-10-25 01:12:05 · 299 阅读 · 0 评论 -
链式队列实现基数排序
用基数排序实现整数字排序,其中的insert_tail为链式队列的入队,del_head为出队。先找出总的循环次数,即数组中的最大值的位数。开辟10个队列,进行第一次入队,将每个数插入到以个位为编码的队列中,然后有序的出队,0号队列,1号队列到十号队列。同理进行十位百位等。基数排序的时间复杂度较冒泡排序少,但空间复杂度较大。bool radix_sort(int *ar原创 2016-10-07 21:26:39 · 2004 阅读 · 0 评论 -
C语言实现面向对象的思想
用C语言实现面向对象的方法,面向对象的三个基本特征,对象唯一性,继承性,抽象性。使用C语言中的结构体和函数指针将数据与操作放在一起,使得一个问题的解决方法封装在结构体中。其中结构体的嵌套使用实现了继承性。#include#includestruct Adt2 {int x;int y;int (*imll)(int x, int y);};原创 2016-09-08 20:17:09 · 6319 阅读 · 0 评论 -
可变参函数
int add(int x, ...);可变参函数原型,该函数中带有标识符的参数x记录的是参数的个数,后面的数字是需要求和的数。x的作用是为了标志出加数的位置和控制循化的次数。该函数中首先对x操作,对其存储空间进行字符型指针转换找到该参数列表的首地址,然后循环过程第一步是跳4个字节,即跳过x,对下面的四字节进行整型方式读取。然后再让其跳过四个字节,进行下一个整型参数的读取。原创 2016-08-31 21:29:55 · 368 阅读 · 0 评论 -
简单网页爬虫
在windows平台下的VS,对象是一个旅游网站上面的图片,实现其先要对VS的数据库进行设定,然后才能运行改程序#include#include#include #include #include void loding_html_first();void loding_html_second();void loding_picture(原创 2016-09-08 19:48:21 · 430 阅读 · 0 评论 -
直接插入排序
插入排序适合基本有序的数组的排序,如果数组中的数值基本有序,则数值需交换次数很少。但是如果按从大到小排序,而数组初值是从小到大,那该次排序的效率将达到最差,其移动的次数是:n, n-1,n-2,......3,2,1。其时间复杂度则将接近于O(N*N)。希尔排序就是将数组中的值均匀的分散,使其先达到基本有序,然后再对其整体进行插入排序。原创 2016-10-14 22:49:17 · 405 阅读 · 0 评论 -
线索二叉树
利用线索二叉树实现中序遍历#include #include #include using namespace std;//构建线索化二叉树,用其进行中序遍历及中序逆遍历typedef char elemType;typedef enum thread{ LINK=1,THLINK}THREAD;typedef struct _node{ _node *leftCh原创 2017-04-09 13:38:21 · 310 阅读 · 0 评论 -
斐波那契递归消除重复性
#include using namespace std;void fibo_loop(int num);int fibo_recurisv(int num);int main(){ cout<<fibo_recurisv(44); //fibo(0,1,44); return 0;}//递归方法且消除了重复性static int temp = 1;int fibo_原创 2017-03-16 13:20:55 · 527 阅读 · 0 评论 -
const test
/*int main(){ //const int pp; //常量,必须进行初始化 int a = 10; int *p=&a; //int *const m;//必须进行初始化 const int *q;//可以不进行初始化 q = &a;//q 可以进行赋值 *q不能进行修改 //去掉离其最近的类型,const修饰的就是它 const int *const *u ;//原创 2017-05-06 23:30:53 · 456 阅读 · 0 评论 -
快速排序
快速排序是先通过在数组中选择一个数字作为枢轴,通过这个数字将整个数组分为两个部分,左边的这些数字小于枢轴数字,右边的这些数字大于枢轴数字。而开始时候选择的枢轴数字已经到了合适的位置,下来的步骤就是对左边和右边分别重复上述步骤。先选择最左边的数字,将其作为枢轴,与最右边的数字进行比较如果是比它大的就下标减减,如果比它小,就将这个数字覆盖到最开始选择的最左边的下标的位置,并且记录右边的这个下标。然原创 2016-10-15 16:05:09 · 352 阅读 · 0 评论 -
引用与指针
引用与指针的区别:1.引用同指针的底层一致,引用的底层就是指针2.引用必须初始化,且不能被NULL初始化,初始化后绑定此对象不能再被改变。指针可以不初始化,可以被NULL初始化,且可以改变指向其他的对象3.引用和指针对于sizeof,自增自减等运算符的不同4.引用比指针更加安全,引用不能为NULL,引用必须初始化等特点#include //对于引用是否有内存空间的验证using原创 2017-10-07 18:41:20 · 291 阅读 · 1 评论