当前位置:文档之家› 《动态分配内存与数据结构》课后习题(含答案)

《动态分配内存与数据结构》课后习题(含答案)


6、分析下列代码是否存在问题,选择合适的选项: int main(void) { int *p = new int [10]; p = new int [10]; delete [] p; p = NULL; return 0; } A.没有问题 C.存在空悬指针
B.有内存泄漏 D.存在重复释放同一空间 D 。 D.堆区
3、写出程序的运行结果 #include <iostream> #include <string> using namespace std; template <typename T> class Node { public: T data; Node<T> *link; Node(const T&info) {data=info;link=NULL;} }; template <typename T> class OrderedLink { Node<T> *head; public: OrderedLink() {head=NULL;} OrderedLink(const T*list,int num) { head = NULL;
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 的顺序存储的线性表中插入一个元素,最坏情况下需要移动表 中 10 个元素。
2、 设某循环队列的容量为 40, 头指针 front=3 (指向队头元素的前一位置) , 尾指针 rear=25 (指向队尾元素),则该循环队列中共有 22 个元素。
3、假设有一长度为 20 的线性表用来存储栈,如果栈底元素 bottom=19,栈顶元素 top=10, 则该栈当中具有 10 个元素。 delete []p 语句来完
22、对于循环队列,下列叙述中正确的 是 D A.队头指针是固定不变的 B.队头指针一定大于队尾指针 C.队头指针一定小于队尾指针 D.队头指针可以大于队尾指针,也可以小于队尾指针 23、下列关于线性链表的叙述中,正确的 是 C A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致 B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续 C.进行插入与删除时,不需要移动表中的元素
《动态分配内存与数据结构》习题
学号 一、选择题 1、 D
姓名
是一种限制存取位置的线性表,元素的存取必须服从先进先出的规则。 B.链表 C.栈 D.队列
A.顺序表 2、 C
是一种限制存取位置的线性表,元素的存取必须服从先进后出的规则。 B.链表 C.栈 C 。 D.队列
A.顺序表
3、与顺序表相比,链表不具有的特点是
4、假设有 int *p = new int [20],则当释放该数组时,应用 成。 5、单向链表的节点分为 地址 域和 地址域 数据域 指向
域两部分。如果需要实现环形链 头节点 。
表,则需要把最后一个节点的
6、一般情况下,使用系统提供的默认析构函数就可以了,但当对象的成员中使用了 new 运算符动态ห้องสมุดไป่ตู้配内存空间时,就必须 自定义析构函数 。 中。 以正确释放对象
B. EDCBA
13、假设对 4 个元素 A、B、C、D、E 进行压栈或出栈的操作,压栈的先后顺序是 ABCD,则 出栈的先后顺序不可能是 D A. ABCD B. DCBA 。 C. BCAD C D. DCAB 中。 D. 全局数据区
14、通过 new 运算符动态创建的对象的存放在 A. 代码区 B. 栈区 C 。
C. 自由存储区
15、链表不具有的特点是
A. 元素的存储地址可以不连续 B. 存储空间根据需要动态开辟,不会溢出 C. 可以直接随机访问元素 D. 插入和删除元素的时间开销与位置无关 16、有关内存分配和释放的说法,下面当中错误的是 A.new 运算符的结果只能赋值给指针变量 B.动态创建的对象数组必须调用 delete []动态撤销 C.用 new 分配的空间位置是在内存的栈区 D.动态创建的对象数组没有数组名 17、关于栈,下列哪项不是基本操作 B A.删除栈顶元素 C
} stack s2(ptr[0]); for(i=0;i<2;i++) cout<<s2.pop()<<','; s2.push(ptr[1].pop()); ptr[0].push(ptr[1].pop()); s2.push(ptr[1].pop()); while(!s2.isEmpty()) cout<<s2.pop()<<','; cout<<endl; delete[] ptr; return 0; }
D.以上三种说法都不对 24、设有如图的线性链表,其中 p,q,r 都为指向链表中节点的指针。
先需要将上述链表当中 q 和 r 所指的节点交换位置, 同时保持链表的连续, 则下列语句 当中无法胜任的是____D_______ A. q->next=r->next; p->next=r; r->next=q;
for(;num>0;num--,list++) Insert(*list); } ~OrderedLink() { while(head!=NULL) { Node<T> *p=head; head=p->link; delete p; } } void Insert(const T&data) { Node<T> *p = new Node<T>(data),*q = head; if(!q) head = p; else if(p->data>q->data) { p->link = head; head = p; } else { while(q->link&&p->data>q->link->data) q = q->link; if(q->link) p->link=q->link; q->link=p; } } void show() { Node<T> *p = head; while(p) { cout<<p->data<<endl; p = p->link; } } };
B.删除栈底元素 C.判断栈是否为空 D.把栈置空 18、关于链表,说法错误的是 C
A. 元素的存储地址可以不连续 B. 存储空间根据需要动态开辟,不会溢出 C. 必须是单向的,不能是双向的或者是环形的。 D. 插入和删除元素的时间开销与位置无关 19、关于线性链表,其不具备的特点 是 B A.链表不需要事先分配空间,可以根据需要动态分配 B.链表和数组一样可随机访问表内任一元素 C.插入删除不需要移动表内的元素 D.链表所需空间大小与其节点数成正比 20、下列关于队列的描述中正确的 是 D A.在队列中只能插入元素而不能删除元素 B.在队列中只能删除元素而不能插入元素 C.队列是特殊的线性表,只能在一端插入或删除元素 D.队列是特殊的线性表,只能在一端插入元素,而在另一端删除元素 21、设内存分配语句 int *p=new int 值 28。 A.(28) B.[28] C.{28} D.*28 A ,选择合适的填充使 P 所指的存储单元赋初
空间。为了对象间能正确赋值,还必须要 重载=运算符 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 函数实现的功能是 在点 p 的后面插入数值为 x 的节点 10、对含有动态分配的数据成员的类对象应该采用 源通常要求在 三、程序阅读题 1、指出程序的运行结果: #include <iostream> using namespace std; class stack{ int *rep; int size,top; public: stack(int n=10):size(n){ cout<<"Initial Constructor"<<endl; rep=new int [size];top=0; } stack(stack &s):size(s.size) { cout<<"Copy Constructor"<<endl; rep=new int[size]; for (int i=0;i<size;i++) rep[i]= s.rep[i]; top=s.top; } ~stack(){ cout<<"Destructor"<<endl; delete [] rep; } void push(int a) {rep[top]=a; top++;} int pop(){--top; return rep[top];} bool isEmpty() const{return top == 0;} }; void main(void) { stack s1; for(int i=1;i<5;i++) s1.push(i); 析构函数 中释放。 深 复制,动态分配的资
A.能够分散存储数据,无需连续内存空间 B.插入和删除无需移动数据 C.能够根据下标随机访问 D.只要内存足够,没有最大长度的限制 4、如果通过 new 运算符动态分配失败,返回结果是 B A.-1 C.1 5、实现深复制中, A. 构造函数 C. 析构函数 B.0 D.不确定 A 不是必须自定义的。 B. 复制构造函数 D. 复制赋值操作符函数 B 。 。
相关主题