C/C++
pengjin1985
这个作者很懒,什么都没留下…
展开
-
派生和继承
1. 派生类的概念 以面向对象的程序设计的观点来看,继承表达的是对象类之间的相互关系。这种关系使得某类对象可以继承另外一类对象的特征和能力。如果一类对象继承了另一类对象的特征和能力,这个类就叫做所继承类的派生类。1.1 声明一个派生类的一般格式是: class 派生类名:派生方式( public or private )基类名 { // 派生类新增加或修改的数据和成员函数 }转载 2012-04-10 10:17:29 · 321 阅读 · 0 评论 -
图解数据结构(5)——散列法及哈希表
七、哈希表(Hash Table)及散列法(Hashing)数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组”,如图:左边很明显是个数组,数组转载 2012-06-15 10:45:54 · 559 阅读 · 0 评论 -
关于C++ const 的全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码转载 2012-06-19 13:41:10 · 436 阅读 · 0 评论 -
找出单链表的倒数第n个元素
这道题目有两种算法,但无论哪种算法,都要考虑单链表少于n个元素的情况。这里假设要寻找倒数第4个元素。 第1种算法,建立两个指针,第一个先走4步,然后第2个指针也开始走,两个指针步伐(前进速度)一致。Java代码 static Link GetLast4thOne(Link head) { Link first = head; Link s转载 2012-06-25 10:32:52 · 755 阅读 · 0 评论 -
不使用库函数将整数转换为字符串或将字符串转换为整数
[cpp] view plaincopy不使用库函数将整数转换为字符串 [cpp] view plaincopy// 字符串处理函数.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; //不使用库函数将整数转换为字符串 void in转载 2012-06-25 11:06:40 · 974 阅读 · 2 评论 -
不是用它printf,将十进制数以二进制和十六进制的形式输出
//不是用它printf,将十进制数以二进制和十六进制的形式输出#include "stdafx.h"#include using namespace std;//将十进制转换为2进制char *get2string(long n){char b[20];static char a[20];int i,j=0;while (n)//取个位的数值{转载 2012-06-25 11:14:30 · 593 阅读 · 0 评论 -
删除两个双向循环链表的相同节点
转载自:http://blog.csdn.net/zhuimengzh/article/details/6803950有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一个函数将两链表中数值相同的节点删除。分析:(1) 首先把A中含有与B中相同的数据节点找出来组成一个新的链表,例如:链表A:1 2 3 4 2 6 4链表B:10 20 3 4 2 1转载 2012-06-25 10:46:17 · 1174 阅读 · 0 评论 -
自我实现strcpy,memcpy函数
[cpp] view plaincopy// 字符串处理函数.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; //编程实现strcpy char* strcpy(char* strDest,const char *strSrc){ if (strDest==转载 2012-06-25 11:16:37 · 427 阅读 · 0 评论 -
找出单链表的中间元素
算法思想:使用两个指针first和second,只是first每次走一步,second每次走两步,这样当second达到链表尾部时,first刚好在链表的中间。Java代码 static Link GetMiddleOne(Link head) { Link first = head; Link second = head; while转载 2012-06-25 10:29:54 · 669 阅读 · 0 评论 -
指针加减操作
[cpp] view plaincopyint a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); coutcout 答案:25分析: 对指针进行加1操作,得到的是下一个元素的地址,而不是原有地址值直接加1,所以,类型为t的指针的移动是以sizeof(t)为移动单位。ptr是一个int型的指针(&a+1)。转载 2012-06-25 11:04:27 · 378 阅读 · 0 评论 -
单链表反转
这道题目有两种算法,既然是要反转,那么肯定是要破坏原有的数据结构的: 算法:我们需要额外的两个变量来存储当前节点curr的下一个节点next、再下一个节点nextnext:public static Link ReverseLink1(Link head){ Link curr = head.Next; Link next = null; L转载 2012-06-25 10:27:35 · 382 阅读 · 0 评论 -
关于C++ 牛人推荐的好书
关于C++ 牛人推荐的好书首先肯定要读一读Bjarne Stroustrup的The Design and Evolution of C++,了解一下这个语言的历史。接下来就可以看别的书了,但要不停地回头看这本书,看到你不断地学到的新技术是怎么样一点点地被接纳到这个语言中去的。第一本书因人而异,基础好一些的,可以看Stanley B. Lippman的C++ Prime转载 2013-03-13 16:07:12 · 531 阅读 · 0 评论 -
C++模板学习
1. 模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.转载 2013-03-14 16:02:08 · 432 阅读 · 0 评论 -
图解数据结构(4)——二分法查找法
六、二分法查找(Binary Search)如何从数组里找一个元素的位置?如果排列是无序的,我们只能从头到尾找,但如果排列是有序的,我们则可以用别的更好的方法,二分查找法就类似我们在英汉词典里找一个单词的方法。如下图所示(假如我们要查找的数字是“88”):下面我给出了一段demo代码,来演示二分查找法比顺序查找快多少,代码为了方便起见,初始化有序表的时候填入的数字都是均匀的,而事实转载 2012-06-15 10:44:07 · 674 阅读 · 0 评论 -
图解数据结构(10)——排序
十四、排序(Sort)这可能是最有趣的一节。排序的考题,在各大公司的笔试里最喜欢出了,但我看多数考得都很简单,通常懂得冒泡排序就差不多了,确实,我在刚学数据机构时候,觉得冒泡排序真的很“精妙”,我怎么就想不出呢?呵呵,其实冒泡通常是效率最差的排序算法,差多少?请看本文,你一定不会后悔的。1、冒泡排序(Bubbler Sort)前面刚说了冒泡排序的坏话,但冒泡排序也有其优点,那就是好理解转载 2012-06-15 10:52:08 · 579 阅读 · 0 评论 -
图解数据结构(9)——左偏树
十三、左偏树(Leftist Tree)树这个数据结构内容真的很多,上一节所讲的二叉堆,其实就是一颗二叉树,这次讲的左偏树(又叫“左翼堆”),也是树。二叉堆是个很不错的数据结构,因为它非常便于理解,而且仅仅用了一个数组,不会造成额外空间的浪费,但它有个缺点,那就是很难合并两个二叉堆,对于“合并”,“拆分”这种操作,我觉得最方面的还是依靠指针,改变一下指针的值就可以实现,要是涉及到元素的移动转载 2012-06-15 10:51:00 · 495 阅读 · 0 评论 -
视频与图像RGB/YUV格式详解
计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red)、G(Green)、B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生色彩。这种色彩的表示方法称为RGB色彩空间表示(它也是多媒体计算机技术中用得最多的一种色彩空间表示方法)。 根据三基色原理,任意一种色光F都可以用不同分量的R、G、B三色相加混合而成。 F =转载 2012-05-07 11:14:13 · 395 阅读 · 0 评论 -
入门视频采集与处理(学会分析YUV数据)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ticktick.blog.51cto.com/823160/555791 做视频采集与处理,自然少不了要学会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来转载 2012-05-07 09:31:04 · 3356 阅读 · 0 评论 -
图解数据结构(1)——大圈表示法、动态数组和单向链表
《数据结构》这门课是计算机专业的核心课程,但往往却让人头痛,因为比较抽象,当然了,也许你足够聪明,并不觉得它有多难,但对我而言,是有点难度,后来我仔细想了想,到底哪里难?我得出这么个结论:长篇大论,缺乏图表。现在的人都喜欢看电影,看电视剧,很少人还热衷于看小说吧,密密麻麻的文字不如一些图来得直观。另外,我们大多数人是做应用的,不是做研究的,所以我们只需要知道2+3=5,而不需要知道a+b=c。转载 2012-06-15 10:40:16 · 613 阅读 · 0 评论 -
图解数据结构(8)——二叉堆
十二、二叉堆(Binary Heap)经历了上一篇实现AVL树的繁琐,这篇就显得非常easy了。首先说说数据结构概念——堆(Heap),其实也没什么大不了,简单地说就是一种有序队列而已,普通的队列是先入先出,而二叉堆是:最小先出。这不是很简单么?如果这个队列是用数组实现的话那用打擂台的方式从头到尾找一遍,把最小的拿出来不就行了?行啊,可是出队的操作是很频繁的,而每次都得打一遍擂台,那就转载 2012-06-15 10:49:51 · 469 阅读 · 0 评论 -
内存泄漏检查方法总结
方法一:编者按: 这几天在调试课本上关于二叉树的有关代码,发现严的这本数据结构教程喜欢把简单问题复杂化,当然这是从学生角度出发,从个人角度出发,这本书注重代码的可读性、重用等,更侧重于与软件工程、软件组织结合,当然是不错的教材。比如,其栈和队列的顺序实现,也都用指针来代替数组,让学生是很难理解。我在实现过程中,也有点拿不稳,特别是用队列或栈来存储树的结点(也是指针)时,为了确保没问题,转载 2012-06-15 09:59:08 · 1663 阅读 · 0 评论 -
宏与内联函数的区别
介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如#define TABLE_COMP(x) ((x)>0?(x):0)就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这转载 2012-06-15 10:17:24 · 453 阅读 · 0 评论 -
栈与堆的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2012-06-15 10:24:31 · 284 阅读 · 0 评论 -
图解数据结构(2)——栈
四、栈(Stack)前一篇讲解了最基本的东西,这篇就稍微前进一点点,讲一下栈,栈在英文中叫Stack,翻译成中文又叫“堆栈”,但决不能称为“堆”,这个要搞清楚,我们说的“栈”和“堆栈”指的都是Stack这种数据结构,但“堆”却是另外一个概念了,这里且不提。栈最大特点是先进后出,如图:可以看出,栈有几个最常见的方法,或者说必备的方法,Push,Pop和Top,即进栈,出栈和取最顶转载 2012-06-15 10:41:54 · 606 阅读 · 0 评论 -
图解数据结构(3)——队
五、队(Queue)前一篇讲了栈(Stack),队和栈其实只有一个差别,栈是先进后出,队是先进先出,如图:从图中可以看出,队有两个常用的方法,Enqueue和Dequeue,顾名思义,就是进队和出队了。队和栈一样,既可以用数组实现,也可以用链表实现,我还是偏向于用数组,我的实现示意图如下:队有啥用呢?一个最常用的用途就是“buffer”,即缓冲区,比如有一批从网络来的数据,处理转载 2012-06-15 10:43:19 · 26252 阅读 · 0 评论 -
图解数据结构(6)——树及树的遍历
八、树(Tree)树,顾名思义,长得像一棵树,不过通常我们画成一棵倒过来的树,根在上,叶在下。不说那么多了,图一看就懂:当然了,引入了树之后,就不得不引入树的一些概念,这些概念我照样尽量用图,谁会记那么多文字?树这种结构还可以表示成下面这种方式,可见树用来描述包含关系是很不错的,但这种包含关系不得出现交叉重叠区域,否则就不能用树描述了,看图:面试的时候我们经常被考到的是转载 2012-06-15 10:47:15 · 935 阅读 · 0 评论 -
图解数据结构(7)——二叉查找树及平衡二叉查找树
十、二叉查找树(BST)前一篇介绍了树,却未介绍树有什么用。但就算我不说,你也能想得到,看我们Windows的目录结构,其实就是树形的,一个典型的分类应用。当然除了分类,树还有别的作用,我们可以利用树建立一个非常便于查找取值又非常便于插入删除的数据结构,这就是马上要提到的二叉查找树(Binary Search Tree),这种二叉树有个特点:对任意节点而言,左子(当然了,存在的话)的值总是小于转载 2012-06-15 10:48:45 · 516 阅读 · 0 评论 -
理解抽象类
abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样转载 2012-04-11 16:47:51 · 326 阅读 · 0 评论