06 2012 档案

摘要:#include <queue>#include <string>#include <vector>#include <iostream>using namespace std;vector<int> V;struct Node { int len; Node* right; Node* left; Node(int x = 0) : len(x), right(NULL), left(NULL) {}};class Op {public: bool operator()(Node* const lhs, Node* const rh 阅读全文
posted @ 2012-06-29 17:27 byfei 阅读(174) 评论(0) 推荐(0) 编辑
摘要:1.哈夫曼树的基本概念最优二叉树,也称哈夫曼(Haffman)树,是指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。那么什么是二叉树的带权路径长度呢?在前面我们介绍过路径和结点的路径长度的概念,而二叉树的路径长度则是指由根结点到所有叶结点的路径长度之和。如果二叉树中的叶结点都具有一定的权值,则可将这一概念加以推广。设二叉树具有n 个带权值的叶结点,那么从根结点到各个叶结点的路径长度与相应结点权值的乘积之和叫做二叉树的带权路径长度,记为:其中Wk 为第k 个叶结点的权值,Lk 为第k 个叶结点的路径长度。如图6.16 所示的二叉树,它的带权路径长度值WPL=2×2+ 阅读全文
posted @ 2012-06-29 17:26 byfei 阅读(1072) 评论(0) 推荐(0) 编辑
摘要:typedef vector IntArray;IntArray array;array.push_back( 1 );array.push_back( 2 );array.push_back( 2 );array.push_back( 3 );// 删除array数组中所有的2for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor ){if( 2 == *itor ) array.erase( itor );}答:同样有缺少类型参数的问题。另外,每次调用“array.erase( itor );”,被删除元素 阅读全文
posted @ 2012-06-29 16:56 byfei 阅读(127) 评论(0) 推荐(0) 编辑
摘要:以下代码有什么问题? typedef vector IntArray;IntArray array;array.push_back( 1 );array.push_back( 2 );array.push_back( 2 );array.push_back( ... 阅读全文
posted @ 2012-06-29 16:56 byfei 阅读(55) 评论(0) 推荐(0) 编辑
摘要:float a = 1.0f;cout << (int)a << endl;cout << (int&)a << endl;cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?float b = 0.0f;cout << (int)b << endl;cout << (int&)b << endl;cout << boolalpha << ( (in 阅读全文
posted @ 2012-06-29 16:54 byfei 阅读(226) 评论(0) 推荐(0) 编辑
摘要:struct CLS{int m_i;CLS( int i ) : m_i(i) {}CLS(){CLS(0);}};CLS obj;cout << obj.m_i << endl;答:不能。在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。只有在生成对象时,初始化表达式才会随相应的构造函数一起调用。 阅读全文
posted @ 2012-06-29 16:50 byfei 阅读(171) 评论(0) 推荐(0) 编辑
摘要:vector array;array.push_back( 1 );array.push_back( 2 );array.push_back( 3 );for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历array数组{cout << array[i] << endl;}答:首先数组定义有误,应加上类型参数:vector<int> array。其次vector::size_type被定义为unsigned int,即无符号数,这样做为循环变量的i为0时再减1就会变成最大的整数,导致循环 阅读全文
posted @ 2012-06-29 16:47 byfei 阅读(457) 评论(0) 推荐(0) 编辑
摘要:unsigned intconst size1= 2;char str1[ size1 ];unsigned int temp= 0;cin >> temp;unsigned intconst size2= temp;char str2[ size2 ];答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。 阅读全文
posted @ 2012-06-29 16:45 byfei 阅读(232) 评论(0) 推荐(0) 编辑
摘要:sizeof是算符,strlen是函数。 sizeof 求指针类型的数据长度结果都是4 strlen只能用char*做参数,且必须是以''\0''结尾的。 以下代码中的两个sizeof用法有问题吗? void UpperCase(char str[] ... 阅读全文
posted @ 2012-06-29 16:40 byfei 阅读(54) 评论(0) 推荐(0) 编辑
摘要:void UpperCase(char str[] ){for( size_t i=0; i<sizeof(str)/sizeof(str[0]);++i )if( 'a'<=str[i]&& str[i]<='z' )str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout << "str字符长度为: " <<sizeof(str)/sizeof(str[0])<< endl;Upp 阅读全文
posted @ 2012-06-29 16:39 byfei 阅读(408) 评论(0) 推荐(0) 编辑
摘要:char str1[] = "abc";char str2[]= "abc";const char str3[] = "abc";const char str4[] = "abc";const char* str5= "abc";const char* str6= "abc";cout << boolalpha<< ( str1==str2 )<< endl; // 输出什么?cout << boolalpha<< 阅读全文
posted @ 2012-06-29 16:35 byfei 阅读(231) 评论(0) 推荐(0) 编辑
摘要:介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如#define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销 阅读全文
posted @ 2012-06-29 15:04 byfei 阅读(446) 评论(0) 推荐(0) 编辑
摘要:写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。函数接口为:int find_orderk(const int * narry, const int n, const int k) 要求算法复杂度不能是O(n^2) 参考答案:1#include <stdio.h>#include <stdlib.h>#include <time.h>/*************************************** 输入: n:数组元素的个数 阅读全文
posted @ 2012-06-28 20:36 byfei 阅读(987) 评论(0) 推荐(0) 编辑
摘要:1 #include <stdio.h> 2 #include <stdlib.h> 5 char*str1 = "ABDFLjlero我们都是saf";7 char* ToLower(char s[]) 8 { 9 static size_t i=sizeof(s); 10 11 for (i; i>=0; i--) { 12 if (s[i]>"A" && s[i]<"Z") { 13 s[i] += 26; 14 } 15 } 16 return s;}19 int A( 阅读全文
posted @ 2012-06-28 20:33 byfei 阅读(111) 评论(0) 推荐(0) 编辑
摘要:#include #include char* str1 = "ABDFLjlero我们都是saf";char* ToLower(char s[]) { static size_t i=sizeof(s); for (i; i>=0; i-... 阅读全文
posted @ 2012-06-28 20:33 byfei 阅读(48) 评论(0) 推荐(0) 编辑
摘要:#include <stdio.h>#include <string.h>#include <stdarg.h>#include <iostream>using namespace std;int strlen(char *a){if (0 == *a)return 0;elsereturn strlen(++a) + 1;}int main(void){char *p="1234567";cout<<strlen(p);return 0;}int strlen(char *a) { if(0 == *a) ret 阅读全文
posted @ 2012-06-28 20:32 byfei 阅读(178) 评论(0) 推荐(0) 编辑
摘要:国际象棋有8×8格,每个格子可放一个棋子。皇后的规则是可以横、竖、斜移动。在一个棋盘放置8个皇后,并使它们互相无法威胁到彼此。答:以下是可执行C代码,采用非递归解法,你如果想了解皇后问题的算法的详细过程可看下面网址:http://www.cnjcw.cn/infoview/2005031720203563221270.html不过下面的代码是以列优先进行试探的,不是上面网址介绍的那样以行优先的,当然本质是一样的。#include<iostream.h>#defineQUEEN8//皇后数量intqueen[QUEEN];//下标代表所在列号,值代表所在行号,//如quee 阅读全文
posted @ 2012-06-28 20:31 byfei 阅读(288) 评论(0) 推荐(0) 编辑
摘要:#include <iostream>using namespace std;class A{public: A(){ doSth(); } virtual void doSth(){cout<<("I am A");}};class B:public A{public: virtual void doSth(){ cout<<("I am B");}};int main(){B b;return 0;}I am A#include <iostream>using namespace std;class A 阅读全文
posted @ 2012-06-28 20:29 byfei 阅读(175) 评论(0) 推荐(0) 编辑
摘要:已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。(1)不调用C++/C 的字符串库函数,请编写函数 strcat答:VC源码:char * __cdecl strcat (char * dst, const char * src){char * cp = dst;while( *cp )cp++; /* find end of dst */while( *cp++ = *src++ ) ; /* Copy src to end of dst */return 阅读全文
posted @ 2012-06-28 20:26 byfei 阅读(565) 评论(0) 推荐(0) 编辑
摘要:编写strcat函数 已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。(1)不调用C++/C 的字符串库函数,请编写函数 ... 阅读全文
posted @ 2012-06-28 20:26 byfei 阅读(46) 评论(0) 推荐(0) 编辑
摘要:在某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有任何纯虚函数。怎么办?因为抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。 这里是一个例子: class awov { public: virtual ~awov() = 0; // 声明一个纯虚析构函数 }; 这个类有一个纯虚函数,所以它是抽象的,而且它有一个虚析构函数,所以不会产生析构函数问题。但这里还有一件事:必须提供纯虚析构函数的定义: ... 阅读全文
posted @ 2012-06-28 20:14 byfei 阅读(562) 评论(0) 推荐(0) 编辑
摘要:构造函数不能是虚的。只能有虚的析构函数 阅读全文
posted @ 2012-06-28 20:08 byfei 阅读(457) 评论(0) 推荐(0) 编辑
摘要:试题1voidtest1(){charstring[10];char*str1="0123456789";strcpy(string,str1);}试题2voidtest2(){charstring[10],str1[10];inti;for(i=0;i<10;i++){str1[i]='a';}strcpy(string,str1);}试题3voidtest3(char*str1){charstring[10];if(strlen(str1)<=10){strcpy(string,str1);}}试题4: void GetMemory( cha 阅读全文
posted @ 2012-06-28 19:46 byfei 阅读(217) 评论(0) 推荐(0) 编辑
摘要:1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资... 阅读全文
posted @ 2012-06-28 14:12 byfei 阅读(59) 评论(0) 推荐(0) 编辑
摘要:1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:2. TCP短连接我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是cli 阅读全文
posted @ 2012-06-28 14:11 byfei 阅读(137) 评论(0) 推荐(0) 编辑
摘要:volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 简单地说就是防止编译器对代码进行优化.比如如下程序: XBYTE[2]=0x55; XBYTE[2]=0x56; XBYTE[2]=0x57; XBYTE[2]=0x58; 如果对外部硬件上述四条语句分别表示不同的操作,会产生四种不同的动作,那么编译器就不能像对待纯粹的程序那样对上述四条语句进行优化只认为XBYTE[2]=0x58;而忽略前三条语句(即只产生一条机器代码),此时编译器会逐一的进行编译并产生相应的机器代码(四条).volatile一般使用的地方 一般说来,volat... 阅读全文
posted @ 2012-06-28 11:41 byfei 阅读(186) 评论(0) 推荐(0) 编辑
摘要:关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。static_cast用法:static_cast < type-id > ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 阅读全文
posted @ 2012-06-28 11:32 byfei 阅读(394) 评论(0) 推荐(0) 编辑
摘要:#include <iostream>using namespace std;typedef struct _A{char c;int i;} A;typedef struct _B{A a;double d;} B;typedef struct _C{A a;char c;} C;int main(void){cout << sizeof(A) << endl;cout << sizeof(B) << endl;cout << sizeof(C) << endl;return 0;}816 12 阅读全文
posted @ 2012-06-28 11:22 byfei 阅读(112) 评论(0) 推荐(0) 编辑
摘要:#include <stdio.h>#include <string.h>#include <stdarg.h>#include <iostream>using namespace std;//函数原型声明,至少需要一个确定的参数,注意括号内的省略号int demo(char *msg, ...){va_list argp; // 定义保存函数参数的结构int argno = 0; // 纪录参数个数char *para; //存放取出的字符串参数va_start(argp, msg);while (1){para = va_arg( argp, 阅读全文
posted @ 2012-06-28 11:17 byfei 阅读(288) 评论(0) 推荐(0) 编辑
摘要:#include <iostream>using namespace std;struct A{A(){std::cout << "A";}};struct B: public A{B(){std::cout << "B";}};struct C{C(){std::cout << "C";}B b;A a;};int main(){C c;return 0;}ABAC 阅读全文
posted @ 2012-06-28 10:59 byfei 阅读(127) 评论(0) 推荐(0) 编辑
摘要:const int MINNUMBER = -32767 ;int find_sec_max( int data[] , int count){int maxnumber = data[0] ;int sec_max = MINNUMBER ;for ( int i = 1 ; i < count ; i++){if ( data[i] > maxnumber ){sec_max = maxnumber ;maxnumber = data[i] ;}else{if ( data[i] > sec_max )sec_max = data[i] ;}}return sec_max 阅读全文
posted @ 2012-06-27 19:50 byfei 阅读(350) 评论(0) 推荐(0) 编辑
摘要:#ifdef __cpluspluscout<<"c++";#elsecout<<"c";#endif 阅读全文
posted @ 2012-06-27 19:47 byfei 阅读(158) 评论(0) 推荐(0) 编辑
摘要:a.成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类 阅读全文
posted @ 2012-06-27 19:45 byfei 阅读(125) 评论(0) 推荐(0) 编辑
摘要:数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。(1)修改内容上的差别char a[] = “hello”;a[0] = ‘X’;char *p = “world”; // 注意p 指向常量字符串p[0] = ‘X’; // 编译器不能发现该错误,运行时错误(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。char 阅读全文
posted @ 2012-06-27 19:42 byfei 阅读(145) 评论(0) 推荐(0) 编辑
摘要:class String{public:String(const char *str ); // 通用构造函数String(const String &another); // 拷贝构造函数~ String(); // 析构函数String & operater =(const String &rhs); // 赋值函数private:char *m_data; // 用于保存字符串};尝试写出类的成员函数实现。答案:String::String(const char *str){if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步 阅读全文
posted @ 2012-06-27 19:27 byfei 阅读(86) 评论(0) 推荐(0) 编辑
摘要:1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。 阅读全文
posted @ 2012-06-27 19:22 byfei 阅读(149) 评论(0) 推荐(0) 编辑
摘要:引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引用可以指向它的派生类实例。例4Class A; Class B : Class A{...}; B b; A& ref = b; 阅读全文
posted @ 2012-06-27 19:19 byfei 阅读(238) 评论(0) 推荐(0) 编辑
摘要:int a ;const int &ra=a;ra=1; //错误a=1; //正确例2string foo( );void bar(string & s);那么下面的表达式将是非法的:bar(foo( ));bar("hello world");原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。引用型参数应该在能被定义为const的情况下,尽量定义为const 。 阅读全文
posted @ 2012-06-27 19:14 byfei 阅读(129) 评论(0) 推荐(0) 编辑
摘要:int func(x){int countx = 0;while(x){countx ++;x = x&(x-1);}return countx;} 假定x = 9999。 答案:8 阅读全文
posted @ 2012-06-27 19:09 byfei 阅读(158) 评论(0) 推荐(0) 编辑
摘要:Node * MergeRecursive(Node *head1 , Node *head2){if ( head1 == NULL )return head2 ;if ( head2 == NULL)return head1 ;Node *head = NULL ;if ( head1->data < head2->data ){head = head1 ;head->next = MergeRecursive(head1->next,head2);}else{head = head2 ;head->next = MergeRecursive(head1 阅读全文
posted @ 2012-06-27 19:02 byfei 阅读(801) 评论(0) 推荐(0) 编辑
摘要:Node * Merge(Node *head1 , Node *head2){if ( head1 == NULL)return head2 ;if ( head2 == NULL)return head1 ;Node *head = NULL ;Node *p1 = NULL;Node *p2 = NULL;if ( head1->data < head2->data ){head = head1 ;p1 = head1->next;p2 = head2 ;}else{head = head2 ;p2 = head2->next ;p1 = head1 ;}N 阅读全文
posted @ 2012-06-27 18:59 byfei 阅读(485) 评论(0) 推荐(0) 编辑
摘要:#include <iostream>using namespace std;struct Node{ int nData; Node * pNext;};Node *CreateList(Node* pHead){ Node * pTemp; for(int i = 1;i<10;i++) { pTemp = new Node(); pTemp->nData = i; pTemp->pNext = pHead; pHead = pTemp; } return pHead;}Node *ReverseList(Node* pHead){ Node* p1 = pH 阅读全文
posted @ 2012-06-27 18:55 byfei 阅读(138) 评论(0) 推荐(0) 编辑
摘要:typedef map<int, int> templatemap;templatemap AllScoreSort; for(int i=10000;i<10010;i++) AllScoreSort[i]=i+1; for (templatemap::iterator iter = AllScoreSort.begin(); iter!= AllScoreSort.end(); iter++){int nRoleID = iter->first;int nScore = iter->second;if (10005 < nRoleID){//AllSco 阅读全文
posted @ 2012-06-21 16:42 byfei 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2012-06-20 14:48 byfei 阅读(102) 评论(0) 推荐(0) 编辑
摘要:如何让new操作符不分配内存,只调用构造函数 收藏问题:c++中的new操作符 通常完成两个工作 分配内存及调用相应的构造出世核函数。请问:1)如何让new操作符不分配内存,只调用构造函数?2) 这样的用法有什么用?解答:(要求new显式调用构造函数,但不分配内存。)题目要求不能生成内存 还要调用构造函数 说明这个类里面没有对内部操作 但可以对外部操作 比如static的数摘录:如果我是用new分配对象的,可以显式调用析构函数吗?可能不行。除非你使用定位放置 new.class Fred{public: Fred() { cout<<"fuck"; } };in 阅读全文
posted @ 2012-06-19 20:40 byfei 阅读(186) 评论(0) 推荐(0) 编辑
摘要:内存地址要对齐。。结构体每个保存都是按照最长的定义类型来的。字节对齐的细节和编译器实现相关,但一般而言,满足三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是最宽基本类型成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。 阅读全文
posted @ 2012-06-19 20:33 byfei 阅读(179) 评论(0) 推荐(0) 编辑
摘要:NP问题 http://baike.baidu.com/view/158424.htmNP完全问题 http://baike.baidu.com/view/272414.htm 阅读全文
posted @ 2012-06-19 20:26 byfei 阅读(108) 评论(0) 推荐(0) 编辑
摘要:通常有两类方法处理冲突:开放定址(Open Addressing)法和拉链(Chaining)法。前者是将所有结点均存放在散列表T[0..m-1]中;后者通常是将互为同义词的结点链成一个单链表,而将此链表的头指针放在散列表T[0..m-1]中。1、开放定址法(1)开放地址法解决冲突的方法 用开放定址法解决冲突的做法是:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探查到开放的 地址则表明表中无待. 阅读全文
posted @ 2012-06-19 20:11 byfei 阅读(689) 评论(0) 推荐(0) 编辑
摘要:常用的排序算法的时间复杂度和空间复杂度排序法 最差时间分析平均时间复杂度 稳定度 空间复杂度 冒泡排序O(n2)O(n2)稳定 O(1) 快速排序O(n2)O(n*log2n)不稳定 O(log2n)~O(n)选择排序O(n2)O(n2)不稳定 O(1) 二叉树排序O(n2)O(n*log2n)不一顶 O(n) 插入排序 O(n2)O(n2)稳定 O(1) 堆排序O(n*log2n) O(n*log2n)不稳定 O(1) 希尔排序OO 不稳定 O(1)1、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上 阅读全文
posted @ 2012-06-19 20:03 byfei 阅读(151) 评论(0) 推荐(0) 编辑
摘要:内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。 程序讲究的是高内聚,低耦合。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却要不那么紧密。 内聚和耦合是密切相关的,同其他模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。在进行软件设计时,应力争做到高内聚,低耦合。 阅读全文
posted @ 2012-06-19 19:58 byfei 阅读(202) 评论(0) 推荐(0) 编辑
摘要:1.配置DNS:修改 /etc/resolv.conf 文件,添加如下代码:nameserver202.96.128.166nameserver202.96.134.1332.配置固定IP地址:修改 /etc/sysconfig/network-scripts/ifcfg-eth0 文件,该文件全部代码如下(注意:具体写的时候就不要加如下中文注释):DEVICE=eth0#网卡代号,需要ifcfg-eth0想对应HWADDR=00:0c:29:97:70:f9 #网卡地址BOOTPROT=static#开机协议,有dhcp及staticIPADDR=192.168.1.188 #IP(... 阅读全文
posted @ 2012-06-01 16:16 byfei 阅读(339) 评论(0) 推荐(0) 编辑