a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 249|回复: 5

[考试试题] 22道微软数据结构算法面试题

[复制链接]
发表于 2012-8-3 00:09:22 | 显示全部楼层 |阅读模式
1、反转一个链表。循环算法。   1     List   reverse(List   l)   {$ L0 p/ g" X$ d2 c- W
  2     if(!l)   return   l;# r* J1 ]8 p- |
  3         list   cur   =   l.next;) x6 u$ D  W% o$ S$ t
  4     list   pre   =   l;
0 A/ Z1 Z. o9 Q- E% ]  5     list   tmp;
8 {/ |5 l' }# @; G  6     pre.next   =   null;2 N$ O9 ?  d, W$ A+ G$ L" c* Z
  7     while   (   cur   )   {
2 B0 Y+ g1 d9 m8 ?( E% M  8         tmp   =   cur;" [5 ~/ v9 i' e+ v
  9         cur   =   cur.next;( K2 k; z# U+ s
  10         tmp.next   =   pre
" n" E4 X' B6 }( _4 D( Y! o8 i% m  11         pre   =   tmp;
' M. P5 v; Q% F# P  12     }
1 {. J# |, w2 U  13     return   tmp;& e# ]% [/ i7 h
  14   }
! @/ G5 H2 B# P$ L, T2 `! t  2、反转一个链表。递归算法。& e7 U" @' o/ W: T, C
  1     List   resverse(list   l)   {: u- |: l% c& u2 D) ]. g
  2     if(!l   ||   !l.next)   return   l;7 i$ A. D4 C7 C- d* O! C6 l
  3, W2 c' S  f$ e. K
  4         List   n   =   reverse(l.next);
$ J1 h; c" A. a8 R$ q- \  5         l.next.next   =   l;/ q0 f. Q+ \, t8 ]/ j
  6         l.next=null;
1 X% E6 \# h8 k% T  7     }' O' q/ j# t  T  _0 ]# _
  8     return   n;
: A$ z9 R  N% r2 E" [* C
, W( r0 o0 L8 y. b% F8 M2 |  9   }
回复

使用道具 举报

 楼主| 发表于 2012-8-3 00:09:23 | 显示全部楼层

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

</p>  3、广度优先遍历二叉树。. d- _0 w+ n! e% t: J. C$ t9 ]
  1     void   BST(Tree   t)   {
+ l8 |$ Y7 m0 ~* T: ?* w3 u7 n4 h  2     Queue   q   =   new   Queue();! z% v% h% m. D3 J& B* B
  3     q.enque(t);
' T& L$ c/ T  S2 n  4     Tree   t   =   q.deque();
7 n9 \5 ~  }( a) b+ a& K: }9 D8 x& z  5     while(t)   {
0 j% M6 ^) K! s6 c* z; H  6         System.out.println(t.value);
; @( V1 ?1 R3 N9 G* |5 R  7         q.enque(t.left);' V& x- O5 \1 a0 j7 y
  8         q.enque(t.right);
" V0 K& z* H" n! G: w# t  9         t   =   q.deque();# N9 `% M4 a% j; E5 ^
  10     }+ A, k% q4 |" f/ B) O
  11   }
