自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Xzg_2017的博客

得了一种不写博客就难受的病

  • 博客(25)
  • 收藏
  • 关注

转载 data,bss和rodata段的区别与联系

有人可能会说,全局内存就是全局变量嘛,有必要专门一章来介绍吗?这么简单的东西,还能玩出花来?我从来没有深究它,不一样写程序吗?关于全局内存这个主题虽然玩不出花来,但确实有些重要,了解这些知识,对于优化程序的时间和空间很有帮助。因为有好几次这样经历,我才决定花一章篇幅来介绍它。正如大家所知道的,全局变量是放在全局内存中的,但反过来却未必成立。用static修饰的局部变量就是放在放全局内存的,它的...

2018-08-08 16:13:51 10686

转载 static关键字的总结

C++中的static关键字的总结   C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static 1.1静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。 静态全局变量有以下特点: • 该变量在全...

2018-07-25 00:23:10 243

原创 单链表是否有环

1,实现思路如何判断一个单链表是否有环? 我们可以定义两个指针,第一个指针一次遍历一步,第二个指针一次遍历两步,如果第二个指针指向NULL,则单链表无环,如果第二个指针与第一个指针相遇,则说明有环。 2,代码实现LNode* HasCircle(LNode *phead){ if(phead ==...

2018-07-22 13:32:02 270

原创 查找倒数第K个节点

1,实现思路查找倒数第K个节点 第一种思路: 倒数第K个节点也就是正数第N-K+1个节点吗,我们可以将链表遍历一遍求出链表的长度N,然后在遍历到第N-K+1个节点,就实现了查找倒数第K个节点。 但是这种思路需要将链表遍历两遍,那么有没有遍历一遍的方法呢? 第二章思路:可以定义两个指针,首先第一个指针指向头节点不动,第二个...

2018-07-22 12:34:33 899

原创 O(1)的时间复杂度下删除单链表中的节点

1,基本思路在单链表中如果要删除一个节点,需要通过头结点找到该节点的前驱节点,然后让该节点的前驱节点指向它的后继节点,然后free点当前节点就实现了单链表的删除,但是这样的删除需要遍历到当前节点的前驱节点,时间复杂度自然而然就成了O(n),那么如何O(1)删除呢?如果想要O(1)删除节点,就不能删除当前节点,因为不知道当前节点的前驱节点,删除最后单链表的链...

2018-07-22 12:00:30 1972 1

原创 合并两个排序的单链表--递归与非递归实现

链表结构定义如下:typedef int ElemType;typedef struct LNode{ ElemType data; LNode *next;}LNode; 1,递归实现合并两个升序的单链表LNode *Merge(LNode *phead1, LNode *phead2){ if(phead1 == NULL) ...

2018-07-22 01:48:02 358

原创 单链表的逆置

1,题目 定义一个函数,输入一个链表的头节点,逆置该链表并输出逆置链表的头节点,链表的定义如下:typedef int ElemType;typedef struct LNode{ ElemType data; LNode *next;}LNode; 2,链表逆置代码实现 LNode *ReverseList(LNo...

2018-07-22 00:26:50 991

原创 归并排序

二路归并排序 1,递归思想假设初始列表含有n个记录,则可以看成n个有序子序列,每个有序子序列的长度为1,然后两两归并,得到n/2个长度为2的有序子序列,再两两归并,如此重复下去,直到得到一个长度为n的有序序列为止。 2,递归实现二路归并排序 #define MAXSIZE 10 //定义一个宏,是arr的大小,也是需要开辟数组的大小...

2018-07-19 13:07:09 165

原创 僵尸进程与孤儿进程

1,基本概念(1),在linux系统中,子进程由父进程创建,子进程的结束与父进程的运行是异步过程,即父进程永远 不知道子进程什么时候结束,所以就产生了一下两个进程,僵尸进程和孤儿进程。(2),僵尸进程:父进程未结束,子进程先结束,而父进程未获取子进程的退出状态,子进程还需要在进程PCB中保存其退出的信息。所以,子进程的执行已经结束,但是操作系统并没有释放该进程的PCB结构,这种进程称为僵尸...

2018-07-19 01:36:11 292

原创 const int *& 的类型

1,简单介绍const int & 类型 , 其实就是 一个 const int 型的指针,因为&会自动解引用,只不过该指针所指向的值不能被改变,并且指向也不能被改变。 值不能改变是因为有const , const int* c,c解引用出来的值,不能被改变,因为被const修饰是常量。 指向不能改变是因为&,&会自动解引用,并且&一经引用

2018-07-18 13:38:20 2275 1

原创 堆排序

讲堆排序之前,先讲一下简单选择排序! 1,简单选择排序基本思想:就是通过n-i次关键字间的比较,从n-i+1个数据中选出关键字最小的数据,并与第i个数据进行交换。 2,简单选择排序的代码实现void Swap(int *a,int *b) //交换{ int tmp = *a; *a = *b; *b = tmp;...

2018-07-08 00:53:55 280

原创 希尔排序

讲希尔排序之前,先给大家讲一下直接插入排序。 1,直接插入排序什么是直接插入排序?基本思想:直接插入排序的基本操作就是将一个数据插入到已经排好序的有序表中,从而得到一个新的,数据个数增1的有序表。 2,直接插排序代码实现void InsertSort(int *arr, int n){ assert(arr != NULL &amp...

2018-07-07 17:38:54 256

原创 KMP算法

1,## KMP算法的来源? ##由于朴素匹配算法非常低效,需要挨个遍历主串,所以有三位前辈,D.E.Knuth,J.H.Morris,和V.R.Pratt发表了一个模式匹配算法,可以大大避免重复遍历的情况,我们称这为克努特–莫里斯–普拉特算法,简称KMP算法。 2,## 何为KMP算法? ##KMP算法在匹配过程中发生失配时,并不是简单的从原始串的下...

2018-07-05 00:14:24 206

原创 可变参数

## **可变参数** ##可变参数 : 是通过宏来实现的 **1,可变参数的用法**1,首先声明一个类型va_list的变量,与下面几个宏配合使用,访问参数的值。 2,va_start()用来初始化可变参数列表,它的第一个参数是va_list类型的变量的名字,第二个参数是省略号前最后一个有名字的参数,初始化过程把变量指向可变参数部分的第一个参...

2018-07-03 09:42:26 234

原创 转换表实现简单计算器

## **转换表** ##转换表 : 一个函数指针数组创建一个转换表需要两个步骤, 1,声明并初始化一个函数指针数组,并确保这些函数原型出现在这个数组声明之前。 double add(double, double);//加 double sub(double, double);//减 double mul(double, do...

2018-07-03 00:56:04 200

原创 朴素匹配

## **朴素匹配** ##何为朴素匹配? 朴素匹配其实就是我们所熟知的暴力匹配,简单的说,就是对主串进行遍历,与匹配串每一个字符进行匹配,如果对应的字符不相等,主串后移,匹配串不动; 匹配过程中如果相等,两个串同时向后移,如果将匹配串全部遍历,则说明找到了,返回 主串现在位置减去字串长度; 匹配过...

2018-07-03 00:25:21 566

原创 菲波那契数列

** 菲波那契数列 **定义: 指的是0 1 1 2 3 5 8 13 21 34 …… 这样一个数列,用数学表达式被以递归的方式来形容就是F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2) (n>=2,n∈N*)。** 递归算法 int fibonacci(unsigned int n){ if(n < 2) ...

2018-05-26 16:56:22 995

原创 递归算法

**递归算法** 定义:就是直接或间接调用自身的算法。实现的原理:每次递归调用后必须越来越接近某种限制条件,当递归算法符合这个限制条件,他便不再调用自身。让我们来用阶乘举例来简单说明一下递归算法:阶乘的递归算法int Factorial(int n){ if(n < 1) //限制条件 return 1; el...

2018-05-26 11:59:17 319

原创 剑指offer之替换空格

替换空格 请实现一个函数,把字符串中的每个空格替换成“%20”, 例如输入“we are happy.”,则输出“we%20are%20happy.”看到这个题目,我们可以想到原来一个空格字符,替换之后变成了’%’,’2’,’0’这三个字符,因此字符串会变长,如果是在原来的字符串上进行替换,就有可能覆盖修改字符串后面的内存。如果是创建新的字符串并在新的字符串上进行替换,那么我们...

2018-05-15 10:55:50 219

原创 逻辑移位和算术移位的区别

逻辑移位 逻辑移位是指逻辑左移和逻辑右移,移出的空位都用0来补。算术移位算术移位 就需要分有符号型值和无符号型值 对于无符号型值,算术移位等同于逻辑移位。 而对于有符号型值 ,算术左移等同于逻辑左移,算术右移补的是符号位,正数补0,负数补1。那么C编译器中采用的是那种移位方式呢?在汇编指令中,shl和shr表示逻辑左移和逻辑右移,sal和sar表示算术左移和算术右移。首先让我们来看一段

2018-05-01 18:02:27 40840 1

原创 整型在字符数组中的存储

这篇文章我们来讨论整型在字符数组中的存储首先我们来讨论一下字符大家都知道一个字符占用一个字节,无符号字符型的范围是从0~255,而有符号字符型的范围是-128~127,那么对于有符号字符型而言,大于127或小于-128的数该怎么存储呢?请您往下欣赏:以-129为例,我向大家展示一下吧 整数存的是源码,而负数存的是补码,所以说要存储-129,得先算出它的补码。 源码 本该是 1 1000 0001

2018-04-26 19:58:36 4798 1

原创 atoi函数的实现

atoi函数要求我所实现的atoi函数有以下几个要求: 1,这个函数需要丢弃之前的空白字符,直到找到第一个非空白字符。之后从这个字符开始,选取一个可选的正号或者符号后面跟随尽可能多的数字,并将其解释为数字的值。2,字符串可以在形成整数的字符后包括多余的字符,将这些字符忽略,这些字符对于函数的行为没有影响。3,如果字符串中的第一个非空白的字符不是有效的整数,或者没有这样的序列存在,字符串为空或者只包

2018-04-13 22:12:42 10072

原创 冒泡排序及快速排序实现

各位码友身为软件开发工程师,算法中的排序可谓是重重之重,那么今天小码哥就给大家带来两种交换排序,简单算法中的冒泡排序,和号称排序算法中的王者快速排序,是不是很期待呀大笑大笑,话不多说,码代码啦!!!冒泡排序先给大家介绍一下什么是冒泡排序? 冒泡排序 (Bubble Sort)是一种交换排序。 它的基本思想是 : 两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。说了这么多,还是不

2018-03-16 23:26:13 442

原创 设计模式——单例模式(懒加载)

这篇文章总结几种比较常用的设计模式,,,不懂得设计模式。。。怎么敢称熟悉OOP思想。单例模式的核心结构中只包含一个被称为单例类的特殊类,通过单例模式可以保证系统中一个类只有一个实例由于快加载单例模式是线程安全的,所以本文只讨论懒加载单例模式的线程安全问题版本一 使用懒加载(快加载),程序调用时再分配内存,然后初始化class Singleton{public: static S

2017-11-10 21:51:38 3098 1

原创 从汇编角度浅谈i++和++i的区别

从汇编角度浅谈i++和++i的区别初学之时,我认为i++和++i其实并没有多大区别,i++是先取i的值,再给i值加1,++i是先给i值加1,再取i的值,都是自增运算,效率感觉都差不多,最终实现的都是i值加1。直到看到了下面的代码,我才发现i++和++i还是有很大差别的,尤其是在效率上。当看到这道题时,我感觉挺简单的呀。首先,由于逗号运算符是从右往左进行,所以先打印最右边i++,再打印–...

2017-10-25 22:38:37 613

空空如也

空空如也

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

TA关注的人

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