C++经典面试题(十)

来源:互联网 发布:java方法覆盖 编辑:程序博客网 时间:2024/06/05 00:22

最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。

一是从来没有这个意识,二是没有认真的梳理下。

下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯!


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++;//长度加1rear = ( rear +1) % maxSize;//队尾位置进1elements[rear] = item;//进队列}template<class Type> Type Queue<Type> :: DeQueue ( ) {assert ( ! IsEmpty ( ) ); //判断队列是否不空,空则出错处理length--;//队列长度减1return elements[(rear-length+maxSize) % maxSize];//返回原队头元素值}template<class Type> Type Queue<Type> :: GetFront ( ) {assert ( ! IsEmpty ( ) );return elements[(rear-length+1+maxSize) % maxSize];//返回队头元素值}




未完。。。待续(*^_v_^*)






1 0
原创粉丝点击