
C&C++
文章平均质量分 78
yuanwenqun2
一桶糨糊
展开
-
C/C++中函数指针的含义
函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 定义一个指向函数的指针用如下的形式,以上面的test()为例: int (*fp)(int a);//这里就定义了一个指向函数的指针 函数指针不能绝对不能指向不同类型,转载 2009-10-10 13:43:00 · 366 阅读 · 0 评论 -
拓扑排序算法(C++实现)
bool Topological(int v[]) { //计算有向图中顶点的拓扑次序 //如果找到了一个拓扑次序,则返回true, 此时, 在v[0->n-1]中记录拓扑次序 //如果不存在拓扑次序,则返回false int n = Vertices(); //计算入度 int转载 2009-10-10 15:45:00 · 1548 阅读 · 0 评论 -
Huffman树的建立(c++实现)
Huffman 编码是应用很广泛的一种文本压缩编码方式。它的原理就是用不等长的编码来表示不同出现频率的字符。出现频率高的字符,就用比较短的编码来表示,出现频率低的,就是较长的编码来表示。 Huffman编码是一种前缀编码方式,所谓前缀编码,即,在编码集合中,没有任何一个编码是另一个编码的前缀。 使用Huffman编码的时候,一般要生成对应文本的编码集合(Huff转载 2009-10-10 15:51:00 · 2479 阅读 · 0 评论 -
最小堆&&最大堆的实现(c++)
最小堆: template class MinHeap { public: MinHeap(int MinHeapSize = 10); ~MinHeap() {delete [] heap;} int Size() const {return CurrentSize;} T Min() {if (Curren转载 2009-10-10 15:54:00 · 2944 阅读 · 0 评论 -
Montgomery 快速幂模算法
快速计算乘方的算法:如计算2^13,则传统做法需要进行12次乘法。 //计算n^p unsigned power(unsigned n,unsigned p) { for(int i = 0; i < p; i++) n *= n; return n; } 优化如下:把2*2的结果保原创 2009-10-10 15:56:00 · 1337 阅读 · 0 评论 -
排序算法
插入排序算法template void InsertionSort(T a[], int n) { for (int i = 1; i < n; i++) { T t = a[i]; int j; for (j = i-1; j >= 0 && t < a[j]; j--)转载 2009-10-10 16:02:00 · 457 阅读 · 0 评论 -
typedef使用大全3(指向函数的指针)//typedef的使用可以隐藏复杂的函数指针语法
#include #include #include //////////////////////////////////////////函数声明int myAdd(int,int);int mySub(int,int);int myMul(int,int);int myDiv(int,int);//////////////////////////////////////////typedef转载 2009-10-10 13:42:00 · 425 阅读 · 0 评论 -
寻找第k大或第k小的算法 -- 内存足够(C++实现)
<!-- document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text &转载 2009-10-10 15:39:00 · 696 阅读 · 0 评论 -
MergeSort-归并排序(C++实现)
template void Merge(T c[], T d[], int l, int m, int r) { // 把 c[l:m]] 和 c[m:r] 归并到 d[l:r]. int i = l, j = m+1, k = l; while ((i <= m) && (j <= r)) {转载 2009-10-10 15:44:00 · 625 阅读 · 0 评论 -
AVLTree - 二叉平衡树的实现之二(C++)
template class AVLtree2 { private: AVLNode* root; void LeftSingleRotate(AVLNode*& p ); //左单旋转 void LeftDoubleRotate(AVLNode*& p ); //左双旋转原创 2009-10-10 15:48:00 · 539 阅读 · 0 评论 -
堆排序算法(c++实现)
template void HeapSort(T a[], int n) { //创建一个最大堆 MaxHeap H(1); H.Initialize(a,n,n); T x; for (int i = n-1; i >= 1; i--) {原创 2009-10-10 15:53:00 · 954 阅读 · 0 评论 -
素数判断算法 - 拉宾-米勒测试定理(c++实现)
在1000如此小的素数判断,在不考虑效率的情况下可以利用素数的定义来判断 printf("2 ");//2是唯一一个偶素数 for( int a = 3; a <= 1000; a+=2) //步进为2, 因为只有奇数才有可能是素数(已排除了2) { bool bDivision = false; int _nTe转载 2009-10-10 15:57:00 · 3682 阅读 · 0 评论 -
复杂指针解析
复杂指针解析因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的:The right-left rule: Star转载 2009-10-12 21:17:00 · 394 阅读 · 0 评论 -
从一道笔试题谈算法优化(上)
从一道笔试题谈算法优化(上)作者:赖勇浩(http://blog.youkuaiyun.com/lanphaday) 引子 每年十一月各大IT公司都不约而同、争后恐后地到各大高校进行全国巡回招聘。与此同时,网上也开始出现大量笔试面试题;网上流传的题目往往都很精巧,既能让考查基础知识,又在平淡中隐含了广阔的天地供优秀学生驰骋。这两天在网上淘到一道笔试题目(注1),虽然真假未知,但的确转载 2009-10-15 21:43:00 · 424 阅读 · 0 评论 -
各种排序算法
1、起泡排序算法:核心思想是扫描数据清单,寻找出现乱序的两个相邻的项目。当找到这两个项目后,交换项目的位置然后继续扫描。重复上面的操作直到所有的项目都按顺序排好2、直接插入排序算法:经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L[i]和L[i-1]转载 2009-10-16 21:03:00 · 887 阅读 · 0 评论 -
C/C++语言编程修养1(转)
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快? 我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对 于速度快,只要编得多也就熟能生巧了。 我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极向上的态度,有创造性思维。 3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒转载 2010-01-13 10:06:00 · 758 阅读 · 0 评论 -
C/C++语言编程修养2
21、goto语句的使用 ————————— N年前,软件开发的一代宗师——迪杰斯特拉(Dijkstra)说过:“goto statment is harmful !!”,并建议取消goto语句。因为goto语句不利于程序代码的维护性。 这里我也强烈建议不要使用goto语句,除非下面的这种情况: #define FREE(p) if(p) { /转载 2010-01-13 10:12:00 · 655 阅读 · 0 评论 -
有关指针的复杂类型
要理解指针, 尤其是和一些其他类型修饰符放在一起的指针, 看上去很难,其实不然。一个类型声明里会出现很多修饰符,他们就像普通的表达式一样,有优先级和结合性。只要掌握了这些规律,分析一个复杂的指针类型就很容易了。分析时, 先从变量名开始,然后根据修饰符的优先级结合性,一步一步分析。下面看几个最常用的例子:int p; // 普通的int变量int *p; // 首先从p开始转载 2009-10-10 15:35:00 · 622 阅读 · 0 评论 -
typedef用法小结
这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等地方都大量的用到.但是有些地方还不是很清楚,今天下午,就想好好研究一下.上网搜了一下,有不少资料.归纳一下: 来源一:Using typedef to Curb Miscreant Code Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为转载 2009-10-10 13:41:00 · 483 阅读 · 1 评论 -
C语言---回调函数------------->解析
简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。 为什么要使用回调函数? 因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。 如果想知道回调函数在实际中有什么作用,先假转载 2009-10-10 13:44:00 · 422 阅读 · 0 评论 -
指针与引用
//---------------------------------------------------------------------引用是一种没有指针语法的指针.与指针一样,引用提供对对象的间接访问.--《c++ primer》p29虽然引用也可以被用作一种指针,但是象对指针一样用一个对象的地址初始化一个引用却是错误的。例如:int i=0;int &refi=i; //ok,refi指转载 2009-10-10 14:46:00 · 504 阅读 · 0 评论 -
大型公司笔试题目汇总(3)——创维数字笔试题目精华版
大型公司笔试题目汇总(3)——创维数字笔试题目精华版 收藏 <!-- document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.ge转载 2009-10-10 15:02:00 · 1464 阅读 · 0 评论 -
外企面试官们爱提的十个问题
1.请介绍一下你自己。 这是外企常问的问题。一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,外企最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理外企才会相信。外企很重视一个人的礼貌,求职者要尊重转载 2009-10-10 15:30:00 · 465 阅读 · 0 评论 -
QuickSort - 快速排序算法(C++)
分快速排序采用的是分而治之的思想来进行的排序,测试下来比归并排序 更快一点为什么更快一点?我的理解:是n个元素被分成 左, 中, 右三段,中段只有一个元素,左段中各个元素都小于等于中段元素,右端中各个元素都大于等于终端元素,因此左右两端中的元素集合不仅变成了可以独立处理的小集合,而且还不必对他们在进行各自的排序后的结果再进行合并, 而归并排序多了这步,所以快速排序比归并排序更快点分而治转载 2009-10-10 15:43:00 · 479 阅读 · 0 评论 -
Dijkstra算法(c++实现)
void Dijkstra(int s, T d[], int p[]) { //寻找从顶点s出发的最短路径,在d中存储的是s->i的最短距离 //p中存储的是i的父节点 if (s n) throw OutOfBounds(); //路径可到达的顶点列表,这里可以用最小堆转载 2009-10-10 15:47:00 · 914 阅读 · 0 评论 -
回调函数
回调函数(一篇好文章与大家分享!看过之后有如醍醐灌顶般舒服!心中的诸多疑惑顿解!) 调用(calling)机制从汇编时代起已经大量使用:准备一段现成的代码,调用者可以随时跳转至此段代码的起始地址,执行完后再返回跳转时的后续地址。 CPU为此准备了现成的调用指令,调用时可以压栈保护现场,调用结束后从堆栈中弹出现场地址,以便自动返回。借堆栈保护现场真是一项绝妙的发明,它使调用者和被原创 2009-10-10 13:45:00 · 338 阅读 · 0 评论 -
大型公司笔试题目汇总(2)——网易计算机类笔试题目
1. 写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) int a = 4; (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++); a = ? 答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a; 改后答案依次为9,10,10,11#include using转载 2009-10-10 15:07:00 · 709 阅读 · 0 评论 -
大型公司笔试题目汇总(1)——46家笔试题解答
一、Sony公司笔试题1、打印以下信息**.*.*..*..*..*...*...*...*...*....*....*....*....*....*.....*.....*.....*.....*.....*.....*......*......*......*......*......*......*......*.......*.......*.......*.......*......转载 2009-10-10 15:13:00 · 1681 阅读 · 1 评论 -
prim算法(C++实现)
template bool Prim(EdgeNode t[]) { //如果不连通则返回false //如果连通,则在t[0->n-2]中返回最小生成树 int n = Vertices(); bool *selected = new bool [n+1]; VertexNode1 *VN1 = ne原创 2009-10-10 15:46:00 · 1155 阅读 · 0 评论 -
kruskal算法(C++实现)
template bool Kruskal(EdgeNode t[]) { //如果不连通则返回false //如果连通,则在t[0->n-2]中返回最小生成树 int n = Vertices(); int e = Edges(); InitializePos(); EdgeN转载 2009-10-10 15:46:00 · 807 阅读 · 0 评论 -
AVLTree - 二叉平衡树的实现之一(C++)
template class AVLtree { public: AVLtree() {root = 0;} ~AVLtree() {Erase(root);} bool Search(const K& k, E& e) const; AVLtree& Insert(const E& e);转载 2009-10-10 15:49:00 · 671 阅读 · 0 评论 -
两个整数的最大公因数-欧几里得算法
int GCD(int m, int n) { int r1 = m, r2 = n, r3; for( ; ; ) { int q = r1 / r2; r3 = r1 - q * r2; if( r3 == 0) //根据算法r3必定越来越小,最后一定会等于0,所转载 2009-10-10 15:59:00 · 1571 阅读 · 0 评论 -
C语言的谜题
1、下面的程序并不见得会输出 hello-std-out,你知道为什么吗?#include #include int main() { while(1) { fprintf(stdout,"hello-std-out"); fprintf(stderr,"hello-std-err"); sleep(1); } return原创 2009-10-11 16:30:00 · 478 阅读 · 0 评论 -
我所收藏的重点大学BBS资源
饮水思源(上海交通大学)人工智能 http://bbs.sjtu.edu.cn/bbsdoc,board,AI.html图形图像http://bbs.sjtu.edu.cn/bbsdoc,board,graphics.html 海纳百川(浙江大学)人工智能http://bbs.zju.edu.cn/cgi-bin/bbsdoc?board=AI图形图像http://bbs.zju.edu.cn/转载 2009-10-10 13:26:00 · 682 阅读 · 0 评论 -
Const,Const函数,Const变量,函数后面的Const
看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书转载 2009-10-10 13:36:00 · 321 阅读 · 0 评论 -
变长字符串的内存管理
方法1:静态内存这里有一个方法来实现帮助函数:const char *get_string(){ static char buf[10000]; /* Big enough */ /* Read string inot buf... */ return buf;}复制代码转载 2012-04-10 22:55:53 · 872 阅读 · 0 评论