微软的22道数据结构算法面试题

来源:微软认证    发布时间:2012-11-08    微软认证视频    评论

  5、输入一个字符串,输出长型整数。

  1   long   atol(char   *str){

  2         char   *p   =   str;

  3         long   l=1;m=0;

  4         if   (*p=='-')   {

  5                 l=-1;

  6                 ++p;

  7         }

  8         while(isDigit(*p)){

  9                 m   =   m*10   +   p;

  10                 ++p;

  11         }

  12         if(!p)   return   m*l;

  13         else   return   error;

  14}

  6、判断一个链表是否有循环。

  1       int     isLoop(List   l)     {

  2             if   (   !   l)     return       -   1   ;

  3           List   s     =     l.next;

  4               while   (s     &&     s   !=   l)       {

  5                   s     =     s.next;

  6           }

  7             if     (   !   s)     return       -   1   ;

  8             else     reutrn     1   ;

  9   }

  -----------

  1int   isLoop(List   l){

  2         if(!l)   return   0;

  3         p=l.next;

  4         wihle(p!=l&&p!=null)   {

  5                 l.next=l;

  6                 l=p;p=p.next;

  7         }

  8         if(p=l)   return   1;

  9         return   0;

  10}

  实际上,在我的面试过程中,还问到了不破坏结构的其他算法。

  我的答案是从链表头开始遍历,如果节点next指针指向自身,则循环存在;否则将next指针指向自身,遍历下一个节点。直至next指针为空,此时链表无循环。

  7、反转一个字符串。

  1       void     reverse(   char       *   str)     {

  2             char     tmp;

  3             int     len;

  4           len     =     strlen(str);

  5               for   (   int     i   =   0   ;i   <   len   /   2   ;   ++   i)     {

  6                   tmp   =   char   [i];

  7                   str[i]     =     str[len   -   i   -   1   ];

  8                   str[len   -   i   -   1   ]   =   tmp;

  9           }

  10   }

  8、实现strstr函数。

  1int   strstr(char[]   str,   char[]   par){

  2         int   i=0;

  3         int   j=0;

  4         while(str[i]   &&   str[j]){

  5                 if(str[i]==par[j]){

  6                         ++i;

  7                         ++j;

  8                 }else{

  9                         i=i-j+1;

  10                         j=0;

  11                 }

  12         }

  13         if(!str[j])   return   i-strlen(par);

  14         else   return   -1;

  15}

  9、实现strcmp函数。

  1int   strcmp(char*   str1,   char*   str2){

  2         while(*str1   &&   *str2   &&   *str1==*str2){

  3                 ++str1;

  4                 ++str2;

  5         }

  6         return   *str1-*str2;

  7}

  10、求一个整形中1的位数。

  1       int     f(   int     x)     {

  2             int     n   =   0   ;

  3               while   (x)     {

  4                     ++   n;

  5                   x   &=   x   -   1   ;

  6           }

  7             return     n;

  8   }

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答