- 博客(40)
- 收藏
- 关注
原创 如何辨别程序员水平
不能对一个问题在不同抽象层次上进行阐释,给别人讲其解决方案时,就会自然倾向使用 “伪代码” 式这种最底层抽象层次进行描述,暴露大量实现细节,如果对方和你共享的上下文很少,就很难搞懂在说啥。因此,需要对具有不同上下文的人,对问题进行不同的泛化(也是抽象)处理,通过抽象适当剪除上下文,直到能跟他对齐为止。而最让人难受的是,这种不讲究的人出活还贼快,KPI 还贼好,但是他升上去后,哪管洪水滔天。而不讲究的代码,通过糟糕的命名、随意的破墙穿洞、混乱的数据流,使代码的复杂度指数级上升,以至于最后需要推倒重来。
2023-07-20 13:49:01
127
转载 C++指针在函数中的使用
关于C++中函数指针的使用(包含对typedef用法的讨论)(一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表)char (*pFun)(int);char glFun(int a){ return;}void main(){ pFun = glFun; (*pFun)(2);} 第一行定义了...
2015-01-26 17:13:50
640
转载 C++指针的基础介绍
什么是指针: 其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针只是一个指示器,它告诉程序在内存的哪块区域可以找到数据。 这是一个非常重要的概念,有很多程序和算法都是围绕指针设计的,如链表、遍历等。 指针是一个数据类型,本身也需要占用四个字节的存储空间。所以用sizeof(void*)获得的值为4。 二.指针的定义 看如下的例子:int*pNumber; ...
2015-01-26 17:02:44
595
转载 C++中的指针和引用
2010-09-22 02:32 by 吴秦1、指针和引用的定义在深入介绍之前我们首先来看一下指针和引用的定义、指针和引用的区别,然后分别针对指针和引用展开讨论,深入细节为何有这些差异。指针的权威定义: In a declarationT DwhereDhas the form *cv-qualifier-seqoptD1 And the type ...
2015-01-26 16:54:59
525
转载 C++ 中的this指针
1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。 例如...
2015-01-26 16:48:31
463
转载 C++ OO设计原则
一.OO(面向对象)的设计基础面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性, 来认识、理解、刻划客观世界和设计、构建相应的软件系统。面向对象的特征:虽然各种面向对象编程语言相互有别,但都能看到它们对面向对象基本特征的支持,
2015-01-26 16:38:26
1451
转载 C标准和C++标准字符串
1. C语言的字符串C语言没有专门定义字符串数据类型(如其他语言中的string),它用以'/0'结尾的字符数组来表示一个逻辑意义上的字符串。字符串字面值的类型就是const char类型的数组。C语言定义的字符串我们称之为“风格字符串”(C-style character string),而字符串字面值就是该类型的实例。实际上,C风格字符串既不能确切地归结为C语言的类型,也不能归结为C+
2015-01-26 16:32:52
846
转载 C++中的const全面的详解
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。一、Const作用如下表所示: N...
2015-01-26 16:25:09
484
原创 线索二叉树
源码:/***中序线索二叉树*@author 菜鸟*@version 2014.7.23*/#include <iostream>#include <windows.h>#include <malloc.h>typedef char DataType;using namespace std;//定义线索二叉树的结构体typede...
2014-07-27 19:15:18
575
原创 哈希表
源码:/***哈希表*@author 菜鸟*@version 2014.7.15*///哈希表的设计//这里设计哈希表有两个元素项,一个是数据项,一个是状态项#include #include using namespace std;typedef int DataType;//定义节点结构,这里把次结构弄成动态的结构以便于操作未知的M(内存单元大小
2014-07-23 17:55:51
546
原创 哈夫曼树
源码:/***哈夫曼树*@author 菜鸟*@version 2014.7.16*/#include #include #include #define Max 100#define MaxValue 10000using namespace std;//创建节点结构typedef struct{ int weight;//表示权值 int flag
2014-07-23 17:45:19
625
原创 查找系列之B_ 树
全部源码: /***B-树*@author 菜鸟*@version 2014.7.9*/#include #include #include #include #define Max 3 //max = m-1 m 为该树结构的阶#define Min 0 //min = m/2-1using namespace std;type
2014-07-14 02:35:19
710
原创 查找系列之二叉排序树
二叉排序树的创建、查询、插入与删除 一、简述二叉排序树的思想: 动态查找表中主要有二叉树结构和树结构两种,而二叉树结构分为二叉排序树和平衡二叉树,树结构分为B-树和B+树等。 二叉排序树可以是一颗空树二叉排序树的性质:二叉排序树上的节点满足左子树 也就是说二叉排序树必须有顺序,且满足左子树二、构建二叉排序树 创建二叉排序树通常
2014-07-09 15:13:17
1518
原创 查找系列之简述顺序查找和二分查找
顺序查找和二分查找一、顺序查找思想 1、 从表的一端开始扫描,顺序扫描线性表,依次扫描到的结点关键字与给定的值K相比较.如果当前扫描到的结点的关键字与给定的值K相等,则查找成功;若扫描结束后,仍未找到关键字与给定的值K相等,则查找失败; 2、顺序查找既适用于顺序存储结构,也适用于线性表的链式存储结构; 3、ASL= (n+1)/2为其平均查找长度
2014-07-03 21:12:27
6919
原创 基本排序系列之计数排序
简述计数排序 看了好多别人写的计数排序,看了好久都没看懂,弄了好久最后发现这么简单居然花了几个小时,所以在这里写上,希望和我一样的初学者不会再绕弯路。一、简述计数排序的思想: 设被排序的数组为A,排序后存储到B,C为临时数组。所谓计数,首先是通过一个数组C[i]计算大小等于i的元素个数,此过程只需要一次循环遍历就可以;在此基础上,计算小于或者等
2014-07-03 17:12:54
3229
原创 基本排序系列之基数排序
基数排序一、基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。 其实现原理:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。二、具体操作:此排序的真正实现是通过队列的装置,先进先出
2014-06-17 20:25:05
1626
原创 基本排序之详解归并排序
归并排序一、归并排序的效率是仅次于快速排序的稳定的排序算法,其时间复杂度为O(nlog2n)。我们对n 个元素进行一次归并排序时,归并的次数约为log2n,每一次的两路归并排序元素的比较次数约为n-1。二、归并排序的基本思想: 归并排序是通过将一列数组序列中的元素看成一个一个的小序列来进行归并,直到所有的元素都被归并完成后,排序即完成,便是成功的完成了排序
2014-06-15 17:24:19
1364
原创 基本排序系列之直接插入排序
直接插入排序一、基本思想: 直接插入排序是在一列数的基础上把第一个数看成已经排序好的数,如果小于这个数就排在其前面否则排在其后面,就这样可以不断被的插入新的元素直到所有的数都插入完毕,这样这列数就排列好了。二、举个例子,以a[10]={2,1,0,4,5,3,6,7,9,8}为例:第一次排序好的:[2] 1第二次排序好的:[1 2] 0第三次排序好
2014-06-15 12:24:06
678
原创 基本排序系列之希尔排序
希尔排序一、希尔排序的基本思想希尔排序的基本思想就是把数进行分组,按照一定的规律分组,最先可以按照d1这个增量分组,d1=n/2(n为数组中数的长度)来分成d1个分组,然后对分组内部的数进行直接插入排序再设置第二个增量d2来分组,如d2 = d1/2这样来分组直到增量为1停止。二、对于这样的一个数组:a[10] ={2,1,4,3,5,7,6,8,0,9}d1增量为10
2014-06-13 12:33:36
649
原创 基本排序系列之最简单讲述堆排序
最简单,最直接的讲述堆排序一、什么是堆,何来堆排序呢?堆是一颗完全二叉树,且父节点必须大于子节点。什么叫完全二叉树呢,完全二叉树指的是前面n个节点都是满二叉树中的节点换句话说就是完全二叉树的子节点必须处于树的最后两行,且是从左到右的顺序。二、堆排序的基本思想通过对堆的调整得到根节点,因为调整后的根节点是整棵树最大的,这样就得到了此时的最大值,这时将这个根节点下标识数组第一个数,所以
2014-06-13 01:15:20
646
原创 基本排序系列之简述快速排序,快速掌握快排
快速排序快速排序的算法复杂度最大可达到O(n*n)但平均算法复杂度为o(n*logn),由于快排采用了分治法,挺好用的,而且排序效率相对其他几种排序算法效率更高。快排采用的是一般取第一个数为基准小的放在左边,大的放在右边,然后再对左边的进行分治,再右边的,按此下去达到排序的目的。下面简述快排的思想: 如:数组a[5] = {2,4,5,1,6}以第一个数a[0]即2为基准,指针
2014-06-12 00:23:45
824
转载 9种基本的排序算法的总结
排序算法可以说是计算机专业学生要学习的最基础的算法,但其实也是最重要的,现在大部分互联网公司笔试面试也都会涉及到排序算法的知识。除了了解思想之外,还应该动手写一写,分析一些具体思路、时间复杂度、空间复杂度和稳定性等。我们面试讨论小分队也简单讨论了一下排序算法,为了加深记忆,我自己也动手写了一些代码(Linux平台写的,自己测试是通过了),并做一些分析(由于水平较水,代码可能有误!)。
2014-06-11 11:28:53
773
原创 KMP 字符串的匹配算法
一、KMP算法与Brute-force算法的最大区别就在于KMP算法在比较时,主串的指针i不用回溯,只需回溯字串的指针j而Brute-force算法就是简单的从第一个字符比到最后一位,这时需要对主串的i进行回溯,这样算法的比较次数明显增多KMP的算法复杂度可为O(m +n)而Brute-force的算法复杂度可为O(m*n)。二、在做KMP时我们可以知道每一次字串j的回溯,即每一次字串
2014-06-11 11:01:32
707
原创 链表的创建
/这里是链表的创建其包含的是头指针phead,头节点,以及尾节点p->next = NULL 为链表创建结束标志。/判断指针为空十分重要,当然也不能忘了释放,代码是:if(head !=NULL){free(head);head = NULL; }head = (SLNode*)malloc(sizeof(SLNode));head->data=x;if(h
2014-06-09 18:49:57
726
原创 字符串的动态存储结构的代码实现
/***毕竟这只是简单的串的链式存储结构,不过不同的对象操作不一样 *在此为了简化操作,很多菜单啊,选择结构之类的都省去了,这些都可以在之前的一些链表的基本的错中 *可以得到的仔细的结果,链表的操作是特别的重要的 ,尤其是链表的存储结构链式存储结构涉及到开辟空间 *地址的传递,指针等操作,所以在此有必要仔细研究这些,这是我系统的重新对数据结构重新编写一遍的结果 *纯属于个人的理
2014-06-03 12:28:40
909
原创 数据结构串的静态存储结构的源码实现
//串的静态存储结构/**静态数组存储结构typedef struct{ char str[MaxSize]; int length;}String;*//**动态的数组存储结构typedef struct{ char *str; //表示动态数组的名 int MaxLength;//表示动态数组元
2014-05-31 23:18:07
1028
原创 链式队列的操作实现
操作实现结果:一、运行后的效果:二、入列:三、出列:四、取队头元素:代码:/***程序是链式的队列的代码 */ #include #include #include using namespace std;typedef int DataType;//定义DataType 为整型
2014-05-29 13:15:06
980
原创 链表的基本操作
/链表的基本操含有对链表的建立,插入,删除,查询,输出等基本操作/在此特别提醒链表的基础尤为重要,在这里重写此代码能够更加深刻的理解了链表的空间的申请,/头节点的建立以及头指针的重要和尾节点存在的必要性/这个源代码以链表的创建为核心,为了怕麻烦就没有进行优化,但是创建和输出是这个代码的核心。/希望这个能帮助到初学者,在这有不懂得地方可以看我的随笔,链表的整表的创建,
2014-05-17 13:03:06
604
转载 指针空间的申请和释放自netanimals
一、malloc()和free()的基本概念以及基本用法: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 关于分配失败的原因,应该有多种,比如说空间不足就是一种。char *Ptr = NULL; Ptr = (char *)
2014-05-16 16:42:25
491
原创 顺序表的增删改查
#include #include #define MaxSize 100using namespace std;typedef int DataType;typedef struct { DataType List[MaxSize] ; int size;}SeqList;//初始化列表中的元素void ListInitiate(Se
2014-05-12 22:38:39
578
原创 顺序表堆栈的操作实现源码
//堆栈的实现,顺序表的实现//编写一个C源程序,其中包含顺序表示的空栈的创建、判断栈是否为空、进栈、出栈、取栈顶元素等操作#include #include #define MaxSize 20 using namespace std;typedef int DataType;typedef struct { int stack[MaxSize];in
2014-05-12 22:06:58
1062
原创 LRU页面调度算法
//LRU页面调度算法,原理是踢出最近最少使用的置换算法//该算法淘汰最近那一段时间较久未被访问的那一页//实现该核心算法代码:int GetMax(Page *b){//此代码是获取最长时间停留在内存中的页面 int max = -1; int tag = 0; for(int i = 0;i< M;i++){ if(b[i...
2014-04-25 13:13:44
3701
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人