- ?* K$ [3 `8 r8 _- m# u6 ^" u/ o  ----------------------2 _2 m7 k3 C$ Q+ x8 ~  A7 `
  1class   Node   {5 n4 d) p. T0 e, d7 B6 w) W
  2     Tree   t;- T( D( K& R. m* C
  3     Node   next;, j! u& Z0 z$ [7 b2 ~- m
  4   }* c  u- A& h1 A  `% {) k" H$ L3 y0 _
  5class   Queue   {
( J5 d- d# V/ L! y  6     Node   head;
8 Y3 G: s  ?1 q% y- w- z4 C1 A' Y  7     Node   tail;0 G& k0 ^5 A$ m. L% y
  8     public   void   enque(Tree   t){. e1 `# [2 O, L% l5 A
  9         Node   n   =   new   Node();5 p4 W/ n) ~. o( G6 w
  10         n.t   =   t;# a( {6 X( e+ z) ^4 Q, y' V9 x
  11         if(!tail){
, r6 j+ w9 [0 W  12             tail   =   head   =   n;
& N! L5 v4 r" b- u0 X: `  13         }   else   {' Z2 M/ Q/ s  V5 _) W
  14         tail.next   =   n;+ Z( }/ i* \" p, M) M5 A
  15         tail   =   n;
; d  Q/ |1 w- m1 {, ]  16         }6 }- B0 c) z; w; T9 B
  17     }; g9 K% E3 a' V( E8 i  b
  18     public   Tree   deque()   {, {- A3 Y5 _6 t! E' w% B
  19         if   (!head)   {
+ W6 c3 Q9 }  y; ]; w5 G  20                 return   null;# h( c- o( `5 j- R7 S( v9 H
  21         }   else   {
, L0 L, G! J2 E  c* |% u" f  22         Node   n   =   head;
& F0 ^) @; T3 ?* \+ x. X* u9 _, l  23         head   =   head.next;& k9 T* q3 ]; D5 [
  24       return   n.t;6 ^, Z" e: d- t
  25         }( X1 |& @( |, E0 @. m; W4 T
- X+ z) D; m0 g
  26}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-3 00:09:24 | 显示全部楼层

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

</p>  4、输出一个字符串所有排列。注意有重复字符。
! B/ }2 f& E0 p# d( j  1char[]   p;
: k* F8 v: l4 u$ }  2void   perm(char   s[],   int   i,   int   n){' e& ^8 j; J% K# T! t' H
  3   int   j;
9 @7 y, r6 X9 K  4   char   temp;& L9 W5 I% }! K/ e

0 y: j! v3 F* {8 ]) O  5   for(j=0;j
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-3 00:09:25 | 显示全部楼层

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

1、反转一个链表。循环算法。   1     List   reverse(List   l)   {: o( d! R# L/ V$ |
  2     if(!l)   return   l;
& P& l9 V" {2 \) |6 A  3         list   cur   =   l.next;
8 f1 _. v9 u1 `) k  4     list   pre   =   l;
1 l# ^! ~9 U( c: S  5     list   tmp;
  u$ D8 O, F- V+ w; r7 l' v  6     pre.next   =   null;1 D# v) x% o* ]3 H( G# X1 l
  7     while   (   cur   )   {
- V- J8 D2 t" l: {) w1 U  8         tmp   =   cur;2 c% G3 i4 P' C- ^! c. j
  9         cur   =   cur.next;
7 V% }$ d/ ]1 s5 ^5 A  10         tmp.next   =   pre4 s( A- V0 h6 K+ S* p# @2 R: Z3 |
  11         pre   =   tmp;
: J; [! P, r& _; `& Q$ W  12     }8 O9 t$ Z! _" G9 }) I1 J& ~
  13     return   tmp;
! \# @5 }+ g, G  14   }
" K- p- k: r, W/ F  2、反转一个链表。递归算法。
9 ]: ]" m! v6 U" L% C% H, p# g  1     List   resverse(list   l)   {5 G) Z& M2 y7 b6 Q( `3 e2 m$ ]! `' W
  2     if(!l   ||   !l.next)   return   l;
0 s( ^3 e" C3 t  3
7 f0 t- Q* M1 N$ H. }# D  4         List   n   =   reverse(l.next);& O# k) G& |/ C: c5 V. n
  5         l.next.next   =   l;4 C2 ~2 z/ }/ E7 N
  6         l.next=null;# e3 x+ i1 c/ N+ x1 Y# M3 x  L; |% k
  7     }; ~. w! }5 c" R. |
  8     return   n;
8 `2 G6 L$ Q& y3 Q; [- T) ~+ D& o  9   }( u: `9 F/ ^. K' s
  3、广度优先遍历二叉树。
