一、简答
1.不用中间变量交换两个变量a、b的值。
void exchang(void *a , void *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
//or *b = (*a+*b)-(*a = *b )
}//这种方法在计算*a+*b时有溢出的危险
Or
void exchang(void *a , void *b)
{
*a = *a^*b;
*b = *a^*b;
*a = *a^*b;
}
2.static全局变量和普通全局变量什么区别?static局部变量和普通局部变量什么区别?static函数和普通函数什么区别?
//C语言中,从作用域和作用时间(由存储区域决定)考虑
static全局变量作用域为定义该变量的文件,普通全局变量为整个工程,只要在使用它的其他文件中做出声明:externtype var。
作用时间相同,都是整个工程的运行阶段。-都存于静态变量区
static局部变量作用域为定义该变量的函数,普通局部变量与之相同。
作用时间为整个工程,并不会随该函数的结束而释放。-存储于静态变量区
普通局部变量定义该变量的函数结束后被释放。-存储于栈中
static函数和普通函数的区别在于static函数不能被除了定义它的文件以外的文件访问,因此可以出现重名。
详细参考:http://blog.sina.com.cn/s/blog_604afbb00100rrlr.html
3.删除一个双向量链表节点。
二、算法
1.写一个atoi函数
int atoi( const char *str)
{
assert( NULL != str);
int num = 0;
int SIGNAL = 1;
if( *str == '+' )
{
++str;
}
else if( *str == '-')
{
++str;
SIGNAL = -1;
}
while(*str<='9' && *str>='0')
{
num = num*10 + (num-'0');
}
return SIGNAL*num;
}
2.写一个二叉树广度优先的遍历算法
3.对一个有序的集合,写一个二分法查找的算法,分别用递归和非递归实现。