C++经典面试题(十)
2015-06-27 16:10
513 查看
最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。
一是从来没有这个意识,二是没有认真的梳理下。
下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯!
91.输入一个字符串,将其逆序后输出 。
【参考答案】
还有第二种
92.编写一个算法frequency,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数据来验证这个算法。
93.假设以数组Q[m]存放循环队列中的元素, 同时以rear和length分别指示环形队列中的队尾位置和队列中所含元素的个数。试给出该循环队列的队空条件和队满条件, 并写出相应的插入(enqueue)和删除(dlqueue)元素的操作。
【参考答案】循环队列类定义
未完。。。待续(*^_v_^*)
一是从来没有这个意识,二是没有认真的梳理下。
下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯!
91.输入一个字符串,将其逆序后输出 。
【参考答案】
还有第二种
92.编写一个算法frequency,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数据来验证这个算法。
void frequency( String& s, char& A[ ], int& C[ ], int &k ) { int i, j, len = s.length( ); if ( !len ) { cout << "The string is empty. " << endl; k = 0; return; } else { A[0] = s[0]; C[0] = 1; k = 1; /*语句s[i]是串的重载操作*/ for ( i = 1; i < len; i++ ) C[i] = 0; /*初始化*/ for ( i = 1; i < len; i++ ) { /*检测串中所有字符*/ j = 0; while ( j < k && A[j] != s[i] ) j++; /*检查s[i]是否已在A[ ]中*/ if ( j == k ) { A[k] = s[i]; /*s[i]从未检测过*/ C[k]++; k++ } else C[j]++; /*s[i]已经检测过*/ } } }
93.假设以数组Q[m]存放循环队列中的元素, 同时以rear和length分别指示环形队列中的队尾位置和队列中所含元素的个数。试给出该循环队列的队空条件和队满条件, 并写出相应的插入(enqueue)和删除(dlqueue)元素的操作。
【参考答案】循环队列类定义
#include <assert.h> template <class Type> class Queue { //循环队列的类定义 public: Queue ( int=10 ); ~Queue ( ) { delete [ ] elements; } void EnQueue ( Type & item ); Type DeQueue ( ); Type GetFront ( ); void MakeEmpty ( ) { length = 0; } //置空队列 int IsEmpty ( ) const { return length == 0; } //判队列空否 int IsFull ( ) const { return length == maxSize; } //判队列满否 private: int rear, length; //队尾指针和队列长度 Type *elements; //存放队列元素的数组 int maxSize; //队列最大可容纳元素个数 };
template <class Type> Queue<Type>:: Queue ( int sz ) : rear (maxSize-1), length (0), maxSize (sz) {//建立一个最大具有maxSize个元素的空队列。 elements = new Type[maxSize]; //创建队列空间 assert ( elements != 0 ); //断言: 动态存储分配成功与否 } template<class Type> void Queue<Type> :: EnQueue ( Type &item ) { assert ( ! IsFull ( ) ); //判队列是否不满,满则出错处理 length++; //长度加1 rear = ( rear +1) % maxSize; //队尾位置进1 elements[rear] = item; //进队列 } template<class Type> Type Queue<Type> :: DeQueue ( ) { assert ( ! IsEmpty ( ) ); //判断队列是否不空,空则出错处理 length--; //队列长度减1 return elements[(rear-length+maxSize) % maxSize]; //返回原队头元素值 } template<class Type> Type Queue<Type> :: GetFront ( ) { assert ( ! IsEmpty ( ) ); return elements[(rear-length+1+maxSize) % maxSize]; //返回队头元素值 }
未完。。。待续(*^_v_^*)