面试题(数据结构)

来源:互联网 发布:淘宝3c认证没有怎么弄 编辑:程序博客网 时间:2024/05/01 22:25

题目转载:点击打开链接

题目:用两个栈实现队列

思路:假设两个栈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;       } 


原创粉丝点击