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

2021-08-25 06:53:32 字數 3703 閱讀 6113

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

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;i、在乙個鍊錶中刪除另乙個鍊錶中的元素。

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

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

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

宣告:本帖是從網際網路上word文件貼上去的。

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

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

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

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

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