微軟的22道資料結構演算法面試題(含答案)

2021-06-06 04:35:40 字數 4255 閱讀 9601

1、反轉乙個鍊錶。迴圈演算法。

1     list   reverse(list   l)     

13     return   tmp;  

14   }  

2、反轉乙個鍊錶。遞迴演算法。

1     list   resverse(list   l)     

8     return   n;  

9   }  

3、廣度優先遍歷二叉樹。

1     void   bst(tree   t)     

11   }  

----------------------  

1class   node     

5class   queue      else     

17     }  

18     public   tree   deque()      else     

26}  

4

、輸出乙個字串所有排列。注意有重複字元。

1char   p;  

2void   perm(char   s,   int   i,  int   n)  

8         while(isdigit(*p))  

12         if(!p)   return   m*l;  

13         else   return   error;  

14}  

6

、判斷乙個鍊錶是否有迴圈。

1       int     isloop(list   l)        

7             if     (   !  s)     return       -   1   ;  

8             else     reutrn    1   ;  

9   }    

-----------  

1int   isloop(list   l)  

8         if(p=l)   return   1; 

9         return   0;  

10}  

實際上,在我的面試過程中,還問到了不破壞結構的其他演算法。

我的答案是從煉表頭開始遍歷,如果節點

next

指標指向自身,則迴圈存在;否則將

next

指標指向自身,遍歷下乙個節點。直至

next

指標為空,此時鍊錶無迴圈。

7

、反轉乙個字串。

1       void     reverse(   char      *   str)         

10   }    

8

、實現strstr

函式。

1int   strstr(char   str,   char   par)else  

12         }  

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

14         else   return   -1;  

15}

9

、實現strcmp

函式。

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

6         return   *str1-*str2;  

7}  

10

、求乙個整形中

1的位數。

1       int     f(   int     x)        

7             return     n; 

8   }    

11、漢諾塔問題。

1void   tower(n,x,y,z)  

8}  

12

、三柱漢諾塔最小步數。

1       int     f3(n)         

8                  f3[n]   =   2   *   f3(n   -   1   )  +   1   ;  

9                    return     f3[n];  

10           }    

11   }    

四柱漢諾塔最小步數。

1int   f4(n) 

7                min=2*f4(1)+f3(n-1);  

8                 for(int  i=2;i13

、在乙個鍊錶中刪除另乙個鍊錶中的元素。

1void   delete(list   m,   list   n)   else  if(a.value   >   b.value)else  

16         }  

17         m=head.next;  

18}

14

、乙個陣列,下標從0到

n,元素為從0到

n的整數。判斷其中是否有重複元素。

1int   hasduplicate(int   a,   int   n)  

8}  

17

、兩個鍊錶,一公升一降。合併為乙個公升序鍊錶。

1       list   merge(list   a,  list   d)            else            

12                   p  =   p.next;  

13           }    

14             if   (a)   p.next    =     a;  

15           elseif(a1)   p.next   =  a1;  

16             return    q.next;  

17   }    

18

、將長型轉換為字串。

1char*   ltoa(long   l) 

5         char*  str=(char*)malloc(n*sizeof(char));  

6         int   j=0;  

7         while(l)  

12         return   str;  

13}  

19

、用乙個資料結構實現

1   if   (x   ==   0)   y   =   a; 

2   else   y   =   b;  

1   j   =   ;  

2   y=j[x];  

20

、在雙向鍊錶中刪除指定元素。

1void   del(list   head,   list   node)  

9         if(!cur)   return;  

10         list   post   =  cur.next;  

11         pre.next=cur.next;  

12         post.last=cur.last;  

13         return;  

14}  

21、不重複地輸出公升序陣列中的元素。

1       void     outputunique(  char      str,   int     n)         

12                            ++   j;  

13                   }   

14           }    

15   }    

微軟的22道資料結構演算法面試題

1 反轉乙個鍊錶。迴圈演算法。1 list reverse list l 13 return tmp 14 2 反轉乙個鍊錶。遞迴演算法。1 list resverse list l 8 return n 9 3 廣度優先遍歷二叉樹。1 void bst tree t 11 1class node ...

微軟的22道資料結構演算法面試題(含答案)

1 反轉乙個鍊錶。迴圈演算法。1 list reverse list l 13 return tmp 14 2 反轉乙個鍊錶。遞迴演算法。1 list resverse list l 8 return n 9 3 廣度優先遍歷二叉樹。1 void bst tree t 11 1class node ...

微軟的22道資料結構演算法

1 反轉乙個鍊錶。迴圈演算法。typedef void reverse listnode phead if null phead return listnode pcurrent phead pnext listnode ppre phead listnode ptmp ppre pnext nul...