摘要: 单链表在不知道链表长度的前提下求链表中间节点的值。思路:分以下几种情况:1) 链表为空;2) 链表非空,但仅有一个或两个节点;可以直接返回第一个节点的元素值。3) 链表非空,但含有三个或三个以上的节点,可以通过定义两个指针,一个指针的跳步为2次的时候,另一个指针的跳步为1次,当跳至结尾时,另一个节点恰好在中间位置。具体程序中考虑了长度为奇偶时应该怎么做?将循环条件while(head->next!=NULL && head->next->next!=NULL)改为while(head->next!=NULL ) 阅读全文
posted @ 2013-07-23 16:27 sunnie_ 阅读(380) 评论(0) 推荐(0) 编辑
摘要: //delete headnode *del_head(node *head){node *p4;p4=head;head=head->next;free(p4);return head;} 阅读全文
posted @ 2013-07-23 16:18 sunnie_ 阅读(240) 评论(0) 推荐(0) 编辑
摘要: typedef与结构结合使用typedef struct tagMyStruct{int iNum;long lLength;} MyStruct;这语句实际上完成两个操作:1) 定义一个新的结构类型struct tagMyStruct{int iNum;long lLength;};分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct关键字和tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName 阅读全文
posted @ 2013-07-23 13:02 sunnie_ 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 作为一个菜鸟,今天终于搞懂了怎么样创建多文件项目,呵呵,mark一下。首先创建一个自定义的头文件,将想要通用、常用的函数在该头文件中声明。然后创建头文件同名的。c文件。在其中定义在头文件中声明的函数。然后在源 .c 文件中编写主程序。 阅读全文
posted @ 2013-07-23 11:13 sunnie_ 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 找错1. Void test1() { char string[10]; char* str1=”0123456789”; strcpy(string, str1); }Void test2() { char string[10], str1[10]; for(I=0; I<10;I++) { str1[i] =’a’; } strcpy(string, str1); }Void test3(char* str1) { char string[10]; if(strlen(str1)<=10) { strcpy(string, str1); } }test 1 这里string数组 阅读全文
posted @ 2013-07-21 19:26 sunnie_ 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 解析用蓝色字体1. 指针在任何情况下都可进行>, =, <=, = =运算。(错误 ) 指针是无符号数,当它与负数比较时,可能会得到相反的结果2. switch(c) 语句中c可以是int ,long,char ,float ,unsigned int 类型。(F) 错,不能用实形3.#define print(x) printf("the no, "#x",is ")。(T) 在主函数中出现print(x) 就代替这一语句printf(”the no, ”#x”,is ”) 也就是凡是出现print(x) 的地方都用printf(”the no, ”#x”,is ”)这一语句代替 阅读全文
posted @ 2013-07-21 16:46 sunnie_ 阅读(347) 评论(0) 推荐(0) 编辑
摘要: new操作符的另一种变体——placement new操作符,让你能够指定要使用的位置。 要使用布局new特性时,需要包含头文件new。 eg:#includechar buffer[50];int main(){ char * p1, * p2;p1=new int[20];p2=new (buffer) int [20];}布局new操作符使用传递给他的地址,它不跟踪哪些内存单元已经被使用,也不查找未使用的内存块。delete只能用于删除由new操作符分配的堆内存,而不能处理布局new操作符分配的静态内存。 阅读全文
posted @ 2013-07-19 17:13 sunnie_ 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 内容包括: 单独编译;存储持续性、作用域和链接性;布局(placement)new 操作符;名称空间。C++允许甚至鼓励程序员将组件函数放在独立的文件中。与其将结构声明加入到每一个文件中,不如将其放在头文件中,然后在每一个源代码文件中包含该头文件,这样,要修改结构声明时,只需在头文件中做一次改动即可。头文件中长包含的内容有:函数原型;使用#define或者const定义的符号常量;结构声明;类声明;模板声明;内联函数。当包含用户自己创建的头文件时,使用双引号包含文件名,从而与标准头文件的尖括号区别。eg:"coordin.h",而不是.在同一个文件中只能将同一个头文件包含一 阅读全文
posted @ 2013-07-19 17:03 sunnie_ 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 函数模板:是通用的函数描述,也就是说,他们使用通用类型来定义函数,其中的通用类型可用具体类型替换。通过将类型作为参数传递给模板,可使编译器生成该类型函数。函数模板允许以任意类型的方式来定义函数,例如:Templatevoid Swap (Any & a, Any & b){具体定义}最新的c++标准使用typename 替代 class。如果考虑向后兼容的话用class比较好。 使用函数Swap()时,编译器将检查所使用的参数类型,并生成相应的函数。注意:函数模板不恩能够缩短可执行程序。最终的代码不包含任何模板,而只包含了微程序生成的实际函数。使用模板的好处:它使生成多个函数定 阅读全文
posted @ 2013-07-19 12:18 sunnie_ 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 默认参数: 当函数调用中省略了实参时自动使用的一个值。 极大地提高了函数的灵活性。 当参数重新给出使,给定的值会覆盖默认参数,从而不影响函数的正常使用。由于编译器通过查看函数原型来了解函数所使用的参数数目,因此函数原型也必须将可能的默认参数告知程序。 注意:在原型/声明时指定默认参数,而在函数定义是不能指定默认参数。 eg: char * left (const char * str, int n=1); 对于带参数列表的函数,必须从右向左添加默认值,也就是说,要为某个参数设置默认值,则必须为它右边的所有参数提供默认值:eg: int harpo (int n, int m=4, int j= 阅读全文
posted @ 2013-07-18 20:27 sunnie_ 阅读(231) 评论(1) 推荐(0) 编辑