自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (7)
  • 收藏
  • 关注

转载 文件索引结构

索引文件        为了提高文件的检索效率,可以采用索引方法组织文件。采用索引这种结构,逻辑上连续的文件可以存放在若干不连续的物理块中,但对于每个文件,在存储介质中除存储文件本身外,还要求系统另外建立一张索引表,索引表记录了文件信息所在的逻辑块号和与之对应的物理块号。索引表也以文件的形式存储在存储介质中,索引表的物理地址则由文件说明信息项给出。索引结构如图5.21所示。    

2010-05-25 16:18:00 24246

转载 递归与尾递归

下面两个程序是scheme写的计算阶乘的递归和尾递归实现线性递归:(define (factorial n)    (if (=n 1)        1        (* n (factorial (- n 1)))))尾递归:(define (factorial n)    (fact-iter 1 1 n))(define (fact-iter product counter max-

2010-05-24 23:52:00 1027

原创 稀疏矩阵

一、稀疏矩阵的定义  对于那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse)。  人们无法给出稀疏矩阵的确切定义,一般都只是凭个人的直觉来理解这个概念,即矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素没有分布规律。    二、稀疏矩阵的压缩存储  由于稀疏矩阵中非零元素较少,零元素较多,因此可以采用只存储非零元素的方法来进行压缩存

2010-05-24 23:33:00 23450 2

转载 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值

题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:struct ListNode{      int       m_nKey;      ListNode* m_pNext;};分析:这是一道很有意思的面试题。该题以及它的变体经常出现在各大公司的面试、笔试题中。看到这道题后,第一反应是从头到尾输出比较简单。于是很自然地想到把链表中链接结点的指针反转过来,改变链表的方向

2010-05-24 22:54:00 1182

原创 c++总结

C++问与答2008-07-23 23:331、在VC的MFC程序中能否使用cout输出?答:不能。必须使用CDC来进行输出。2、C++中子类的构造函数是否会自动调用基类构造函数?答:会。如果在子类的构造函数中不显式指定调用基类构造函数,则将自动调用基类缺省构造函数,所以基类一定要有缺省构造函数。如果子类的构造函数除了调用基类构造函数以外什么都不做,不能不写,必须写一个空函数。3、

2010-05-24 22:52:00 669

转载 C++基础知识,你知道多少?

 1. 传指针时,我们可以通过指针来修改它在外部所指向的内容。但如果要修改外部指针所指向的对象是不可能的。例如传递外部指针到函数内来分配空间,必须传递指针的指针或指针的引用。  2. char carry[10] = {0}; 编译器会将其后所有的东西都置0;  3. 函数返回值为const时,返回的东西付给一个类型相同的标示后其不能为左值;  4. const int *i; int

2010-05-24 00:24:00 392

转载 strcpy()、memcpy()、memmove()、memset()的实现

一直想知道内部实现, 现在想看了, 就找了一下.不错.strcpy()、memcpy()、memmove()、memset()的实现 strcpy(), 字符串拷贝.char *strcpy(char *strDest, const char *strSrc){    assert((strDest!=NULL) && (strSrc !=NULL));    char *address = st

2010-05-24 00:17:00 443

转载 转:C/C++:memmove、memcpy、strcpy三者的区别

strcpy只能处理字符串;如果拷贝带有特殊字符的串,就只能用memcpy或memmove。memcpy和memmove功能基本上差不多,但是当源串和目标串有Overlap时,memmove可以正确处理,memcpy则不行。memcpy()和memmove()都是C语言中的库函数,在头文件string.h中,其原型分别如下:   void * memcpy ( void * dst, cons

2010-05-24 00:14:00 583

原创 几个典型的内存拷贝及字符串函数实现

写一个函数,完成内存之间的拷贝。[考虑问题是否全面,是否考虑内存重叠问题]返回void *支持链式操作,参数类型是void *以支持任意类型的指针,输入参数加上const修饰,最好加上assert对输入输出指针进行非NULL判断void* memcpy( void *dest, const void *src, size_t count ){    char* pdest = st

2010-05-24 00:05:00 574

原创 C语言的移位操作符

位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。  位移位运算符的运算对象、运算规则与结果、结合性如表2-16所示。  移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移花接木有关。如果是左移,则规定补入的数全部是0;如果是右移,还与被移位的数据是否带符号有关。

2010-05-23 21:46:00 3363

转载 位图排序

问题:给定输入文件,文件中每条记录是一个整型数(不重复),每条记录最大为n,n限制:主存不超过1MB(实际程序超过了1M)。按照《编程珠玑》上介绍,有以下几种方法:1,多通道分片读取文件,然后合并排序分片文件2,位图排序:适合于对大量不重复数据,并且数据其他相关数据。位图排序就是使用一张表来记录关键字的存在状态(存在或不存在),然后通过采集到的状态(在/不在)通过一次遍历来

2010-05-23 21:45:00 629

转载 指针、字符串及字符串操作函数

开始之前必须明确strlen的含义,原型为size_t strlen( char *str ); strlen返回字符串的长度,即null(/0)之前的字符的数量。一 char* 与 char []实例加注释:Code void TestCharPointerAndArray() {     char *c1 = "abc"; //abc/0常量区,c1在栈上, 常量区程序结束后自动释

2010-05-23 19:57:00 1902

转载 单向链表反转

比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:代码Code highlighting produced by Actipro CodeHighlighter (free

2010-05-23 12:57:00 513

转载 判断两个链表是否相交

如果两个单向链表相交,一定是形成Y字形,而不会是X字形。基于这个想法,可以判断两链表是否相交。 

2010-05-23 12:35:00 507

转载 二叉查找树(binary search tree (BST))--算法导论示例

二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树:   1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;   2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;   3. 它的左、右子树也分别为二叉排序树。二叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序树可得

2010-05-22 23:56:00 1113

转载 有10亿个浮点数,找出一万个最大的数

给一个基于最小二叉堆的方案: 第一阶段,向最小二叉堆中插入前一万个浮点数; 第二阶段,从第一万零一个浮点数开始,将之与最小二叉堆顶部的最小值比较。如果小于这个最小值,把最小值弹出并将新值插入到二叉堆中。重复此过程直到遍历完成。 . 创建长度一万的二叉树。 2. 遍历剩余的浮点数,若大于最小值则插入二叉树并删除最小的节点,否则略过。 这基本上是一个较优的算法,复杂度为: 千万级(一万的排序)

2010-05-22 21:48:00 964

转载 二叉堆类添加和删除元素

现在有这么一个需求,需要求一组数据的里最低的值.可以用二叉堆来快速的实现这个功能.  二叉堆  在有序列表中,每个元素都按照由低到高或由高到低的顺序保存在恰当的位置。这很有用,但是还 不够。事实上,我们并不关心数字 127 是否比 128 在更低的位置上。我们只是想让 值最低的元素能放在列表顶端以便容易访问。列表的其他部分即使是混乱的也不必在意。列表的其他部分只有在我们需要另一个 值最低的元素的时

2010-05-22 19:26:00 3245 1

原创 c++小总结

二、头文件的作用加强安全检测通过头文件可能方便地调用库功能,而不必关心其实现方式三、* , &修饰符的位置对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名四、if语句不要将布尔变量与任何值进行比较,那会很容易出错的。整形变量必须要有类型相同的值进行比较浮点变量最好少比点,就算要比也要有值进行限制指针变量要和NULL进行比较,不要和布尔型和整形比较五、const和#define的比

2010-05-22 16:45:00 522

转载 c++总结

经验:1、一个函数只实现相应的一个单功能2、用extern声明外部变量   (1)在同一个文件内,若定义在文件中间,要在文件前面使用,可以在前面用extern声明   (2)在相关联的不同的文件内,若文件A定义了变量a,文件B要使用变量a,若都定义变量a会出现重复定义错误,在文件B中只要加上extern a(不用加类型如int,但建议加上,否则可能出现不可预期的错误,实际操作中的经验),就可以使用

2010-05-22 16:28:00 855

转载 链表与数组的区别及堆和栈的区别

链表与数组的区别A 从逻辑结构来看A-1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当     数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。A-2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、     删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)B 从内存存储来看B-1. (静态)数组从栈中

2010-05-22 16:25:00 6123 1

原创 桶排序

#include void swap(int *a, int *b){    int temp = *a;    *a = *b;    *b = temp;}int partition(int *a, int low, int high){    int middle = (low + high)/2;    for(int i=low,j=high; i {        while(a[

2010-05-22 14:52:00 576

原创 c语言指针和数组

 1、指针数组问题和  指向数组的指针。    int multi[2][4];    int (*p)[4];  //如果我写成 int *p 可以么?;    p = multi;这是  多维数组 和指针的关系, 指针数组比较容易理解。   指针数组: 是一个数组,里面都放着某种类型的指针。   数组指针: 指向数组的指针    int * b=new int[10]; 指向一维数

2010-05-22 10:18:00 494

原创 二分查找及其变形算法

二分查找是典型的分治法的应用,要求待查序列排好序,这里都按照从小到大排列处理,查找时间代价o(log(n)).思路和中间的数字比较,如果相等则找到,如果则在右边找。分治及许多计算机算法的核心就是将问题设法转化为相同的形式问题而规模减小,即子问题。能够找到规模减小的子问题,意味着问题的解决。注意分治不一定非要递归,如果每次只走一个分支,那么循环的写法也非常简单,是更好的写法。

2010-05-21 23:59:00 578

转载 C++多态性与虚函数

多态性与虚函数1.多态性polymorphism:在C++中多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。2.在面向对象方法中一般是这样表述多态性的:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法).也就是说,每个对象可以用自己的方式去响应共同的消息。3.所谓消息,就是调用函数。4.不同的行为:就是指不同的实现,即执行不同的函数。

2010-05-21 23:37:00 570

原创 关于如何查找数组中和最大的子序列

关于如何查找数组中和最大的子序列问题:给定一个数组,如{-1,3,6,-9,2,-5,-1,9,3,-3},求该数组中的和最大的子序列。思路:最简单的方法,以每个元素作为起点,再考虑1~n所有的子序列元素个数的情况,这样的复杂度就为O(n*n). 之后我们讨论了如何简化数组,比如相邻的正数可以将其绑定,两端的负数可以直接排除,最后数组可以被简化为两端为正数,中间没有相邻正数的形式。然而

2010-05-21 21:41:00 2520 3

原创 指针和引用的区别总结

1.从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变 -v5Y "`  2.从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域 +LdZz$c-  3.从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值

2010-05-21 20:54:00 501

原创 面向对象:类组合还是类继承?

类组 合 还 是 类继 承?  假设 我 们 有一 张 表A,有多个画面用到。比如10个画面用到。由于每个画面功能不一 样 ,但A表的大多数字段所以字段都是共用的。  这 种情况下,怎么写自己的INFO 类 呢?大概有3种方案  方案1:每个画面都写一个自己的INFO类 。  方案2:先写一个表A的INFO类 ,然后每个画面的INFO 类 里面加一个表A的INFO 类 作 为 属性。也就是 类组

2010-05-21 19:58:00 960

转载 〔面试题〕无需额外变量交换两个变量的方法

两种方法:1.使用异或1 void swap(int a,int b) 2 { 3 a=a^b; 4 b=b^a; //b^a相当于 b^a^b 也就是 b^a^b的值就是a了, 下边相同 5 a=a^b; 6 } 也有人写成了一句,就是读起来麻烦些:)a^=b^=a^=b;  2.使用加减1 void swap(int a,int b)2 {3 a = a + b ;4 b 

2010-05-21 19:56:00 673

原创 单向链表存在环的判断

昨天去面试了一把,面试官给出了这道题。当时我知道一定有什么巧妙的办法,但是我并没有想到。我只是想到了通用的方法,顺序遍历然后为遍历过的节点依次做标志。也试图去想了些特殊的访法,不过都有一定的局限性。事后得知了下面这个较优的方案。typedef struct NodeTag{   struct type data;   node * next;}Node;    题目:如何判断单项链表有死循环?  

2010-05-21 19:54:00 4465 1

原创 如何判断单向链表有环?

昨天去面试了一把,面试官给出了这道题。当时我知道一定有什么巧妙的办法,但是我并没有想到。我只是想到了通用的方法,顺序遍历然后为遍历过的节点依次做标志。也试图去想了些特殊的访法,不过都有一定的局限性。事后得知了下面这个较优的方案。typedef struct NodeTag{   struct type data;   node * next;}Node;    题目:如何判断单项链表有死循环?  

2010-05-21 18:41:00 2504

原创 c++笔试题

1.介绍一下STL,详细说明STL如何实现vector。Answer:STL (标准模版库,Standard Template Library.它由容器算法迭代器组成。STL有以下的一些优点:可以方便容易地实现搜索数据或对数据排序等一系列的算法;调试程序时更加安全和方便;即使是人们用STL在UNIX平台下写的代码你也可以很容易地理解(因为STL是跨平台的)。vector实质上就是一个动态数组,会根

2010-05-21 18:37:00 579

转载 你最需要注意的11条要点for C++

下面的这些要点是对所有的C++程序员都适用的。我之所以说它们是最重要的,是因为这些要点中提到的是你通常在C++书中或网站上无法找到的。如:指向成员的指针,这是许多资料中都不愿提到的地方,也是经常出错的地方,甚至是对一些高级的C++程序员也是如此。  这里的要点不仅仅是解释怎样写出更好的代码,更多的是展现出语言规则里面的东西。很显然,它们对C++程序员来说是永久的好资料。我相信这一篇文章会使你收获不

2010-05-20 23:28:00 410

转载 extern c 谈

C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同. 2.从

2010-05-20 23:23:00 324

转载 #pragma once 与 #ifndef 的区别解析

为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。    方式一:    #ifndef __SOMEFILE_H__    #define __SOMEFILE_H__    ... ... // 声明、定义语句    #endif

2010-05-20 23:15:00 467

原创 组合的优点,继承的缺点

继承关系最大的弱点是打破了封装,子类能够访问父类的实现细节,子类与父类之间紧密耦合,子类缺乏独立性,从而影响了子类的可维护性。为了尽可能地克服继承的这一缺陷,应该遵循以下原则: ·精心设计专门用于被继承的类,继承树的抽象层应该比较稳定。·对于父类中不允许覆盖的方法,采用final修饰符来禁止其被子类覆盖。·对于不是专门用于被继承的类,禁止其被继承。·优先考虑用组合关系来提高代码的可

2010-05-20 23:00:00 1499

转载 各种排序算法的稳定性和时间复杂度小结

选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 冒泡法:  这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:  复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复杂度log2(n)*n,所有内部排

2010-05-20 22:41:00 8286 1

原创 几个嵌入式面试题—自己的经历

一. New 和 Malloc 的区别 1,malloc 与 free 是 C++/C 语言的标准库函数, new/delete 是 C++ 的运算符。它们都可用于申请动态内存和释放内存。 2, 对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于 malloc/free 是库函数而不是运算

2010-05-20 11:54:00 853

腾讯 笔试题面试题 汇总.

腾讯笔试题面试题汇总.我的腾讯之路,希望对大家有所帮助啦

2009-12-04

thinking in Java 第三版(中文版)

这是thinking in Java 第三版(中文版),希望对csdn的网友们有多帮助,大家一起共享资料

2009-12-02

空空如也

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

TA关注的人

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