网上收集的c/c++的笔试题,将部分整理成节,上传后大家方便。不是很全,但是可以作为笔试的参考吧。
现先进先出,无论多少个连在一起都是先进先出,而无法实现先进后出。
面试题23:计算一颗二叉树的深度
深度的计算函数: int depth(BiTree T) { if(!T) return 0; //判断当前结点是否为叶子结点 11
int d1= depth(T->lchild); //求当前结点的左孩子树的深度 int d2= depth(T->rchild); //求当前结点的右孩子树的深度 return (d1>d2?d1:d2)+1; } 注意:根据二叉树的结构特点,很多算法都可以用递归算法来实现。
面试题24:编码实现直接插入排序
直接插入排序编程实现如下: #include<iostream.h> void main( void ) { int ARRAY[10] = { 0, 6, 3, 2, 7, 5, 4, 9, 1, 8 }; int i,j; for( i = 0; i < 10; i++) { cout<<ARRAY<<” “; } cout<<endl; for( i = 2; i <= 10; i++ ) //将ARRAY[2], ,ARRAY[n]依次按序插入 { if(ARRAY < ARRAY[i-1]) //如果ARRAY大于一切有序的数值, //ARRAY将保持原位不动 { ARRAY[0] = ARRAY; //将ARRAY[0]看做是哨兵,是ARRAY的副本 j = i – 1; do{ //从右向左在有序区ARRAY[1..i-1]中 //查找ARRAY的插入位置 ARRAY[j+1] = ARRAY[j]; //将数值大于ARRAY记录后移 j– ; }while( ARRAY[0] < ARRAY[j] ); ARRAY[j+1]=ARRAY[0]; //ARRAY插入到正确的位置上 } } for( i = 0; i < 10; i++) { cout<<ARRAY<<” “; } cout<<endl; } 12 注意:所有为简化边界条件而引入的附加结点(元素)均可称为哨兵。引入哨兵后使得查找循环条件的时间大约减少了一半,对于记录数较大的文件节约的时间就相当可观。类似于排序这样使用频率非常高的算法,要尽可能地减少其运行时间。所以不能把上述算法中的哨兵视为雕虫小技。 面试题25:编码实现冒泡排序
冒泡排序编程实现如下: #include <stdio.h> #define LEN 10 //数组长度 void main( void ) { int ARRAY[10] = { 0,
6, 3, 2, 7, 5, 4, 9, 1, 8 }; //待排序数组 printf( “\n” ); for( int a = 0; a < LEN; a++ ) //打印数组内容 { printf( “%d “, ARRAY[a] ); } int i = 0; int j = 0; bool isChange; //设定交换标志 for( i = 1; i < LEN; i++ ) { //最多做LEN-1趟排序 isChange = 0; //本趟排序开始前,交换标志应为假 for( j = LEN-1; j >= i; j– ) //对当前无序区ARRAY[i..LEN]自下向上扫描 { if( ARRAY[j+1] < ARRAY[j] ) { //交换记录 ARRAY[0] = ARRAY[j+1]; //ARRAY[0]不是哨兵,仅做暂存单元 ARRAY[j+1] = ARRAY[j]; ARRAY[j] = ARRAY[0]; isChange = 1; //发生了交换,故将交换标志置为真 } } printf( “\n” ); for( a = 0; a < LEN; a++) //打印本次排序后数组内容 { printf( “%d “, ARRAY[a] ); } if( !isChange ) //本趟排序未发生交换,提前终止算法 { break; } } printf( “\n” ); return; } 13
面试题26:编码实现直接选择排序 #include”stdio.h” #define LEN 9 void main( void ) { int ARRAY[LEN]={ 5, 6, 8, 2, 4, 1, 9, 3, 7 }; //待序数组 printf(“Before sorted:\n”); for( int m = 0; m < LEN; m++ ) //打印排序前数组 { printf( “%d “, ARRAY
); } for (int i = 1; i <= LEN – 1; i++) //选择排序 { int t = i – 1; int temp = 0; for (int j = i; j < LEN; j++) { if (ARRAY[j] < ARRAY[t]) { t = j; } } if (t != (i – 1)) { temp = ARRAY[i - 1]; ARRAY[i - 1] = ARRAY[t]; ARRAY[t] = temp; } } printf( “\n” ); printf(“After sorted:\n”); for( i = 0; i < LEN; i++ ) //打印排序后数组 { printf( “%d “, ARRAY ); } printf( “\n” ); }
注意:在直接选择排序中,具有相同关键码的对象可能会颠倒次序,因而直接选择排序算法是一种不稳定的排序方法。在本例中只是例举了简单的整形数组排序,肯定不会有
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库部分c、c++笔试题集锦(10)在线全文阅读。
相关推荐: