找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1060|回复: 0

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

[复制链接]
发表于 2011-5-19 10:33 | 显示全部楼层 |阅读模式
Microsoft实习生面试时的笔试! |# t8 O" x2 y, m
" z  \2 p( q6 e4 W
zz' i% j$ u7 ?! P
1 U: S) J' g) h5 ^0 u5 S4 B
                  (08年微软实习生)             7 H7 w8 c1 w6 O3 l
总共2大题, \# J" [+ f- z. D, o/ |- d
第一题 (数据结构题)
! p- ?1 D4 b  T/ F& C0 W读程序 补充程序中缺少的部分 难度不大 * n" w6 h2 l4 v2 D+ m! U. n

9 ~* t+ `5 V" g3 v$ s本次笔试程序的内容是数据结构中的线性表的链式存储 6 S. C+ Q4 d5 _, u
程序中出现需要补充的几个主要的函数:线性链表的创建,插入,删除,判断链表是否为循环链表。
  n9 I! Q3 F5 P; _( C8 k. i6 {9 _程序用c语言描述 ,指针一定要掌握好。* \$ b! ~% z' e! ?
" r, C6 F- r* @- Z" [7 m
以下程序自己所写9 K8 K; X7 b$ s6 E. W# z4 d) N
仅供参考:4 T: v9 o2 y! ~! R; }( F
(以下程序在vc6.0中编译通过)
# E0 p5 m) B+ y" a( _/ u0 S3 Q
, b# ?7 |2 e0 F8 J" F$ ~% h9 _; u3 C- E+ i' R  Y5 I9 f
//Copyrights  huchen 1 r+ Z+ a: a. R5 i  D1 ]; V
//( I  v7 [, _9 Z' v% t+ K1 ~
//描述:程序描述了单链表的创建,插入,删除
1 h6 [  ^7 a; e6 @" g//注意:判断是否循环链表由读者自己实现
2 h  s6 `, V0 w* X. F" U//
5 ^, ]" W' ?: v, {5 E//作者:胡琛 <huc87@126.com>
( A$ w6 F: u. _//日期:2007-7-22, 16:38:254 K+ m+ f/ Q" X$ }+ D5 v( H
#include <stdio.h>: x) p/ T# h4 ^# d# o& T) @" e

9 Q; v/ `' J1 q' ?, r" T8 G+ s1 l#define ERROR_OK 0
2 k: V5 A* M7 @( l  G% f9 r#define ERROR_OUT_OF_MEMORY 10 z6 x1 N+ Q; R# E
#define ERROR_OVERFLOW 2
. j) e+ N3 f# |# W
9 J' N$ u. @2 nstruct LNode
$ S0 Q  l, S! d/ E$ Q8 j6 e{
8 A1 I2 l6 L; N. b    int data;
' @8 T1 D% R3 Q7 B5 `    LNode *next;
$ V0 H8 ]! D( W};5 @+ n. H, p5 Q# D8 |
//创建一个链表 length为要创建链表的大小, head为头指针
9 {1 a* k( C, g" r$ B2 q& Cint CreateList(LNode *&head, int length)
$ r: L7 u2 l, J- J: |+ ]* S/ i% g7 E{
- K7 I+ V  y5 x: B5 y* ~0 ~  J    head = new LNode();
. h! a5 ?# B9 z    if(!head)
7 V+ n$ f; _2 x* X/ E+ [1 a5 u    {" \6 c0 @8 b9 H+ X/ d, m' A
        return ERROR_OUT_OF_MEMORY;
1 u+ \4 c- t$ @' }5 P; b- w& ^    }" R0 W5 Z5 `) _/ S% t
    head->next = NULL;
2 J8 I' |- l2 F: v    LNode *p;* M/ P) Z8 I1 a- ]$ y" @( D
    printf("please enter the element:\n");( X' J, B7 s+ C! R
    for(int i = 0; i < length; ++i)
- }  |& J: {  H    {# e! b8 B: |, `
        p = new LNode();
8 u7 p# E8 b) ]2 F7 F# O        if(!p)( G, ]6 Q, I# V- r5 y) G! _8 v
        {' O  B' ~) _* L5 C4 k9 ^. E% U
            return ERROR_OUT_OF_MEMORY;6 u2 P9 `3 ~. \; R0 D/ N5 @
        }
0 _8 e0 S5 r. Q& R0 h        scanf("%d", &(p->data));
8 j+ o, w! r5 {% b0 q- ~9 N        p->next = head->next;
) T& E9 M$ s6 y4 m2 x* `( m        head->next = p;
/ D, I: `4 E  B) {6 J    }6 s# ^1 s3 T" W7 }: _7 S
    return ERROR_OK;. G6 b2 q/ l1 O( Z+ c' @) R
}' `/ t! G& r7 t7 w
//插入一个节点
' v4 _9 H$ s" S. _& Y; Zint Insert(LNode *head, int location)
* c! E1 J  `/ o. Z* t& j0 p0 v{4 Y' S; X2 y0 b6 s2 s
    int index = 1;
) V; v) X& v+ E3 u8 M* U    while(index < location && head->next)
# ~( W5 c; ~- {    {2 s3 v* Z9 C8 v' J# N
        head = head->next;
+ }# F% y, D; r        ++index;; w# f: a. N% B3 Y
    }
3 S8 k+ e2 u( Q! Z    if(!(head->next))
: b, J. ]: ?/ ?1 A3 |2 Z7 B1 \& j    {
9 w5 n2 x* `1 q6 ?% j; S        printf("overflow!\n");
) h/ o' f- @+ N# \        return ERROR_OVERFLOW;
0 H/ d' @5 ?% r( k1 [    }
5 O  X8 ^# Y( E" E( |8 W2 T+ B    LNode *p = new LNode();
$ l: s2 j9 b0 K( R3 c6 D8 v    if(!p)
) _! A7 l# |& q2 v    {
0 R5 r6 S4 w% q. Q3 \/ e        return ERROR_OUT_OF_MEMORY;
3 q; f  U( |- M# s    }1 m" Z( W$ F& p* X/ N2 L! i
    printf("input an number you want insert:\n");
$ k' ]6 N& l5 E    scanf("%d", &(p->data));* C' _1 e( H; a3 a4 ?2 W
    p->next = head->next;
: o8 h6 k) j" ]6 o/ D7 h    head->next = p;( ~3 x8 }9 z! J: B) N  f8 u
) n4 a- Q5 R+ L+ M2 f2 a
    return ERROR_OK;
9 F' o- i: g7 H6 P}) Y* N1 s5 c( N. E% V$ x' w' }1 ]9 P
//删除一个节点
. h% x/ L9 i) u  _6 C5 n  xint Delete(LNode *head, int location)) i( X. }- i+ \" m) u
{
  `" n. o, U+ l- R4 F    int index = 1;5 o4 j2 F$ L9 H* H  Q
    while(index < location && head->next) //index 保证指针指向要插入位置的前一个节点, 7 d, o9 w8 F7 o6 u/ r
    {                                      // 第2个条件保证指针越界后指向最后一个节点
7 i6 Z5 j+ q8 r. q# z" c# k, [        head = head->next;
; v* A  |6 S: _        ++index;$ m1 @1 Z) J6 Z$ U
    }1 y  o! `$ A' `! X3 {' s# u
    if(!(head->next))
& I4 ]% V! G$ r( }9 m    {: i3 Y2 s* T! B) g8 r5 A
        printf("overflow!\n");
/ w9 Z* a; x- R. t        return ERROR_OVERFLOW;, }  }; j' D% f8 w) f
    }
+ S( a1 V) y" Z" l% U4 P2 y    LNode *p = head->next;
, b) V7 a. e8 Q$ [, S' m) [6 [    head->next = p->next;. I4 \+ O- c2 K1 u8 w
    delete p;$ N3 x7 z: k/ E5 h- y9 V0 T
    return ERROR_OK;
, _6 K: I/ Z, n" {9 C( X0 u}
7 \, N, h% f: ]5 Z) o7 D5 a3 jvoid ShowLinkList(LNode *head)1 S6 w1 ]4 I9 C  ^( f, z- m
{; Z3 K+ f7 E) G8 d5 u! L0 Y
    printf("LinkList:");
; O% s; ^! P* i0 n  a4 J. ?    LNode *p = head->next;; X4 c" W8 \+ v' Q7 I1 N" b4 f
    while(p)
# y, ^+ z' t3 p. e6 L% p    {
5 o0 t( j! k) ~* M        printf("%d ", p->data);# x$ n4 x* N9 m% v1 @. f3 ~) y' D
        p = p->next;
1 }/ D5 L" f2 i    }/ a, `4 e* F/ I: N8 H. J
    printf("\n");- _- m9 l8 g# ~0 r, S
}
7 E+ }& ^- X4 g6 t
' a) R  U2 C' P6 Ivoid main()
$ s) @, z  u- u/ ?* X- [{1 h2 Y3 {% c2 Q- G% D
   
# s, o/ v4 x' ?% h7 @! s9 Q    LNode *head = NULL;3 l9 `$ @9 x: |6 }* g
    int initialLength,location;( z" S2 w+ h, z/ U: q/ [
   
+ o# `! t: ^# u/ B    printf("please input an number to initilize the LinkList:\n"); //初始化链表的元素个数
# \# T/ g" U0 v7 g    scanf("%d", &initialLength);# T/ @+ n3 @5 W; t

1 n( j1 E" n, P; ]5 x: f    if(!CreateList(head, initialLength))/ o# k! @8 j& |
    {
" x, C! ~. M  P        printf("Create LinkList Success! \n");
* d# P: b) N4 o3 I9 j: V    }
, C+ r: Z* K6 c9 I8 l7 i  v    ShowLinkList(head);7 K$ R. L  A  [& |
3 G5 l7 s, c( A& ?, A; @
    printf("please input an location you want to insert to:\n");- K5 c4 D, k5 I4 t! G, n
    scanf("%d", &location);4 K3 Q% z/ H$ h' l+ W9 D# P
9 S  B6 U- B- @9 T: R; e: [
    if(!Insert(head, location))
) i- Q9 W8 i2 p4 E) U2 a2 o7 C9 d5 r    {
7 L* z$ |2 Z* c        printf("Insert success!\n");) c2 l( N4 O! |) m" {8 n* a% x
    }2 ?, C8 ^) k) q4 {
    ShowLinkList(head);
* c( S. }, a0 Z8 d- V( L
/ N: `( c  b& y* d* H4 i8 r    printf("please input an location you want to delete:\n");" |1 J  Z" F# g9 J& d) O
    scanf("%d", &location);( W/ N/ e( b3 y6 k" t1 ]

; I8 n& j+ x* U    if(!Delete(head, location))( M, h  c% g% C1 D7 A; s, Y2 L% }
    {) E- m0 q& h6 Y: a
        printf("Delete success!\n");. @( D& d: m) V- c
    }" `1 H) h" i1 r) l8 v2 P% x
    ShowLinkList(head);/ i( H% ]0 y( q2 W1 C) `8 T3 f
}% n& }. \' _! ?/ M: W1 `
6 X, c9 D, I9 h% e, D, ^
第一题总结:把数据结构中的基础打牢(不可能一直考链表)
2 b- O4 v; t+ M$ J4 @- c1 D5 j
, |5 e# v+ S$ Q7 r% M第二题
+ R0 V$ R5 D, X" E英译中
- v$ `4 K) [$ q0 W( V/ l英语文章:长度 和难度都跟四级中阅读理解的文章差不多
! R/ ~4 k  ^# Q. q8 g& g- G, e9 G/ E' t* u7 G5 `% j$ ]
/ f& }9 Y% k) ^, q( O3 U9 |& Y
……, K6 Z, F6 h7 D# n* [
) R7 H4 D& O" F5 r4 r* w) y/ Y1 q
http://bbs.aftjob.com/thread-607297-1-1.html
( N) v0 P- C4 ]4 K+ W. a% e% z; k  R9 C" p) J! g9 U' g5 |
——+ ^( e$ g& V7 D' P4 |' ]7 A
微软(Microsoft)求职俱乐部
6 I1 M' h3 K0 Rhttp://bbs.aftjob.com/group-100-1.html# S+ m( B2 b% L6 V5 A" e$ ~! ^: N( I
2012阿凡提求职手册——IT行业篇
2 w( D) M2 A4 A  C! Vhttp://bbs.aftjob.com/thread-607158-1-1.html' q; W0 R6 _4 Z+ t" d5 h; W1 q9 [! h
—— + ?3 f; S3 E; X& J1 A$ J4 y+ Q
微软笔经篇7 S9 a8 l# _: q; A* ]5 `5 @
http://bbs.aftjob.com/thread-469556-1-1.html
1 @$ K# d+ t/ i% G# [: G微软2007年笔试题8 a' v1 C7 `" _' q
http://bbs.aftjob.com/thread-607298-1-1.html
4 t9 Z5 }5 s8 n& Q3 b) ?微软今天的笔试题目(12月28日)) W, Z0 m& ~& ~% ]
http://bbs.aftjob.com/thread-29793-1-1.html, k: G, g, C8 ]! ^  L
微软笔试题整理
6 g$ t& h- S: n0 z3 m3 Y, ^5 _http://bbs.aftjob.com/thread-607299-1-1.html
* h+ n1 `. c) X/ v8 S2 ]——
0 V7 E; N! h) ]! h阿凡提(aftjob.com)求职社区
  Z) t6 m1 I% t, k7 t" i阿凡提求职俱乐部-国内第一家网络求职俱乐部,提供企业求职俱乐部和高校求职俱乐部交流平台。
7 `, m8 S$ M7 c7 B! `. l—— 9 a3 Y/ G) X+ o7 Y7 }
- K0 ]4 P# y9 h

# h! \6 b& T  n* @
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-4-4 00:25

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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