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

2021-05-27 08:52:09 字數 3240 閱讀 9033

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)  

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;i   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、如何刪除鍊錶的倒數第m的元素?我的方法是先用pre指標從煉表頭開始步進m,新建pst節點next指標指向頭節點,cur指標指向頭節點,然後pre,cur,post三個指標一起步進,當pre指向鍊錶結尾的時候cur指向倒數第m個元素,最後利用pst指標刪除cur指向元素。  

2、如何判斷乙個字串是對稱的?如a,aa,aba。設定頭尾指標同時向中間比較靠齊直至相遇。  

3、如何利用2函式找出乙個字串中的所有對稱子串?以子串頭指標和尾指標為迴圈變數設定兩個巢狀的迴圈以找出所有子串,對每個子串應用2函式。  

該系列題目由   

微軟的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...