《动态分配内存与数据结构》课后习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《动态分配内存与数据结构》习题

学号姓名

一、选择题

1、是一种限制存取位置的线性表,元素的存取必须服从先进先出的规则。

A.顺序表B.链表C.栈D.队列

2、是一种限制存取位置的线性表,元素的存取必须服从先进后出的规则。

A.顺序表B.链表C.栈D.队列

3、与顺序表相比,链表不具有的特点是。

A.能够分散存储数据,无需连续内存空间

B.插入和删除无需移动数据

C.能够根据下标随机访问

D.只要内存足够,没有最大长度的限制

4、如果通过new运算符动态分配失败,返回结果是。

A.-1 B.0

C.1D.不确定

5、实现深复制中,不是必须自定义的。

A.构造函数B.复制构造函数

C.析构函数D.复制赋值操作符函数

6、分析下列代码是否存在问题,选择合适的选项:。

int main(void)

{

int *p = new int [10];

p = new int [10];

delete [] p;

p = NULL;

return 0;

}

A.没有问题 B.有内存泄漏

C.存在空悬指针 D.存在重复释放同一空间

7、通过new运算符动态分配的对象,存储于内存中的。

A.全局变量与静态变量区 B.代码区 C.栈区 D.堆区

8、下列函数中,可以是虚函数。

A.构造函数 B.析构函数 C.静态成员函数 D.友元函数

9、关于通过new运算符动态创建的对象数组,下列判断中是错误的。

A. 动态创建的对象数组只能调用默认构造函数

B. 动态创建的对象数组必须调用delete []动态撤销

C. 动态创建的对象数组的大小必须是常数或常变量

D. 动态创建的对象数组没有数组名

10、顺序表不具有的特点是

A. 元素的存储地址连续

B. 存储空间根据需要动态开辟,不会溢出

C. 可以直接随机访问元素

D. 插入和删除元素的时间开销与位置有关

11、假设一个对象Ob1的数据成员是指向动态对象的指针,如果采用浅复制的方式复制该对象得到对象Ob2,那么在析构对象Ob1和对象Ob2时会的问题。

A. 有重复释放

B. 没有

C. 内存泄漏

D. 动态分配失败

12、假设对5个元素A、B、C、D、E进行压栈或出栈的操作,压栈的先后顺序是ABCDE,则出栈的先后顺序不可能是。

A. ABCDE

B. EDCBA

C. EDBCA

D. BCADE

13、假设对4个元素A、B、C、D、E进行压栈或出栈的操作,压栈的先后顺序是ABCD,则出栈的先后顺序不可能是。

A. ABCD

B. DCBA

C. BCAD

D. DCAB

14、通过new运算符动态创建的对象的存放在中。

A. 代码区

B. 栈区

C. 自由存储区

D. 全局数据区

15、链表不具有的特点是。

A. 元素的存储地址可以不连续

B. 存储空间根据需要动态开辟,不会溢出

C. 可以直接随机访问元素

D. 插入和删除元素的时间开销与位置无关

16、有关内存分配和释放的说法,下面当中错误的是

A.new运算符的结果只能赋值给指针变量

B.动态创建的对象数组必须调用delete []动态撤销

C.用new分配的空间位置是在内存的栈区

D.动态创建的对象数组没有数组名

17、关于栈,下列哪项不是基本操作

A.删除栈顶元素

B.删除栈底元素

C.判断栈是否为空

D.把栈置空

18、关于链表,说法错误的是

A. 元素的存储地址可以不连续

B. 存储空间根据需要动态开辟,不会溢出

C. 必须是单向的,不能是双向的或者是环形的。

D. 插入和删除元素的时间开销与位置无关

19、关于线性链表,其不具备的特点是

A.链表不需要事先分配空间,可以根据需要动态分配

B.链表和数组一样可随机访问表内任一元素

C.插入删除不需要移动表内的元素

D.链表所需空间大小与其节点数成正比

20、下列关于队列的描述中正确的是

A.在队列中只能插入元素而不能删除元素

B.在队列中只能删除元素而不能插入元素

C.队列是特殊的线性表,只能在一端插入或删除元素

D.队列是特殊的线性表,只能在一端插入元素,而在另一端删除元素

21、设内存分配语句int *p=new int,选择合适的填充使P所指的存储单元赋初值28。

A.(28) B.[28] C.{28} D.*28

22、对于循环队列,下列叙述中正确的是

A.队头指针是固定不变的

B.队头指针一定大于队尾指针

C.队头指针一定小于队尾指针

D.队头指针可以大于队尾指针,也可以小于队尾指针

23、下列关于线性链表的叙述中,正确的是

A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致

B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续

C.进行插入与删除时,不需要移动表中的元素

D.以上三种说法都不对

24、设有如图的线性链表,其中p,q,r都为指向链表中节点的指针。

先需要将上述链表当中q和r所指的节点交换位置,同时保持链表的连续,则下列语句当中无法胜任的是__________

A. q->next=r->next; p->next=r; r->next=q;

B. p->next=r; q->next=r->next; r->next=q;

C. q->next=r->next; r->next=q; p->next=r;

D. r->next=q; p->next=r; q->next=r->next;

二、填空题

1、在长度为10 的顺序存储的线性表中插入一个元素,最坏情况下需要移动表

中个元素。

2、设某循环队列的容量为40,头指针front=3(指向队头元素的前一位置),尾指针rear=25(指向队尾元素),则该循环队列中共有个元素。

3、假设有一长度为20的线性表用来存储栈,如果栈底元素bottom=19,栈顶元素top=10,则该栈当中具有个元素。

4、假设有int *p = new int [20],则当释放该数组时,应用语句来完成。

5、单向链表的节点分为域和域两部分。如果需要实现环形链表,则需要把最后一个节点的指向。

6、一般情况下,使用系统提供的默认析构函数就可以了,但当对象的成员中使用了

运算符动态分配内存空间时,就必须以正确释放对象空间。为了对象间能正确赋值,还必须要。

7、通过new运算符动态创建的对象的存放在中。

8、默认复制构造函数是按成员复制,称为

9、void a(node *p,Datatype x){

node *q=new node;

q->info=x;

q->link=p->link;

p->link=q;

}

以上a函数实现的功能是

10、对含有动态分配的数据成员的类对象应该采用复制,动态分配的资源通常要求在中释放。

三、程序阅读题

1、指出程序的运行结果:

#include

using namespace std;

class stack{

int *rep;

int size,top;

public:

stack(int n=10):size(n){

cout<<"Initial Constructor"<

rep=new int [size];top=0;

}

stack(stack &s):size(s.size) {

cout<<"Copy Constructor"<

rep=new int[size];

相关文档
最新文档