聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 华为全套完整试题(高级)

华为全套完整试题(高级)

时间:2011-02-13 23:46:06    下载该word文档

华为全套完整试题

高级题

6、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。

slnodetype *Delete(slnodetype *Head,int key){}if(Head->number==key)

{

Head=Pointer->next;

free(Pointer);

break;

}

Back = Pointer;

Pointer=Pointer->next;

if(Pointer->number==key)

{

Back->next=Pointer->next;

free(Pointer);

break;

}

void delete(Node* p)

{

if(Head = Node)

while(p)

}

有一个16位的整数,每4位为一个数,写函数求他们的和。

解释:

整数1101010110110111

1101+0101+1011+0111

感觉应该不难,当时对题理解的不是很清楚,所以写了一个函数,也不知道对不对。

疑问:

既然是16位的整数,11010101101101112进制的,那么函数参数怎么定义呢,请大虾指教。

答案:用十进制做参数,计算时按二进制考虑。

/* n就是16位的数,函数返回它的四个部分之和 */

char SumOfQuaters(unsigned short n)

{

char c = 0;

int i = 4;

do

{

c += n & 15;

n = n >> 4;

} while (--i);

return c;

}

1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数.(华为)

#include

int main()

{

int a[] = {10,6,9,5,2,8,4,7,1,3};

int len = sizeof(a) / sizeof(int);

int temp;

for(int i = 0; i < len; )

{

temp = a[a[i] - 1];

a[a[i] - 1] = a[i];

a[i] = temp;

if ( a[i] == i + 1)

i++;

}

for (int j = 0; j < len; j++)

cout<

return 0;

}

(慧通)

1 写出程序把一个链表中的接点顺序倒排

typedef struct linknode

{

int data;

struct linknode *next;

}node;

//将一个链表逆置

node *reverse(node *head)

{

node *p,*q,*r;

p=head;

q=p->next;

while(q!=NULL)

{

r=q->next;

q->next=p;

p=q;

q=r;

}

head->next=NULL;

head=p;

return head;

}

2 写出程序删除链表中的所有接点

void del_all(node *head)

{

node *p;

while(head!=NULL)

{

p=head->next;

free(head);

head=p;

}

cout<<"释放空间成功!"<

}

3两个字符串,s,t;t字符串插入到s字符串中,s字符串有足够的空间存放t字符串

void insert(char *s, char *t, int i)

{

char *q = t;

char *p =s;

if(q == NULL)return;

while(*p!='\0')

{

p++;

}

while(*q!=0)

{

*p=*q;

p++;

q++;

}

*p = '\0';

}

分析下面的代码:

char *a = "hello";

char *b = "hello";

if(a= =b)

printf("YES");

else

printf("NO");

这个简单的面试题目,我选输出 no(对比的应该是指针地址吧),可在VCYES CNO

lz的呢,是一个常量字符串。位于静态存储区,它在程序生命期内恒定不变。如果编译器优化的话,会有可能ab同时指向同一个hello的。则地址相同。如果编译器没有优化,那么就是两个不同的地址,则不同

写一个函数,功能:完成内存之间的拷贝

memcpy source code:

270 void* memcpy( void *dst, const void *src, unsigned int len )

271 {

272 register char *d;

273 register char *s;

27

275 if (len == 0)

276 return dst;

277

278 if (is_overlap(dst, src, len, len))

279 complain3("memcpy", dst, src, len);

280

281 if ( dst > src ) {

282 d = (char *)dst + len - 1;

283 s = (char *)src + len - 1;

284 while ( len >= 4 ) {

285 *d-- = *s--;

286 *d-- = *s--;

287 *d-- = *s--;

288 *d-- = *s--;

289 len -= 4;

290 }

291 while ( len-- ) {

292 *d-- = *s--;

293 }

294 } else if ( dst < src ) {

295 d = (char *)dst;

296 s = (char *)src;

297 while ( len >= 4 ) {

298 *d++ = *s++;

299 *d++ = *s++;

300 *d++ = *s++;

301 *d++ = *s++;

302 len -= 4;

303 }

304 while ( len-- ) {

305 *d++ = *s++;

306 }

307 }

308 return dst;

309 }

公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)

各种情况包括:

1、参数是指针,检查指针是否有效

2、检查复制的源目标和目的地是否为同一个,若为同一个,则直接跳出

3、读写权限检查

4、安全检查,是否会溢出

memcpy拷贝一块内存,内存的大小你告诉它

strcpy是字符串拷贝,遇到'\0'结束

/* memcpy ─── 拷贝不重叠的内存块 */

void memcpy(void* pvTo, void* pvFrom, size_t size)

{

void* pbTo = (byte*)pvTo;

void* pbFrom = (byte*)pvFrom;

ASSERT(pvTo != NULL && pvFrom != NULL); //检查输入指针的有效性

ASSERT(pbTo>=pbFrom+size || pbFrom>=pbTo+size);//检查两个指针指向的内存是否重叠

while(size-->0)

*pbTo++ == *pbFrom++;

return(pvTo);

}

免费下载 Word文档免费下载: 华为全套完整试题(高级)

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服