题目转载:点击打开链接
题目:用两个栈实现队列
思路:假设两个栈A和B且都为空,可以认为A提供入队列的功能,B提供出队列的功能。入队列:入栈A。出队列:如果B不为空,则直接弹出栈B的数据,如果栈B为空,则依次弹出栈A的数据,放到栈B中,再弹出栈B的数据。
#include<stdafx.h>
#include<iostream>
#include <stack>
using namespace std;
template<class T> class Myqueue
{
public:
Myqueue(){}
~Myqueue(){}
void pushback(T t);
T front();
void popfront();
private:
stack<T> A;
stack<T> B;
};
template<class T> void Myqueue<T>::pushback(T t)
{
A.push(t);
}
template<class T> T Myqueue<T>::front()
{
if(B.empty())
{
while(!A.empty())
{
B.push(A.top());
A.pop();
}
}
return B.top();
}
template<class T> void Myqueue<T>::popfront()
{
if(B.empty())
{
while(!A.empty())
{
B.push(A.top());
A.pop();
}
}
B.pop();
}
void main()
{
Myqueue<int> q;
for(int i=0;i<10;i++)
q.pushback(i);
for(int j=0;j<10;j++)
{
cout<<q.front()<<endl;
q.popfront();
}
}
2.
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。
分析:这道题看起来不难,但考虑全面了也不容易,需要考虑一些特殊情况
1、输入的字符指针为空
2、出现了非数字的字符
3、输入的字符转换为数字后超过int表示的最大数
4、输入的字符中数字前面有正负号
点评:题目简单,但是HR考察的是应聘人员思维角度,还有考虑问题的全面度,得从平时积累!
每天进步一点点
// ab.cpp : 定义控制台应用程序的入口点。
#include<stdafx.h>
#include<stdio.h>
#include <iostream>
#include <limits>
using namespace std;
#define VALID 1
#define INVALID 0
int state=INVALID;
int ChangeStringToNumbers(const char *str)
{
state=INVALID;
if(str==NULL)
return 0;
else
{
long long num=0;//VC6.0下long long不可以
int minus=0;
if(*str=='+')
str++;
else if(*str=='-')
{
minus=1;
str++;
}
while(*str!='\0')
{
if(*str<='9'&&*str>='0')
{
num=num*10+(*str-'0');
if(num>numeric_limits<int>::max())
{
num=0;
return 0;
}
}
else
{
num=0;
return 0;
}
str++;
}
if(minus==1)
num=0-num;
state=VALID;
return num;
}
}
int main()
{
cout<<ChangeStringToNumbers("123")<<endl;//正常输入
cout<<state<<endl;
cout<<ChangeStringToNumbers("-123")<<endl;//带负号
cout<<state<<endl;
cout<<ChangeStringToNumbers("+123")<<endl;//带正号
cout<<state<<endl;
cout<<ChangeStringToNumbers(NULL)<<endl;//空
cout<<state<<endl;
cout<<ChangeStringToNumbers("12f3")<<endl;//有其他字符
cout<<state<<endl;
cout<<ChangeStringToNumbers("2147483649")<<endl;//越界
cout<<state<<endl;
return 0;
}