大数据结构习题解答.docx

上传人:b****0 文档编号:402334 上传时间:2022-10-09 格式:DOCX 页数:15 大小:110.76KB
下载 相关 举报
大数据结构习题解答.docx_第1页
第1页 / 共15页
大数据结构习题解答.docx_第2页
第2页 / 共15页
大数据结构习题解答.docx_第3页
第3页 / 共15页
大数据结构习题解答.docx_第4页
第4页 / 共15页
大数据结构习题解答.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

大数据结构习题解答.docx

《大数据结构习题解答.docx》由会员分享,可在线阅读,更多相关《大数据结构习题解答.docx(15页珍藏版)》请在冰豆网上搜索。

大数据结构习题解答.docx

大数据结构习题解答

习题一

1填空题

(1)(数据元素、或元素、或结点、或顶点、或记录〕是数据的根本单位,在计算机程序中作为一个整体进展考虑和处理。

(2)〔数据项、或字段〕是数据的最小单位,〔数据元素〕是讨论数据结构时涉与的最小数据单位。

(3)从逻辑关系上讲,数据结构主要分为(集合)、(线性结构)、(树结构)和(图)。

(4)数据的存储结构主要有〔顺序存储结构〕和〔链式存储结构〕两种根本方法,不论哪种存储结构,都要存储两方面的容:

〔数据元素〕和〔它们之间的关系〕。

(5)算法具有5个特性,分别是〔输入〕、〔输出〕、〔有穷性〕、〔确定性〕、〔可行性〕。

(6)算法的描述方法通常有(自然语言)、(流程图)、(程序设计语言)、(伪代码)4种,其中,(伪代码)被称为算法语言。

(7)一般情况下,一个算法的时间复杂度是算法〔输入规模〕的函数。

(8)设待处理问题的规模为n,假如一个算法的时间复杂度为一个常数,如此表示成数量级的形式为(O

(1)),假如为n*log25n,如此表示成数量级的形式为(O(n*log2n))。

2.选择题:

(1)C,D

(2)B(3)B(4)A(5)D(6)A(7)C(8)C,E

习题二

1.填空题

(1)在顺序表中,等概率情况下,插入和删除一个元素平均需移动(表长的一半)个元素,具体移动元素的个数与(表的长度)和(数据元素所在的位置)有关。

(2)一个顺序表的第一个元素的存储地址是100,每个数据元素的长度是2,如此第5个数据元素的存储地址是〔108〕。

(3)设单链表中指针p指向单链表的一个非空结点A,假如要删除结点A的直接后继,如此需要修改指针的操作为〔p->next=(p->next)->next,或者q=p->next;p->next=q->next〕。

(4)单链表中设置头结点的作用是(方便运算,减少程序的复杂性,使得空表和非空表处理统一)。

(5)非空的循环单链表由头指针head指示,如此其尾结点(由指针p所指)满足(p->next=head)。

(6)在有尾指针rear指示的循环单链表中,在表尾插入一个结点s的操作序列是〔s->next=rear->next;rear->next=s;rear=s〕,删除开始结点的操作序列是〔q=rear->next->next;rear->next->next=q->next;deleteq;〕。

注:

假设此循环单链表有表头结点

(7)一个具有n个结点的单链表,在p所指结点后插入一个新结点s的时间复杂性为〔O

(1)〕;在给定值x的结点后插入一个新结点的时间复杂性为(O(n)〕。

(8)可由一个尾指针惟一确定的链表有(循环链表)、(双链表)、(双循环链表)。

2.选择题:

(1)A,B

(2)D(3)B(4)A(5)A(6)D(7)B(8)B(9)C(10)B(11)B(12)D(13)A(14)A

5.算法设计

(1)设计一个时间复杂度为O(n)的算法。

实现将数组A[n]中所有元素循环左移k个位置。

算法思想:

要使a1…akak+1…an->ak+1…ana1…ak,可以先让a1…akak+1…an->ak…a1an…ak+1,再让ak…a1an…ak+1->ak+1…ana1…ak,参见第1章16页的思想火花

算法:

voidconverse(Ta[],inti,intj){

for(s=i;s<=(i+j)/2;s++)//将数组a中从i到j中的元素倒置

{temp=a[s];a[s]=a[j-s+i];a[j-s+i]=temp;}}

voidmove(Ta[],k)

{converse(a,0,k-1);//3次调用函数converse

converse(a,k,n-1);

converse(a,0,n-1);

}

(2)数组A[n]中的元素为整型,设计算法将其调整为左右两局部,左边所有元素为奇数,右边所有元素为偶数,并要求算法的时间复杂度为O(n).

解法1:

voidtiaozhen(TA[],intn)

{s=0;t=n-1;

while(s

{while(A[s]%2!

=0)s++;//s=s+1

while(A[t]%2==0)t--;

if(s

}}

或voidtiaozhen(TA[],intn)

{s=0;t=n-1;

while(s

{if(A[s]%2!

=0)s++;//s=s+1

elseif(A[t]%2==0)t--;

else{temp=A[s];A[s]=A[t];A[t]=temp;s++;t--;}

}}

(3)试编写在无头结点的单链表上实现线性表的插入操作的算法,并和带头结点的单链表上的插入操作的实现进展比拟

voidLinkList_1:

:

Insert(inti,Tx){

if(i<=0)throw"输入的插入位置值小于1";

if(i==1){s=newNode;s->data=x;s->next=first;first=s;}

else{p=first;j=0;

while(p&&jnext;j++;}

if(!

p)throw“插入位置值太大";

else{s=newNode;s->data=x;s->next=p->next;p->next=s;}

}

}

(4)试分别以顺序表和单链表作存储结构,各写一实现线性表就地逆置的算法。

算法思想:

顺序表的程序参见题〔1〕的converse.单链表的程序如下,设单链表有表头结点.

voidLinkList:

:

converse()

{p=first->next;

first->next=NULL;

while(p){

q=p->next;p->next=first->next;

first->next=p;p=q;

}

}

(5)假设在长度大于1的循环链表中,既无头结点也无头指针,s为指向链表中某个结点的指针,试编写算法删除结点s的前驱结点。

voidLinkList:

:

deleteS(Node*s)

{p=s;

while(p->next->next!

=s)p=p->next;

{q=p->next;p->next=q->next;

deleteq;

}

(6)一单链表中的数据元素含有三类字符:

字母、数字和其它字符。

试编写算法,构造三个循环链表,使每个循环链表中只含同一类字符。

算法思想:

1〕构造3个带表头结点的循环链表,分别为zifu,shuzi和qita;

2〕遍历单链表,按单链表中的当前数据元素的分类插入相应的链表

voidfl(Node*zifu,Node*shuzi,Node*qita)

{s=newNode;s->next=s;zifu=s;

s=newNode;s->next=s;shuzi=s;

s=newNode;s->next=s;qita=s;

a=zifu;b=shuzi;c=qita;

p=first->next;//设单链表带头结点

while(p){q=p;p=p->next;

if((q->data>='a'&&q->data<='z')||(q->data>='A'&&q->data<='A'))

{q->next=a->next;a->next=q;a=q;}

elseif(q->data>='0'&&q->data<='9')

{q->next=b->next;b->next=q;b=q;}

else{q->next=c->next;c->next=q;c=q;}

}

deletefirst;

}

(7)设单链表以非递减有序排列,设计算法实现在单链表中删除一样的多余结点。

解:

voidLinkList:

:

deleteALL()

{p=first->next;//假设单链表带表头结点。

while(p)

{if(p->next!

=NULL&&p->next->data==p->data)

{q=p->next;p->next=q->next;deleteq;}

elsep=p->next;}

}

(8)判断带头结点的双循环链表是否对称。

解boolLinkList:

:

equal(DulNode*first)

{p=first->next;q=first->prior;

while(p!

=q&&p->prior!

=q)

if(p->data==q->data)

{p=p->next;q=q->prior;}

else{return0;}

return1;

}

----------------------------------------------------------------------------------------------------------------------------------------

习题三

1填空题

(1)设有一个空栈,栈顶指针为1000H,经过push、push、pop、push、pop、push、push后,栈顶指针为(1003H)。

(2)栈结构通常采用的两种存储结构是(顺序存储结构和存储结构\顺序栈和链栈),其判定栈空的条件分别是(top=-1,top=NULL),判断栈满的条件分别是(top=MaxSize-1,存满/存无可用空间)。

(3)(栈)可作为实现递归函数调用的一种数据结构。

(4)表达式a*(b+c)-d的后缀表达式是(abc+*d-)。

(5)栈和队列是两种特殊的线性表,栈的操作特性是(后进先出),队列的操作特性是(先进先出),栈和队列的主要区别在于(插入、删除运算的限定不一样)。

(6)循环队列的引入是为了克制(假溢出)。

(7)一维数组Data[n]用来表示循环队,队头指针front和队尾指针rear定义为整型变量,计算队中元素个数的公式是((rear-front+n)%n)。

(8)用循环链表表示的队列长度为n,假如只设头指针,如此出队和入队的时间复杂度分别是(O

(1))和(O(n))。

2.选择题:

(1)C

(2)D(3)C(4)B(5)B(6)B(7)D(8)A(9)C

(1)①不可以,因为有序列C,A,B.

②可以,push,push,push,pop,pop,pop,push,pop,push,pop.

(2)见书本

(3)栈顶元素是6,栈底元素是1.

(4)队尾元素是9,队头元素是5.

(5)①③④合法,②不合法.

习题四

1.填空题

(1)串是一种特殊的线性表,其特殊性表现在(数据元素的类型为字符型)。

(2)两个串相等的充分必要条件是(它们的长度相等且对应位置的字符一样)。

(3)数组通常只有两种运算,分别是(存取)和(修改),这决定了数组通常采用〔顺序存储〕结构来实现存储。

(4)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1