找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1083|回复: 0

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

[复制链接]
发表于 2011-5-19 10:33 | 显示全部楼层 |阅读模式
Microsoft实习生面试时的笔试
" n! l' P) {' x2 w$ w4 p1 i+ s3 U8 o6 Y
' H+ O3 B* G$ {  rzz8 O6 K( m: c( a4 \5 o3 `

+ n4 O& u/ R0 f1 V* m. W                  (08年微软实习生)            
) a. x& U. d7 `' Q$ j3 R. `总共2大题
) I9 c% E! [8 i7 `: G" [第一题 (数据结构题)
+ O" d; d4 v: _2 E1 n$ G读程序 补充程序中缺少的部分 难度不大
! }! n' ~) I2 R( |% r! x. Q$ X) w! h3 S
本次笔试程序的内容是数据结构中的线性表的链式存储
. e! x( F$ ]+ M+ R9 x, f程序中出现需要补充的几个主要的函数:线性链表的创建,插入,删除,判断链表是否为循环链表。' g: I# g( z# V; ^5 c
程序用c语言描述 ,指针一定要掌握好。
* B6 P' |! x+ U7 H! G: A9 ?6 T% P) `# N
以下程序自己所写
) S3 d2 Y& c* }7 e9 n仅供参考:
2 Y5 e5 B* a! D+ k8 r(以下程序在vc6.0中编译通过)
( A" i7 e: x' r8 v
, S0 J2 k% W3 ^2 z& }" C6 O  d# m
' S8 h7 b4 L* c; N//Copyrights  huchen
& c! \- i: F" f1 ]* i//
/ n3 u  F0 d" ]% D//描述:程序描述了单链表的创建,插入,删除
0 W; a. s9 \! p% @//注意:判断是否循环链表由读者自己实现
9 K! F* a* ]# t1 O: S0 v* _//
7 M# B) J; I- D* C) G7 c//作者:胡琛 <huc87@126.com>
+ K# t, b! h" U0 l- n8 }  u  O* @//日期:2007-7-22, 16:38:25
$ W6 b. \) i! ^( F+ l0 Q! T6 c#include <stdio.h>3 \- I6 D. U, h1 _

8 x" a  T  C$ i2 Q+ @4 H#define ERROR_OK 00 ~: m6 d4 {, _( O# E
#define ERROR_OUT_OF_MEMORY 1/ f2 b3 Y0 ^* O; y# h7 Y4 `
#define ERROR_OVERFLOW 2% N! D& Y, @3 E, y! }8 s
. L5 ?/ u+ _& d) t
struct LNode : C/ }0 S, S& K; I
{6 V, z0 p  f+ D7 q% a* P
    int data;   f  \- s( L1 l' {
    LNode *next;+ u: I6 N( }2 \. D
};
: s, \; |7 n% m- y5 p8 M! N, ]1 y) f//创建一个链表 length为要创建链表的大小, head为头指针
) j3 y3 F# b/ H3 n- M8 Vint CreateList(LNode *&head, int length)
( O5 w) @# j% e' M$ z$ |{
- J" t) f# `- H# \' I/ E/ l    head = new LNode();: m( ]* E% Z( P2 H
    if(!head)
0 Y( D. p) a) A3 V$ `0 a, n1 V    {
, X: S& _9 e8 R, ]- _. _        return ERROR_OUT_OF_MEMORY;6 X0 i2 i1 L6 Z3 }+ U
    }6 V/ @' A8 a# i$ Z+ |1 l
    head->next = NULL;
. p4 Y; e  T' n/ Q+ T" \    LNode *p;7 K. R+ S* h2 h, l8 c  ?
    printf("please enter the element:\n");1 I( M: O) e& ^$ v; O
    for(int i = 0; i < length; ++i)' O3 n. V3 G* l5 P6 M  O+ ]
    {5 t' S- x" {' O3 k; R0 G
        p = new LNode();
: B" J' [/ H* n/ t  A5 G& e/ ^        if(!p)" Z& p( R+ `9 I
        {$ E- s5 Y1 N! I' b' U8 d
            return ERROR_OUT_OF_MEMORY;& e3 ~. @6 p( i8 w# E! S. j
        }" |. Z0 q. o6 A
        scanf("%d", &(p->data));
+ U# o$ n: d: V; S% S, p- U) g0 C1 ?        p->next = head->next;9 a/ a% B! E4 k: X" ^& o3 W7 ~
        head->next = p;# C/ R' q6 a5 X. v+ d& g: ?+ a+ S
    }