; c' c$ x$ k: g2 Z( ?% |- w5 P' J  1     void   BST(Tree   t)   {) l) m" z" Z, k* M8 n: m' j
  2     Queue   q   =   new   Queue();
1 A# A0 L8 e3 N: B: r+ J- B' K  3     q.enque(t);$ l3 F# S6 p# t' X/ ?+ W0 A; ]
  4     Tree   t   =   q.deque();
! n" L2 v9 p6 E5 v: d: k% ]0 @  5     while(t)   {8 M; S( K* w1 @4 X
  6         System.out.println(t.value);. D* c* g6 j6 A9 f$ M
  7         q.enque(t.left);
8 M& Z! K! t& I/ p* Y3 b. r  8         q.enque(t.right);
" O7 e4 g4 F1 q  9         t   =   q.deque();# q* l8 }, d) ?' a6 u7 ^' f
  10     }& ^1 `* [3 |& l# E2 `1 v8 b
  11   }
( Y. F" K; Z/ L) n  ----------------------3 T6 j6 U( u+ A+ q
  1class   Node   {
4 ?- [- d. z/ d( E3 p  C  2     Tree   t;
7 l* N, O; a2 i, I  3     Node   next;4 H: n6 ?. S2 g: s$ g3 S
  4   }
9 u0 ^7 g! u/ `1 C! ^0 Z  5class   Queue   {% k/ l9 I$ C- V
  6     Node   head;
  ~+ s2 ^! z4 `, ~# G  7     Node   tail;
, `& I9 H: g4 @  8     public   void   enque(Tree   t){+ X3 U8 C4 B1 M/ t6 ?6 }
  9         Node   n   =   new   Node();
/ X) l4 p+ G- w* j6 x# j  10         n.t   =   t;
* `4 g, ^, k" a% x& i0 f, W  11         if(!tail){
7 e  R1 n# _5 }) u0 D: Z  12             tail   =   head   =   n;0 e" t- L+ x* I4 g7 i0 a
  13         }   else   {
- \8 o& c+ U' H. O2 X3 S! O5 E. {  14         tail.next   =   n;
4 {- x* g, u9 i! {  15         tail   =   n;
; [, w: V; t, {  16         }
, Y! g( Q2 {! E0 H& d5 g  17     }
* C) E# P0 d7 [% Y* o6 A$ N1 M  18     public   Tree   deque()   {: b% H  }  r% x
  19         if   (!head)   {
8 E% i% g, d9 U. W8 U* E  20                 return   null;
7 M$ M% s- J9 b! q! ]  21         }   else   {
2 w2 b" q0 D- ]4 |8 E  22         Node   n   =   head;
7 B; L% W  p2 s, K: w8 v# Y  23         head   =   head.next;
2 L8 w( b8 J+ A8 Q8 p7 ]* R  24       return   n.t;% Y* [$ l/ [/ F) I+ R
  25         }
3 {3 Z0 O) J4 }5 k: i: ?  26}
  \- U, H3 g5 r4 `% ?$ B/ b  4、输出一个字符串所有排列。注意有重复字符。+ G8 }2 n# r0 u- y, }
  1char[]   p;
9 v" n7 p" o7 U5 w8 X2 [6 t  2void   perm(char   s[],   int   i,   int   n){
' B: v/ F, ?9 A9 s8 ?4 }  3   int   j;' T( H+ ~- O4 S" u
  4   char   temp;
. b8 ?; `3 H6 }4 {4 c
* ]3 `! V( `+ w& N- h8 C  5   for(j=0;j
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-3 00:09:26 | 显示全部楼层

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

11、汉诺塔问题。   1void   tower(n,x,y,z){
% s) m' i% |" M" K. B" s( n  2         if(n==1)   move(x,z);! ]- q+ F. v% C" d6 L, v& M8 h+ N
  3         else   {+ g, Y/ c0 R4 a8 O+ w3 K
  4                 tower(n-1,   x,z,y);
6 l, l6 x1 a- p: A5 Q  5                 move(x,z);' e. K( V! T9 V; H
  6                 tower(n-1,   y,x,z);$ b1 `. x5 c8 Z8 |1 \" R
  7         }0 Z: m4 q/ q3 b; f0 K/ }
  8}8 r6 m7 T( f+ @; r" I
  12、三柱汉诺塔最小步数。
: j8 q  ?+ @, E6 ?- W" W+ l  1       int     f3(n)     {7 `2 T/ T+ P" G/ i& V; F
  2             if   (f3[n])     return     f3[n];
$ Z1 ^8 G' X% i2 D  3               else         {7 D! T% O" J/ S- K: s; w/ s1 P
  4                       if   (n   ==   1   )     {
# u  x' A, ~. u( Q  u4 k4 Z; ?( ]! @  5                           f3[n]   =   1   ;
3 V5 U2 c4 j3 j  d/ A; v! h6 d9 O  6                             return       1   ;
" g* l/ u& E, s) {2 j; o, g  7                   }
4 h; r% X, H3 i/ z7 ~  8                   f3[n]   =   2   *   f3(n   -   1   )   +   1   ;. \1 E. |/ u, b/ ]. w& p
  9                     return     f3[n];( X( A9 V. R9 I2 _: G6 D9 ~
  10           }6 v( Q' [3 K$ \1 e9 N
  11   }) n. Q, {* f4 ]. a* C% M& T. U0 d6 M
  四柱汉诺塔最小步数。
9 D: `. ~! r2 w# a2 F" U" U5 d  1int   f4(n){  F* A- T# a" _: c1 N
  2         if(f4[n]==0){( y9 `2 E8 y( b! l
  3                 if(n==1)   {' \7 j. Y7 Z# ]. ^
  4                         f4[1]==1;
* `4 [$ h& M2 \  5                         return   1;0 c1 `: i* L7 c' d
  6                 }$ {) Y! h1 W/ v4 \
  7                 min=2*f4(1)+f3(n-1);; R6 @' g9 I( I1 U$ ]

' L5 w# f+ d% w) s' I; p  8                 for(int   i=2;i
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-3 00:09:27 | 显示全部楼层

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

17、两个链表,一升一降。合并为一个升序链表。   1       List   merge(List   a,   List   d)     {
) [+ ?( p, b$ c  K3 U  2           List   a1   =   reverse(d);
4 H. N* p2 `/ l& y  3           List   p     =     q     =       new     List();
! q0 B  I" Y9 N/ n# a  4               while     (   a     &&     a1   )       {0 V2 u4 b) w: M5 G8 G
  5                       if   (a.value   <   a1.value)     {% ?$ g  U6 }  ~; N1 n
  6                           p.next   =   a;5 |% m0 T0 f( {. S' q0 G
  7                           a   =   a.next;
1 w& o. U: ]( a3 ~( j2 U  8                     }       else         {+ n% {, @% n9 ]: x
  9                           p.next   =   a1;) e, X8 u6 D" A8 l& M6 t* ?. U
  10                           a1   =   a1.next;2 y* Z# q! y: t2 r) |' w$ N  y
  11                   }& t4 t/ S  b$ T2 J
  12                   p   =   p.next;; q% t2 |: a% O. M) q% i" O# l
  13           }7 v  n" |6 \, r- V; N% L
  14             if   (a)   p.next     =     a;
1 a3 z9 E! u5 U# F8 j! B, m  15           elseif(a1)   p.next   =   a1;1 b- @# s  Z0 K" z
  16             return     q.next;
1 }( ]  d" y! y5 W  17   }
- a1 |0 n1 d! w( \2 j% O9 i0 t  18、将长型转换为字符串。
: d" H: t9 g% E8 _  1char*   ltoa(long   l){
/ ?4 ~( @7 {: b) [  2         char[N]   str;
& _# [: O" |0 {: a  3         int   i=1,n=1;
& |  k: |# _. b% ~$ w/ B$ G7 d) W0 c9 U
  4         while(!(l/i
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-7 06:02 , Processed in 0.290791 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表