找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1073|回复: 0

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

[复制链接]
发表于 2011-5-19 10:33 | 显示全部楼层 |阅读模式
Microsoft实习生面试时的笔试$ L" e, o9 F* \  v( Z# L& L1 |" ]
( C5 |  k- h7 m5 g
zz
( O' H: ], n4 d* T* O' B& P; g3 Y) w( k# e
                  (08年微软实习生)            
' T) Q' H- ?9 X% L; U  S总共2大题8 F/ S% h# i- m3 h7 E$ F
第一题 (数据结构题)
5 V; Q1 d8 U: n7 H+ g读程序 补充程序中缺少的部分 难度不大
! m  S6 }2 p5 t1 @3 J4 M$ o) B! l( ~, F2 q8 B3 T9 s
本次笔试程序的内容是数据结构中的线性表的链式存储 * X9 m9 ^) A6 S+ V7 ^3 y
程序中出现需要补充的几个主要的函数:线性链表的创建,插入,删除,判断链表是否为循环链表。
5 m7 U! t. K9 M! Y程序用c语言描述 ,指针一定要掌握好。7 B- N2 ?8 G. J) W- ^5 @3 |- j0 e
2 k( h  ?  C$ s, q. W
以下程序自己所写
, a/ w% Z( G) N, p) B6 j( R仅供参考:, u' L& @# [. z9 d
(以下程序在vc6.0中编译通过)
4 v: g! n$ [/ A, z- ^7 `! F  \+ ~0 \8 v& k( A
4 F. @# G& p6 a6 N# Y
//Copyrights  huchen " l6 {! ^1 d5 Y7 Z' D
//
$ d4 N7 H2 l& n$ E' x//描述:程序描述了单链表的创建,插入,删除
4 q# |, F, `. s8 f//注意:判断是否循环链表由读者自己实现 2 {6 ]: S6 t' R
//
& }" c! \6 B. i& e4 a//作者:胡琛 <huc87@126.com>7 s4 e" T4 B* ?
//日期:2007-7-22, 16:38:25
# v; `( D0 \$ E/ B4 p. Y+ T#include <stdio.h>( w8 h2 L/ x8 V. ^

& O. S9 E5 L% t- B0 ?5 Q#define ERROR_OK 05 ^. I/ s$ }1 n
#define ERROR_OUT_OF_MEMORY 1% {# [: s% D; [
#define ERROR_OVERFLOW 2; ]0 A% S9 K/ e9 Y
' G8 y( e  m0 e& t; e# q) U. A# ^
struct LNode ) O/ [! A& r1 A" T" F3 `
{' A4 X' |! \& t" d4 ~3 t
    int data;
, Q. E' O% \' m" |2 i    LNode *next;
3 W8 K( v4 y+ y1 E" V8 X};+ z& {! \2 z. n- H
//创建一个链表 length为要创建链表的大小, head为头指针
6 F3 S- f# J7 [) i% E+ ^8 ?! B. n& O+ ?int CreateList(LNode *&head, int length)
3 h$ e# O) j6 `' n6 S2 L{
7 {" o0 E" V8 |1 l7 c- O    head = new LNode();
5 d: V6 E; ~; H$ f. p. \    if(!head)  r7 U$ J! c- G6 i# H: }9 @, @
    {+ v% B2 f- N: y9 c' O
        return ERROR_OUT_OF_MEMORY;
% ^4 y5 H5 i3 u: b9 c    }' ?% @1 e! c! h: }4 S$ I; F7 B
    head->next = NULL;0 _. u8 c( A2 ^- r
    LNode *p;
/ O* v# @% ?% T+ L, J    printf("please enter the element:\n");
& V/ M+ n- A3 {! F    for(int i = 0; i < length; ++i)* V5 i+ u/ }, x7 r& n
    {
0 n0 E+ i  D  W- k( I        p = new LNode();
1 L& C. e* W5 b$ j) T, t/ A        if(!p)
' \6 z$ J: V: [+ y" }        {
+ ~$ e8 U6 j2 d. A6 [; [# O            return ERROR_OUT_OF_MEMORY;# v3 }7 a7 ]3 y$ Y$ e, w: T( t' j
        }+ q3 R  e/ k; b' R8 t0 A8 H
        scanf("%d", &(p->data));
6 v# A( |- `8 }$ |* M* j+ Q* D: b        p->next = head->next;
* z+ D% W" y# M* y7 ]8 Z        head->next = p;' v' `# w3 D: Y& J
    }1 F; L# p% A2 r1 u
    return ERROR_OK;9 @! A% k& a) d5 \5 [/ ^
}' Q" S. ?7 [# ^+ X7 A/ T
//插入一个节点
$ f% ~. {9 j$ ?& w7 Z  c3 z' mint Insert(LNode *head, int location)8 X1 Z% g& H) I# Y( Y( ~
{# w, p" m) @" f0 U, T
    int index = 1;
7 z5 ~) n1 E( v    while(index < location && head->next)
  v! l4 G& A" `5 `  W& k. R& _    {
7 g* Z6 S, w5 d8 C( r' r+ A        head = head->next;
% i% ~; e3 h$ ^        ++index;$ r: U: W: h& T. T
    }
  J4 a/ r9 t0 \9 |; c4 P    if(!(head->next))
: n8 y# g0 K+ Q! f    {
: o4 ?" l3 D  F3 p4 y, r! u        printf("overflow!\n");
; I8 [7 `( O7 x) N& g! K$ f        return ERROR_OVERFLOW;/ ?- Y( G, L+ B0 H
    }
9 f. n% T8 |! k! e1 @/ \' g    LNode *p = new LNode();- p4 b. w( o# O
    if(!p)
/ P6 T; ~6 s# M7 D/ h) ^7 a  n    {
6 o- M- u. w# }( n  u* I        return ERROR_OUT_OF_MEMORY;2 e$ }. v) A8 D* V
    }# I# m0 I  ^9 `
    printf("input an number you want insert:\n");8 N( U/ L$ T/ d7 P# e. Y
    scanf("%d", &(p->data));' ?% r7 [' ^- B, o! F
    p->next = head->next;  `$ q. V' X* F: R' M( w1 A
    head->next = p;5 y6 e8 |5 n7 L, z

& b0 Z2 |' K) U" K$ H  G    return ERROR_OK;6 |2 a% Y( M6 j
}
/ m: E# K6 f4 ], _5 b1 s8 U2 X//删除一个节点
7 x4 }0 _2 _" m( s- Sint Delete(LNode *head, int location)$ B- Y1 C. \# h4 P. h
{
' i' R, E0 J9 h: P0 z5 T    int index = 1;
4 h. a8 I1 h# Y3 @4 N, s    while(index < location && head->next) //index 保证指针指向要插入位置的前一个节点, * N% n( B8 ]  I/ m9 `
    {                                      // 第2个条件保证指针越界后指向最后一个节点, A. m, G# {! `6 C6 D
        head = head->next;& h5 J: t7 b$ l: S( V9 m
        ++index;
4 R5 j# }9 v* D    }
% O- ^0 _2 y# Q0 a2 ~; \) b) A    if(!(head->next))
% p+ z5 o; h7 \- Q4 p8 t    {
& }$ M( S. u5 P% X9 A4 ~; {7 B        printf("overflow!\n");
3 j- S- t$ @) C: m        return ERROR_OVERFLOW;
. M% c" Y9 e/ z$ r& B+ [    }7 ]6 O/ [' @' [
    LNode *p = head->next;' I5 v: B- w) p6 k8 w, H
    head->next = p->next;
! Q$ e) z$ b. m3 L, Q4 P* |" H! ]. m    delete p;
" G. p& O5 E2 L2 Q    return ERROR_OK;! z$ D1 j1 ]5 @! N- V! v1 |) Z
}: `* I; w3 \8 w0 _, D$ l
void ShowLinkList(LNode *head)% T0 k9 c, V: M1 _5 ^
{
* n; e+ T/ c) W$ s    printf("LinkList:");
  }7 S$ s  p3 h) o  }: Q. s    LNode *p = head->next;$ F; I" r3 x8 D) w4 ^8 @0 m
    while(p)0 Z' ]- ^8 u0 y) N
    {, v: C+ J6 q+ E. y5 F
        printf("%d ", p->data);+ L( s! A" r6 ~. v4 W% a. q
        p = p->next;
- K' r8 Y0 F( H% n    }' |; G$ {' @5 X9 g: {/ P
    printf("\n");
( u7 b% q1 T+ G& r) W# _}: K) j5 F9 M) L8 P/ g

* b% S1 `9 R: W' D7 a' \' zvoid main(). v% q- n7 |8 t# h; u0 w
{8 s% D* h9 R/ L
   
3 ]# X' y0 U2 k    LNode *head = NULL;% x2 f2 m' G  j$ d/ S( v2 e
    int initialLength,location;$ x& K' R1 ^9 I, ?4 c; P, @  t7 _  ~
    # J" u8 `7 v  ~9 D6 b( i1 p
    printf("please input an number to initilize the LinkList:\n"); //初始化链表的元素个数
! m* P- N9 H8 K8 E3 |- t. J; i, @    scanf("%d", &initialLength);4 e' k! L% C0 N, ~) `  v# _* A- Q9 l
( l/ v+ {3 f" Z. O* H
    if(!CreateList(head, initialLength))
+ L& y4 ?% |- Z, n! G    {
1 Z4 W% A6 ?) E5 H. u        printf("Create LinkList Success! \n");4 l! ]2 Y3 L4 e5 k' a
    }' P( b! w% I6 F5 w1 X
    ShowLinkList(head);. K- ?0 n4 u! \7 C3 X

! H9 e1 R/ K3 E' f' E% E9 q) q    printf("please input an location you want to insert to:\n");# g0 G9 C* J5 h5 c
    scanf("%d", &location);
! u# _4 x# x+ Q( O2 h# G) l! |0 s8 h6 o/ L2 y
    if(!Insert(head, location))  z- k; H4 R/ V2 y; ^
    {6 T, @! E0 B0 [
        printf("Insert success!\n");* b7 c& [( s3 v7 ?
    }9 _8 I' s7 `5 @0 l! |
    ShowLinkList(head);) |2 {0 T+ b9 W- }# K( e) B  m: f

) C) @! U, A7 \% b' l( u) Z    printf("please input an location you want to delete:\n");
  `5 U# g% X% g$ X6 U+ A+ m7 F    scanf("%d", &location);/ C! t. ~4 m- o- J

( E% L: W) a: C1 d4 V. }    if(!Delete(head, location))
6 q7 f- z  W8 k7 t  w    {& Q; i; v  C; ^. U  T; B/ [
        printf("Delete success!\n");
5 I  r" t" n- C0 p$ |) n3 `    }
- M, @- b7 ?# T2 v    ShowLinkList(head);, O) K; r8 s' ^, a- X& J5 ~$ H. y
}! I8 ]9 @) Q1 e

; U1 Y* B  u7 l% ?7 N7 O0 @第一题总结:把数据结构中的基础打牢(不可能一直考链表)
" a- D# a; F7 @& c
7 E4 t% ~3 n6 |第二题
& V1 l1 u4 m+ q" f4 L英译中
$ [' @, Z) ^5 h6 P) E, l英语文章:长度 和难度都跟四级中阅读理解的文章差不多4 E+ |5 ~, i+ \& e$ x

- T3 l' ^( s3 c% n
6 x3 H- {$ Q& O# |2 P" s……
' z3 W7 ^8 [# H3 z$ T
/ Q1 W5 \. W6 d5 n  D  S- N# fhttp://bbs.aftjob.com/thread-607297-1-1.html
: `" z( I8 `9 y
0 e( P) R* J- Y4 i+ v——
" Y4 q& L9 A' v/ h  e微软(Microsoft)求职俱乐部" v  d* t7 e# T! `2 p* L0 q
http://bbs.aftjob.com/group-100-1.html
3 d+ ~0 T* Z% ^9 {4 V2012阿凡提求职手册——IT行业篇
  G7 N7 l. i- A9 q# r  z4 Yhttp://bbs.aftjob.com/thread-607158-1-1.html
0 G# {: ]7 y5 y7 n' Z# T0 S——
; J) Z$ Q$ R' x微软笔经篇
* K  \% k/ V$ _; Ohttp://bbs.aftjob.com/thread-469556-1-1.html  Q) i7 w6 x* [; J, x
微软2007年笔试题
. Y; ]/ m7 U, R- Hhttp://bbs.aftjob.com/thread-607298-1-1.html" l; J8 V5 m/ b& W9 H
微软今天的笔试题目(12月28日)- D2 `9 E5 t. D$ P) W! k  C
http://bbs.aftjob.com/thread-29793-1-1.html/ D/ \: r! {9 G" b
微软笔试题整理
3 z* `0 N2 b. ]4 N& c. ~' Dhttp://bbs.aftjob.com/thread-607299-1-1.html
( O3 }/ K! w& B& t——
  l9 T, e; N' ^0 ^阿凡提(aftjob.com)求职社区
! x' y; f3 s4 |7 Z! L阿凡提求职俱乐部-国内第一家网络求职俱乐部,提供企业求职俱乐部和高校求职俱乐部交流平台。5 Z' z: G  d5 k
—— 6 H$ a4 b* _! s; x7 i7 O# r3 y: K$ u
) m6 F8 [8 W' W; y# h

  p* r3 o7 A  o7 G, _( A  Y
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-11 15:29

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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