工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 854|回复: 0

[面筋] Microsoft实习生面试时的笔试

[复制链接]
发表于 2011-5-19 10:33 | 显示全部楼层 |阅读模式
Microsoft实习生面试时的笔试
  R  Z& D- O) i& p
% _( k5 m) M1 ^3 qzz5 p# k( k4 t. T& E4 w" a$ k6 @
( _, g- G  T; h9 H
                  (08年微软实习生)             - m- z" K* q# V0 `
总共2大题2 [" I+ N4 I# Q8 s8 b. x
第一题 (数据结构题)
3 c- s( S7 U! ]) T/ q. [6 ~2 [读程序 补充程序中缺少的部分 难度不大 & n* ^  ]+ C* J- l* e4 \
; w) G3 S0 A7 X5 N/ {& b2 H
本次笔试程序的内容是数据结构中的线性表的链式存储
5 y6 [9 Q9 |4 k3 _) F程序中出现需要补充的几个主要的函数:线性链表的创建,插入,删除,判断链表是否为循环链表。
  T( V- K# C1 ^$ m2 r: H  T程序用c语言描述 ,指针一定要掌握好。0 e( c. @; ~. c" S$ Y) x1 f* s' _

/ ~3 b, ?# ~5 f以下程序自己所写: J. a. w( M% v$ m& H
仅供参考:
% Q) U4 d* N* F9 m9 Z9 W(以下程序在vc6.0中编译通过)
- b+ k$ ]2 w' e' U6 n
# R4 O: Q, [* K% C2 N: Z& f; ?9 u, k; L2 R  ?# `2 |
//Copyrights  huchen 2 K. {. d" X1 W$ d
//. Q- I, p; E, w
//描述:程序描述了单链表的创建,插入,删除 ) j, ?* y. k% A1 P& [
//注意:判断是否循环链表由读者自己实现
! Z7 U- v# ]# n//
9 q! l: p" |7 K( }$ y; F//作者:胡琛 <[email protected]>0 p7 z- c% g- o' o
//日期:2007-7-22, 16:38:25
* h7 L9 ]9 k. I: `! ]#include <stdio.h>' C  |2 d( p* q' l! t1 p# m

" e2 X1 m& F5 l#define ERROR_OK 0' F, h- O  u$ T7 \0 o( v
#define ERROR_OUT_OF_MEMORY 1( Y2 \) V/ r4 ^5 W0 S2 V" f" [
#define ERROR_OVERFLOW 2
2 f6 ^6 R, q2 Y' z3 y' X
- @& K" e4 f. E/ Kstruct LNode
6 M  _7 u$ z$ p* l! a  A{- i; D  n. b6 i, C  m. [2 P
    int data;
& _4 i2 l. r- m7 x    LNode *next;
6 K! W) {3 e2 }) c6 C8 `2 I};
9 \# f; ^% h- E5 r  y  _//创建一个链表 length为要创建链表的大小, head为头指针' P6 e; d" _9 Q: t$ g
int CreateList(LNode *&head, int length)8 }1 N; d8 _/ M2 e
{0 ^1 m, I( v7 N$ k
    head = new LNode();
% n0 f/ s3 Q' F* u. ]! v    if(!head)/ I: P+ D; ]- a
    {& l. W2 r( G- z$ J) P
        return ERROR_OUT_OF_MEMORY;8 L- r9 B# s9 h; f& e% B
    }( B0 l( G. ?, v
    head->next = NULL;) \# J; r# }; b; Z
    LNode *p;
# ^/ b, C3 U9 L7 a- b    printf("please enter the element:\n");# h* c/ |& F" R# R
    for(int i = 0; i < length; ++i)
- y$ ]2 ~% F9 z+ E* n8 ]' C4 [' ~+ M- u    {0 ~" W' @2 l3 W) x
        p = new LNode();7 G5 @: ~' y  @0 h! G
        if(!p)
" n  |( I5 H6 b# m* n+ l+ j        {% @! c( C! Q4 i' C1 ]5 V
            return ERROR_OUT_OF_MEMORY;( B1 ?- I' D4 K! [
        }
2 d5 ?6 G9 i" z* p7 f        scanf("%d", &(p->data));# ^4 k/ P6 z* x: q2 u' m
        p->next = head->next;
" T2 Y5 C& {) n9 \        head->next = p;
8 F' R8 U1 ^1 V  Y9 f    }
- |' A8 ^+ J  I. J3 T7 _" E, M$ J    return ERROR_OK;
8 w# n0 ~# D* f% r3 [" H}
/ h6 R4 O* b$ Q& |  K3 M$ V//插入一个节点 + D+ X7 A( p4 E- y- x* [
int Insert(LNode *head, int location)
8 [" v& g( t: n: p{
* P: g. C/ E% r* o    int index = 1;9 z* d$ f' r) s2 x, u! {7 Q
    while(index < location && head->next)  d- T. Z% x9 b3 N2 ^6 j9 [- R
    {( K# F5 m  ^) v4 c6 @
        head = head->next;( r7 C: b7 G5 P2 G8 {) I
        ++index;9 ?  v7 `+ ]' ~. F4 |
    }
$ A; z0 Q0 y  [5 X- d    if(!(head->next))' ^) K7 J8 f7 G; T  V
    {# T# W9 O! I: z. p8 g
        printf("overflow!\n");/ X) u+ I8 x) B7 y- @& }  W
        return ERROR_OVERFLOW;
! ?, u$ c) E0 c    }
0 _1 L7 b) Z' e3 e    LNode *p = new LNode();
7 _* k/ f' O: a+ ~- L3 T    if(!p)
* O  l; a- }. R& E    {" I: ]$ N5 s0 B8 j+ ?  n9 ~; v
        return ERROR_OUT_OF_MEMORY;; D% `; p$ k0 \" Q5 A/ m
    }6 i$ n' }, e; c3 B+ p
    printf("input an number you want insert:\n");! ~9 I) u8 }* }7 H. F1 {
    scanf("%d", &(p->data));
% v/ O6 R9 k. G    p->next = head->next;
& J/ Y5 `3 Q+ U6 I! U% t  s    head->next = p;$ [4 V6 `* Y. C" ?

+ C+ F5 o& S& v! c    return ERROR_OK;
1 B9 u; g0 s  a' z$ ~, X; z: \}4 H# n4 ]2 q& V
//删除一个节点
; W, z( n7 l) W( W1 Bint Delete(LNode *head, int location)# f9 a2 c6 k7 Q0 k- m- h" E- _7 ^
{
% `* C9 A" p0 y$ t    int index = 1;9 T1 H/ t' j$ R$ \* m
    while(index < location && head->next) //index 保证指针指向要插入位置的前一个节点, . k6 f, b0 F. p8 c7 o# C
    {                                      // 第2个条件保证指针越界后指向最后一个节点
+ B( c4 [3 s4 Y, N8 r; g0 o        head = head->next;* M' b4 i. L# Y, a0 }  C3 f- V
        ++index;/ x4 B4 j2 X! i7 O; ?( C
    }
, M" c. B5 P4 A; q    if(!(head->next))1 o( E8 \8 V; r& w
    {
3 R4 e6 i, }$ ~2 L5 {; f        printf("overflow!\n");
$ I3 p5 i# j! M/ c0 ?2 u        return ERROR_OVERFLOW;. |- i+ |- _* d) J$ ~3 Y
    }5 g! I9 b# W6 z: k% B
    LNode *p = head->next;" `" j6 f6 ]$ J$ p- E& T! b7 r" ?
    head->next = p->next;7 U5 b" ]" m8 m
    delete p;7 i- N" R4 ^) Y  O. J
    return ERROR_OK;
+ n& \( f" X8 s  J. K}
+ y+ j; s4 W! z" yvoid ShowLinkList(LNode *head)0 V- t+ B6 S4 s5 q
{" }4 X9 u0 p* a4 o8 Z3 O; G
    printf("LinkList:");" v: W- N2 M4 @- \
    LNode *p = head->next;/ b1 Q' l7 {6 u" V4 T, R5 i+ O
    while(p)0 K: }$ E4 ?8 `
    {
* f+ A2 M  l: d  G        printf("%d ", p->data);
$ e$ @% q0 Q1 r7 n! D* B: c0 ~3 A        p = p->next;
! S* z0 y7 U6 l    }
& G5 U, N- e9 r, B* [  u    printf("\n");: M* t" O; i+ e7 M3 Z0 |" s! U
}
2 ?  q" P) D+ ?; w' \( C: m( `" @5 o* |( U( O3 V
void main()2 O" \: ~" W( x7 F5 }& Q
{
5 l7 L6 h8 f, Z; O( @2 u   
! L# w9 g9 S+ s# r9 w# G    LNode *head = NULL;' I% a/ P% @9 R* h$ \- t
    int initialLength,location;9 L# T& t" u+ }( k  n; V3 m
    ( D* J/ g  d9 I  h8 O  O
    printf("please input an number to initilize the LinkList:\n"); //初始化链表的元素个数- Y! ~; ]# A. h5 L
    scanf("%d", &initialLength);3 t! ~8 @4 n) ?6 U2 d
4 h6 g% r  s6 {0 {% ]- k) {
    if(!CreateList(head, initialLength))' s0 D  k7 l. Y+ a( E
    {
5 U2 K8 Z6 h9 y: `        printf("Create LinkList Success! \n");
% x! H5 B/ b% P) M7 l6 w    }
0 X/ _9 @9 z% w. h    ShowLinkList(head);8 B: q8 Z; ^5 B* b& X. l3 |
- b$ n- ^! |1 D3 C# d. ]1 W
    printf("please input an location you want to insert to:\n");; x3 R* z6 d# ~8 o/ G4 A
    scanf("%d", &location);+ e5 y: j  \6 k5 H7 f, m  a* A4 X' ]
0 F% w6 ?9 h- s$ Y
    if(!Insert(head, location))
3 z4 R& g0 \5 A: C& N% Q3 F    {, ~: ?' g7 r1 d! d: x
        printf("Insert success!\n");
$ w( E- F. v8 M( R4 ?  G. v" [    }( e9 i( {% s4 a% P% `8 s
    ShowLinkList(head);: `- V/ _( E1 p
* }; Z; o" S& ?- m  S
    printf("please input an location you want to delete:\n");+ w# M$ h) ~- b. Q* m
    scanf("%d", &location);
% N% o3 w) A0 q2 }, d
, ^) v# ^# r) w/ J' I+ u: f* P4 e    if(!Delete(head, location)), s3 L/ l7 u2 l3 n+ t3 Y. Y* Z
    {
+ d, R. }8 c6 m8 A7 P" }% F        printf("Delete success!\n");
; P  _1 d. R. b; s& l    }
3 P; ?1 I' A. O- B7 _    ShowLinkList(head);  H( l! |, H3 D: N) q5 ?- o' b8 e
}5 d& n2 i4 H. z" j/ ]" C. `

# M1 y9 ?. j' G第一题总结:把数据结构中的基础打牢(不可能一直考链表) " A: `/ S8 `7 }- r$ c' D

) H7 S4 [1 C1 {  T: [$ m第二题
: t5 v  F7 ~: F$ D' B英译中
& @2 n2 q, i- l8 a6 i, j英语文章:长度 和难度都跟四级中阅读理解的文章差不多
/ u5 C6 o6 J8 b+ j  l4 @& X0 P$ p7 {! m2 ]( y) b

' s$ S, o" }0 \: K  Y' G% h……% g3 m+ B0 w! F6 c/ @# r4 C
$ W  r9 v( V& r
http://bbs.aftjob.com/thread-607297-1-1.html3 y- j( X" G" h( w% m, b5 y$ R3 k

$ u, |3 E: X* Y2 P( u6 k( L9 u——
) a0 A+ f2 f6 Q' D8 u微软(Microsoft)求职俱乐部
4 a  `0 Z1 [" O3 ^/ @http://bbs.aftjob.com/group-100-1.html% ~7 I% y0 E0 z) `- G
2012阿凡提求职手册——IT行业篇
& a7 t7 [! [" U: O# k4 V$ Uhttp://bbs.aftjob.com/thread-607158-1-1.html
' D0 P7 s  D% c——
9 t1 B" _- k% {( F$ E! i5 x5 e% X微软笔经篇
9 j* G2 ]# z. ^; n9 L" fhttp://bbs.aftjob.com/thread-469556-1-1.html
# W7 o, q/ ]: W微软2007年笔试题
( L! a# k) l- \1 i! Nhttp://bbs.aftjob.com/thread-607298-1-1.html, c' Y  K3 S3 u: V# J
微软今天的笔试题目(12月28日)
( [2 B- p  T, Phttp://bbs.aftjob.com/thread-29793-1-1.html
% ^) c+ w6 Z) o. _5 m* v$ m0 x微软笔试题整理- t5 P- T( \; l4 e4 X
http://bbs.aftjob.com/thread-607299-1-1.html
) b" A: h; t: X3 {5 `, C$ G/ K——: p$ X9 x7 c$ y9 z9 w$ P" e4 p; {
阿凡提(aftjob.com)求职社区
! r2 ^7 H) R: d' ]( l6 J' |9 d阿凡提求职俱乐部-国内第一家网络求职俱乐部,提供企业求职俱乐部和高校求职俱乐部交流平台。& T! A# n5 B0 e8 b; L
——
" R) ]$ {2 k, V
& U' o' V& o! f) a" J+ Q9 M; W9 [' P9 b( f7 w. H9 B
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-17 00:37

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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