( f5 ^/ j8 V: c8 C3 E& p; j    return ERROR_OK;
! q. v6 c% @2 u) O, j8 q}2 @  w2 R4 A8 N! l$ x8 H
//插入一个节点 , P3 T; p( B; m  C1 t# J( q  N, U
int Insert(LNode *head, int location)
+ \6 [0 x. G4 p0 o{3 W' d$ q! L! J4 ~" _5 m3 n4 V: p; i
    int index = 1;  A% o4 Q$ ~1 _( P% @8 j3 Z
    while(index < location && head->next)
4 ]5 B6 j7 r+ ?; J2 @3 {$ B0 j4 `6 A    {
2 J  c) a; Y# l  I7 E( h; k9 r        head = head->next;
) e0 A) s2 E, p, p$ \- |, e        ++index;
- t) q$ K% O6 U3 Z$ U. Z* C    }! o9 p; y/ ?( p, Q4 m/ [
    if(!(head->next)). i* J& G5 v- @$ W
    {
7 N. F# ]" T; G3 @8 t% @$ i% `        printf("overflow!\n");
# ?* |8 y/ Q4 M) J4 T1 n        return ERROR_OVERFLOW;. f6 ]' C. I/ g" n. l
    }; O' z! ^$ {" p$ Z" L  \
    LNode *p = new LNode();
( _4 \+ `6 ?2 Y. ~- A! `8 d    if(!p)  g- `( \0 a  w$ M! M9 r# Z
    {
! @( @9 }4 c/ _" b) P5 _; ~: h        return ERROR_OUT_OF_MEMORY;
# f$ }1 R2 `7 c8 B$ U) m    }6 Z& g0 e( F2 k* P9 s; z
    printf("input an number you want insert:\n");
' q; r; z/ c8 k- a2 k    scanf("%d", &(p->data));! D+ `. m# @( x  h! M
    p->next = head->next;4 u, R3 N! T1 I0 G' v) [
    head->next = p;
* {5 U* P. t! Z  O4 g( [& n$ p" y3 @# e, @0 |9 F# A6 V
    return ERROR_OK;
5 C. v" j" R& n  V9 D: H1 p}3 o. r9 O& g5 L8 Q6 h4 H& P% `
//删除一个节点
" o- n  o' S9 I8 I' e$ h0 Dint Delete(LNode *head, int location), ]: S6 C2 G8 _1 W0 z
{! y4 f8 \& B. S4 l/ a" W: ]& u
    int index = 1;3 R2 O: q' `9 e/ F) |3 X# W% `  K' X
    while(index < location && head->next) //index 保证指针指向要插入位置的前一个节点,
2 g0 I5 Z) \0 a' o" z( [    {                                      // 第2个条件保证指针越界后指向最后一个节点5 U" c6 u! \) n/ @+ z# ~
        head = head->next;
/ a$ h& }2 O" t0 Y4 t! }0 u0 T        ++index;
' y4 y. v( K6 A1 k$ H1 a    }
9 e  c: E5 U% ]) n' n, a: l    if(!(head->next))9 Z; r6 K, A7 b) J, L" d
    {4 N" e) I0 v( m7 r: ?1 @5 G; `
        printf("overflow!\n");% [0 r0 L* ?0 J0 J, s. Q
        return ERROR_OVERFLOW;
( }* \9 B: S! w    }# l. s/ y. f+ Y* s
    LNode *p = head->next;( l' z) B) X$ W( O& @: ?
    head->next = p->next;
" E. T# Y7 W3 A7 |    delete p;$ @* x) c0 t( [: i7 g+ |' z" q
    return ERROR_OK;6 C+ D; q; T: O6 G9 h
}0 g# p2 Y6 s* S; u0 \
void ShowLinkList(LNode *head)( q% }& H6 ~: ?( m3 \* E* m& F8 F6 N
{- \& I' Q8 D/ ]. x0 w& g+ l) Y
    printf("LinkList:");
4 T+ d' h) F) w/ Y1 M' A    LNode *p = head->next;
3 }6 x- B. Y* C5 R  K2 W; V) Y    while(p)* n- Y  w0 K+ |! y
    {9 b2 s8 }4 q$ q# s" g5 ?
        printf("%d ", p->data);$ G* J, w/ `. y' i0 K
        p = p->next;% y) ~% x! g. q+ ^
    }- P1 J3 I+ Z- b- Y/ `
    printf("\n");4 N/ p( ]5 T9 x+ n6 F
}$ v. Y9 x/ R; g, u
7 E- B: V$ J1 T* L, r, I; P; H
void main()0 }# I; U5 b2 \7 H; Q9 @- C, }
{
3 U2 k, |+ Z  @4 h! d; u    / Z- E( v9 i+ u! v, L4 |
    LNode *head = NULL;4 Y  R$ @! v7 t. A/ q' L
    int initialLength,location;
* n5 o4 o8 x: Y7 \% p   
& |+ u/ P6 F% |' m$ Z    printf("please input an number to initilize the LinkList:\n"); //初始化链表的元素个数: c5 l. e7 v5 ~
    scanf("%d", &initialLength);$ b/ R6 b% d, q- u

& e/ `' `& t5 i- v5 O$ g* a, V  H    if(!CreateList(head, initialLength))
5 _! y) D& w4 K" @" R    {
4 H8 `9 t! r5 h$ Z' ]1 v        printf("Create LinkList Success! \n");, T# ~; J3 P% K# }/ ~" |
    }
1 D. o$ w  v- q& N$ C    ShowLinkList(head);$ m! g- x2 T2 i0 u( e- m6 v

: w* y$ H4 H  U! v6 G' ~    printf("please input an location you want to insert to:\n");
% m7 f+ @1 a0 H    scanf("%d", &location);
" e( F4 i* ?1 u% ?# O* J/ \+ |5 c" c& J4 N+ E5 e
    if(!Insert(head, location))
2 e/ Q8 r3 L1 G3 @2 I9 d    {* j* E' Z3 ^# Q/ t2 K& y5 d
        printf("Insert success!\n");% e. q  J  q; i8 G1 E
    }) m4 j- L9 u9 S! V( V! g& \9 Z
    ShowLinkList(head);
6 L0 o5 d9 h$ K0 J8 k: F2 \3 m! r( n" R
    printf("please input an location you want to delete:\n");
8 Y. Q$ x& s$ k4 y3 h    scanf("%d", &location);3 `, P: }$ r2 s& @# [

; Y% Z" @7 k1 L    if(!Delete(head, location))+ ~# x  H( q* Y4 d* x, k: O
    {0 A+ [2 F7 G2 j
        printf("Delete success!\n");
% h1 l8 }: E' L' T; D    }, z- _/ g5 f+ y$ l& L7 W
    ShowLinkList(head);+ t7 M% p) C; V0 p' S( P5 w: A2 l/ o9 f
}
4 \! X2 I4 F3 k) M4 Y" f% O' X! A# x1 _4 U
第一题总结:把数据结构中的基础打牢(不可能一直考链表)
( A' ~& S- n1 x- E+ W% Q5 W
7 n0 W% U% u! s第二题- Z, v8 J0 U6 |3 X, \
英译中
' [( B& m$ H: X- ^! V7 P  M  n英语文章:长度 和难度都跟四级中阅读理解的文章差不多+ [/ W; P$ Z2 L0 m3 U

1 t# X( J9 O  V8 ?; F& R0 p+ Y3 f  ?" K- b
……7 P' O4 X& V: G  u2 j: e" L" ]
0 S4 N' |4 s9 Q. P) B
http://bbs.aftjob.com/thread-607297-1-1.html# S$ Z# j/ W- v1 |* ?/ ^
/ D6 i- \1 ~1 w5 h3 p  N( |
——% M" F4 l  H3 b, F- }: O5 g) {9 ^
微软(Microsoft)求职俱乐部
+ w0 l* j, s, m9 Ehttp://bbs.aftjob.com/group-100-1.html
2 }0 I+ h7 a7 ?" l$ S! L5 F8 k# g6 ~2012阿凡提求职手册——IT行业篇   H/ Z' z  j) m- z0 k+ x
http://bbs.aftjob.com/thread-607158-1-1.html
) x; x4 `! a; ?+ Z  U. p—— ; e, y+ X% \8 W' i
微软笔经篇; Z4 h3 n; I) B/ i+ g' e0 G6 v) L
http://bbs.aftjob.com/thread-469556-1-1.html
. [7 N, c/ d% ~- k4 q* W2 D6 Y3 i  W微软2007年笔试题
, o6 E9 C" I& c8 M$ I% H( {http://bbs.aftjob.com/thread-607298-1-1.html
4 J8 `* l/ |( y* c1 T6 _) @. g微软今天的笔试题目(12月28日)
4 a, P, i! [1 Y0 R! t- O# uhttp://bbs.aftjob.com/thread-29793-1-1.html# V; k  c1 t1 P' l) h4 R* Q, y1 r4 O
微软笔试题整理4 t6 E: _1 n# V. W
http://bbs.aftjob.com/thread-607299-1-1.html
: C6 H7 H6 y3 K4 l" t——
: r( v4 q/ P& j2 u! r阿凡提(aftjob.com)求职社区
9 w" C3 i9 O+ Z阿凡提求职俱乐部-国内第一家网络求职俱乐部,提供企业求职俱乐部和高校求职俱乐部交流平台。
# W! o' j  j( ^% B9 K——
5 K# l9 W; ]' |" N7 B4 Y0 G# p2 j% q8 _# y( Z9 R8 X
0 P0 N' Q0 I  p3 p3 [% z
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-29 08:11

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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