微軟資料結構面試題

2021-06-06 04:13:32 字數 4236 閱讀 2331

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   }     

微軟等公司資料結構面試題1

tree.h typedef struct bstreenode bsttreenode class acttree tree.cpp include tree.h include include acttree acttree void acttree insertvalue else if pn...

資料結構 面試題

python實現 寫個大概,import re def quick sort alist,first,last if first last return mid value alist first low first high last while low high while low mid va...

資料結構 面試題

2.棧2.2使用棧計算字尾表示式 2.3對棧的元素進行排序 2.4判斷表示式是否括號平衡 3.佇列 4.鍊錶 5.樹6.圖 7.字典樹 這是一種高效的樹形結構,但值得單獨說明 8.雜湊表 雜湊表 1.1 尋找陣列中第二小的元素 思路 公升序排序之後,輸出第二個數字 1.2 找到陣列中第乙個不重複出現...