//队列结点数 QueueLink Queue[10]; for( i = 0; i < 10; i++) {
CreateNullQueue( Queue[i]); //初始化队列数组 }
for( i = 0; i < LEN; i++) {
printf(\}
printf(\
Max = lenData( Array, LEN ); //计算数组中关键字的最大位数 printf(\18
for(int j = 0; j < Max; j++) //按位排序 {
if(j == 0) power = 1; else power = power *d; for(i = 0; i < LEN; i++) {
k = Array[i].data /power - (Array[i].data/(power * d)) * d; Push( Queue[k], Array[i] );
}
for(int l = 0, k = 0; l < d; l++) //排序后出队列重入数组 {
while( IsEmpty( Queue[l] ) ) {
Array[k++] = Pop( Queue[l] ); } }
for( int t = 0; t < LEN; t++) {
printf(\}
printf(\} return 0; }
说明:队列为基数排序的实现提供了很大的方便,适当的数据机构可以减少算法的复杂度,让更多
的算法实现更容易。 面试题 29:谈谈你对编程规范的理解或认识 编程规范可总结为:程序的可行性,可读性、可移植性以及可测试性。 说明: 这是编程规范的总纲目,面试者不一定要去背诵上面给出的那几个例子,应该去理解这几个
例子说明的问题,想一想,自己如何解决可行性、可读性、可移植性以及可测试性这几个问题,结合以
上几个例子和自己平时的编程习惯来回答这个问题。 面试题 30: short i = 0; i = i + 1L;这两句有错吗 代码一是错的,代码二是正确的。
说明:在数据安全的情况下大类型的数据向小类型的数据转换一定要显示的强制类型转换。 面试题 31: &&和&、 ||和|有什么区别 ( 1)&和|对操作数进行求值运算,&&和||只是判断逻辑关系。 19
( 2)&&和||在在判断左侧操作数就能确定结果的情况下就不再对右侧操作数求值。
注意:在编程的时候有些时候将&&或||替换成&或|没有出错,但是其逻辑是错误的,可能会导致不
可预想的后果(比如当两个操作数一个是 1 另一个是 2 时)。 面试题 32: C++的引用和 C 语言的指针有什么区别 指针和引用主要有以下区别:
( 1)引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配 存储空间。
( 2)引用初始化以后不能被改变,指针可以改变所指的对象。 ( 3)不存在指向空值的引用,但是存在指向空值的指针。 注意:引用作为函数参数时,会引发一定的问题,因为让引用作参数,
目的就是想改变这个引用所
指向地址的内容,而函数调用时传入的是实参,看不出函数的参数是正常变量,还是引用,因此可能会 引发错误。所以使用时一定要小心谨慎。
面试题 33: 在二元树中找出和为某一值的所有路径
输入一个整数和一棵二元树。从树的根结点开始往下访问,一直到叶结点所经过的所有结点形成一
条路径。打印出和与输入整数相等的所有路径。例如,输入整数 9 和如下二元树: 3 / \\ 2 6 / \\ 5 4
则打印出两条路径: 3, 6 和 3, 2, 4。 【答案】 typedef struct path {
BiTNode* tree; //结点数据成员 struct path* next; //结点指针成员 }PATH,*pPath; 初始化树的结点栈:
void init_path( pPath* L ) {
*L = ( pPath )malloc( sizeof( PATH ) ); //创建空树 ( *L )->next = NULL; }
树结点入栈函数:
void push_path(pPath H, pBTree T) {
pPath p = H->next; pPath q = H; while( NULL != p ) 20 { q = p; p = p->next; }
p = ( pPath )malloc( sizeof( PATH ) ); //申请新结点 p->next = NULL; //初始化新结点 p->tree = T;
q->next = p; //新结点入栈 }
树结点打印函数:
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C和C++经典面试题(面试必备)(8)在线全文阅读。
相关推荐: