好文档 - 专业文书写作范文服务资料分享网站

c,,程序员面试宝典

天下 分享 时间: 加入收藏 我要投稿 点赞

竭诚为您提供优质文档/双击可除

c,,程序员面试宝典

篇一:程序员面试宝典(c++例题) 第3章链表 3.4堆栈的实现

说明:请对堆栈这种数据结构做出评论。用c++语言来实现一个堆栈,你可以选用链表或动态数组来实现你的堆栈;并请对你的决定做出解释。你为堆栈设计的程序接口必须完备、规范、和易于使用。 3.5链表的尾指针

说明:有一个单向链表,它的元素全都是些整数。head和tail分别指向该链表第一个元素(即头元素)和最后一个元素(即尾元素)的全局性指针。请实现调用接口如下所示的两个c语言函数:

intdelete(element*elem);intinsertafter(element*elem,intdata);

delete函数只有一个输入参数,他就是那个将被删除的元素。insertafter函数由两个输入参数,第二个输入参数给出了新元素的取值,它将被插入到第一个输入参数所指定

第 1 页 共 19 页

的元素的后面。当需要把新元素插入到链表的开头作为新的头元素时,函数insertafter的第一个输入参数(即被声明为element类型的那个输入参数)将被设置为null。如果执行成功,这两个

3.6对Removehead函数进行纠错

说明:下面是一个用来删除单向链表的头元素的函数。请找出其中的程序漏洞并加以纠正。

voidRemovehead(node*head){free(head);head=head->next;}

3.7链表中的倒数第m个元素

说明:给定一个单向链表,请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的最后一个元素(尾元素)将被返回。 3.8链表的扁平化

说明:给定一个双向链表。这个双向链表中的每一个元素除固有的后指针和前指针外,还有子指针,每个子指针可能指向也可能不指向另一个双向链表。而那些子双向链表本身还可能有一个或者多个子双向链表,从而形成一种多层次的数据结构,如图所示:

对这个链表进行扁平化,使全体节点都出现在一个只有

第 2 页 共 19 页

一个层次的双向链表里。已知条件只有原多层次双向链表的第一层次的头指针和尾指针。下面是各节点的C++语言struct定义:

structnode{node*next;node*prev;node*child;intvalue; 3.9空链表与循环链表 篇二:c面试宝典上 c++程序员面试宝典(1)

1.new、delete、malloc、free关系

(1)delete会调用对象的析构函数,new调用构造函数。

malloc申请内存空间,free只会释放内存。 (2)malloc与free是c++/c语言的标准库函数,new/delete是c++的运算符。

(3)它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。

(4)对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此c++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意

第 3 页 共 19 页

new/delete不是库函数。

(5)都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new会自动调用对象的构造函数。delete会调用对象的destructor,而free不会调用对象的destructor. 2.delete与delete[]区别

delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。

delete与new配套,delete[]与new[]配套 memtest*mtest1=newmemtest[10]; memtest*mtest2=newmemtest; int*pint1=newint[10]; int*pint2=newint; delete[]pint1;//-1-

delete[]pint2;//-2-报错,要使用delete delete[]mtest1;//-3-

delete[]mtest2;//-4-报错,使用delete

这就说明:对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型,delete和delete[]不能互用。delete[]删除一个数组,delete删除一个指针。

简单来说,用new分配的内存,用delete删除;用new[]

第 4 页 共 19 页

分配的内存,用delete[]删除。delete[]会调用数组元素的析构函数。内部数据类型没有析构函数,所以问题不大。如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。 3、继承优缺点

优点:类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变父类的实现。 缺点:

(1)因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现。

(2)父类通常至少定义了子类的部分行为,父类的任何改变都可能影响子类的行为。如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。 4、什么是“引用”?申明和使用“引用”要注意哪些问题?

答:引用就是某个目标变量的“别名”(alias),对引用的操作与对变量直接操作效果完全相同。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。

声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,

第 5 页 共 19 页

c,,程序员面试宝典

竭诚为您提供优质文档/双击可除c,,程序员面试宝典篇一:程序员面试宝典(c++例题)第3章链表3.4堆栈的实现说明:请对堆栈这种数据结构做出评论。用c++语言来实现一个堆栈,你可以选用链表或动态数组来实现你的堆栈;并请对你的决定做出解释。你为堆
推荐度:
点击下载文档文档为doc格式
34nzp3tlb87zlrl1bkfq6d7jn4l8uv0138l
领取福利

微信扫码领取福利

微信扫码分享