2017年上半年数据结构(C++)第一次作业

合集下载

数据结构第一次作业答案.

数据结构第一次作业答案.

假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。

请编写算法将这两个单链表归并为一个按元素值递增次序排列的单链表。

【解答】算法的基本设计思想:因为两链表已按元素值递增次序排列,将其合并是,均从第一个结点起进行比较,将小的结点链入链表中,同时后移链表工作指针。

该问题要求结果链表按元素值递减次序排列,故新链表的建立,应该采用头插法(也就是书本上讲的那种从链表中插入元素值的方法。

比较结束后,可能会有一个链非空,此时用头插法将剩下的结点依次插入新链表中即可。

算法实现如下: void MergeList(ListList &La,LinkList &Lb {LinkList r,pa=La->next,pb=Lb->next; //pa和pb分别是链表La 和//Lb的工作指针La->next=NULL;while(pa&&pb //当两链表均不为空时if(pa->data<=pb->data {r=pa->next; //将pa的后继结点暂存于rpa->next=La->next;La->next=pa; //将pa结点链于结果表中,同时逆//置(头插法pa=r; //恢复pa为当前待比较结点}else {r=pb->next; //将pb的后继结点暂存于rpb->next=La->next;La->next=pb; //将pb结点链于结果表中,同时逆置pb=r;}If(pa pb=pa; //通常情况下会剩下一个链表非空,处理剩//下的部分while(pb{r=pb->next;pb->next=La->next;La->next=pb;pb=r;}free(Lb;}选择题:1、D 2、B1、栈的特点是先进后出,由于进栈和出栈操作是可以穿插着进行的。

当第i个元素第一个出栈时,则i之前的元素可以依次排在i之后出栈,但剩余的元素可以在此时进栈并且也会排在i之前的元素出栈,所以第就j个出栈的元素是不确定的。

数据结构(C++)第一次作业参考答案

数据结构(C++)第一次作业参考答案

数据结构第一次作业数据结构第一次作业一.单项选择题(20分)( )1.已知一算术表达式的后缀形式为ABC *+DE-/,则其中缀形式为 _________。

a、(A+B *C)/(D-E)b、A+B*C /D-Ec、(A+B*C)/D-Ed、A+B*C/(D-E)( )2.若某链表中最常用的操作是在最后一个结点之后插入一个结点和删除第一个结点,则采用________存储方式最节省运算时间(假设链表仅设有一个first指针)。

a. 单链表b. 带头结点的双循环链表c. 单循环链表d. 双链表( )3.设一个栈的输入序列为A,B,C,D,则所得到的输出序列不可能是_______。

a. A,B,C,Db. D,C,B,Ac. A,C,D,Bd. D,A,B,C( )4.若线性表最常用的操作是存取第i个元素及其直接前驱的值,则采用_____存储方式节省时间。

a.顺序表 b.双链表 c.单循环链表 d.单链表( )5.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为_______。

(1≤i≤n+1)a、O(0)b、O(1)c、O(n)d、O(n2)( )6.若指针L指向一带头结点的循环单链表的头结点,该表为空表的条件是_______为真值;a. !( L -> link );b. L == (L -> link) -> link;c. L -> link;d. L == L -> link;( )7.用数组A[0..N-1]存放一个循环队列,一元素出队时,其队头指针front的修改方法是________:a. front = (front + 1) mod N;b. front = (front - 2)mod N;c. front = front + 1;d. front = front – 2;( )8.若用Head()和Tail()分别表示取广义表的表头和表尾,广义表A=(1,2,(3,4),(5,(6,7))),则Head(Tail(Head(Tail(Tail(A))))) 。

数据结构第一阶段作业

数据结构第一阶段作业

数据结构第一阶段作业数据结构是计算机科学中非常重要的概念,包括各种不同的算法和数据结构,如数组,链表,栈,队列,树,图等。

数据结构对于程序设计的效率和正确性至关重要。

对于第一阶段作业,您可能需要选择一个或多个数据结构,并描述如何使用它们来解决某个问题或实现某种功能。

以下是一些可能的数据结构和它们的应用场景:1. 数组:数组是一种基本的数据结构,可以用于存储一组相同类型的对象。

数组可以在许多编程语言中实现,例如C,Java和Python。

数组通常使用数组声明或下标访问元素,例如int arr[3]或intarr[3][2]。

数组可以用来存储一系列事件或数据,例如股票价格或单词列表。

2. 链表:链表是一种通过节点之间链接来实现数据结构的数据类型。

每个节点包含一个值和一个指向下一个节点的指针。

链表可以使用数组或指向链表头的指针来实现。

链表可以用来实现许多应用程序,例如搜索和排序算法。

3. 栈和队列:栈和队列是另一种常用的数据结构,可以用来存储和检索一系列元素。

栈是一种后进先出的数据结构,而队列是一种先进先出的数据结构。

栈和队列都可以通过数组或指向链表头的指针来实现。

栈和队列通常用于实现一些常用的算法,例如搜索和排序算法。

4. 树和图:树和图是另一种常用的数据结构,可以用来存储具有层次结构的数据。

树和图都可以通过数组或节点指针来实现。

树和图有许多不同的实现,例如AVL树和B树。

树和图通常用于实现一些复杂的应用程序,例如搜索引擎或图形用户界面。

这些只是数据结构的一小部分,但它们足以帮助您理解如何使用它们来解决不同类型的问题。

希望这些信息能帮助您开始您的数据结构学习之旅。

川大网络教育数据结构第一次网上作业

川大网络教育数据结构第一次网上作业

川大网络教育数据结构第一次网上作业一、单项选择题。

本大题共25个小题,每小题2.0 分,共50.0分。

在每小题给出的选项中,只有一项是符合题目要求的。

在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下()语句序列。

1( D )(A) p=q; p->next=q;(B) p->next=q; q->next=p;(C) p->next=q->next; p=q;(D) q->next=p->next; p->next=q;由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为()。

2( B )11351953下面关于图的存储的叙述中正确的是()。

3( B )用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关。

用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关。

用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关。

用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关。

设有关键码序列(q,g,m,z,a,n,p,x,h),下面的序列()是从上述序列出发建堆的结果。

4( B )a,g,h,m,n,p,q,x,za,g,m,h,q,n,p,x,zg,m,q,a,n,p,x,h,zh,g,m,p,a,n,q,x,z在一个带有附加表头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行()。

5( B )HL=p; p->next=HL;p->next=HL->next; HL->next=p;p->next=HL; p=HL;p->next=HL; HL=p;设有一个二维数组A[m][n] (m>3),假设A[0][0]存放位置在600,A[3][3]存放位置在678,每个元素占一个空间,则A[2][3]的存放位置是()。

西安交通大学17年3月课程考试《数据结构》作业考核试题标准答案

西安交通大学17年3月课程考试《数据结构》作业考核试题标准答案

西安交通大学17年3月课程考试《数据结构》作业考核试题一、单选题(共30 道试题,共60 分。

)1. 与数据元素本身的形式、内容、相对位置、个数无关的是数据的()A. 存储结构B. 逻辑结构C. 算法D. 操作正确答案:B2. 设一棵完全二叉树中有65个结点,则该完全二叉树的深度为()。

A. 8B. 7C. 6D. 5正确答案:B3. 利用直接插入排序法的思想建立一个有序线性表的时间复杂度为()。

A. O(n)B. O(nlog2n)C. O(n)D. O(1og2n)正确答案:C4. 栈的插入和删除操作在()进行。

A. 栈顶B. 栈底C. 任意位置D. 指定位置正确答案:A5. 二路归并排序的时间复杂度为()。

A. O(n)B. O(n)C. O(nlog2n)D. O(1og2n)正确答案:C6. 设某强连通图中有n个顶点,则该强连通图中至少有()条边。

A. n(n-1)B. n+1C. nD. n(n+1)正确答案:C7. 设一个顺序有序表A[1:14]中有14个元素,则采用二分法查找元素A[4]的过程中比较元素的顺序为()A. A[1],A[2],A[3],A[4]B. A[1],A[14],A[7],A[4]C. A[7],A[3],A[5],A[4]D. A[7],A[5],A[3],A[4]正确答案:C8. 下列各种排序算法中平均时间复杂度为O(n)是()。

A. 快速排序B. 堆排序C. 归并排序D. 冒泡排序正确答案:D9. 如下陈述中正确的是()A. 串是一种特殊的线性表B. 串的长度必须大于零C. 串中元素只能是字母D. 空串就是空白串正确答案:A10. 设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置()?脚注(10)表示用10进制表示。

A. 688B. 678C. 692D. 696正确答案:C11. 适于对动态查找表进行高效率查找的组织结构是()A. 有序表B. 分块有序表C. 三叉排序树D. 线性链表正确答案:C12. 设某完全无向图中有n个顶点,则该完全无向图中有()条边。

数据结构第一次作业及答案--线性表

数据结构第一次作业及答案--线性表

第一次作业------------线性表题目1、下列图1单链表执行R->data=P->next->data语句后,P->next->data值为A. 5B. 7C. 2D. 3题目2、在顺序表中,只要知道( ),就可在相同时间内求出任一结点的存储地址。

A. 向量大小B. 基地址和结点大小C. 结点大小D. 基地址题目3、非空的循环单链表head的尾节点(由r所指向)满足( )A. r->next=NULLB. r->next=headC. r=NULLD. r=head题目4、设线性表(a1,a2,a3···an)按顺序存储,且每个元素占有m个存储单元,则元素ai 的地址为A. LOC(a1) + i×m ,其中LOC(a1)表示元素a1的地址B. 元素ai的地址无法计算C. LOC(a1) + (i-1)×m,D. LOC(a1) + (i-2)×m题目5、在()运算中,使用顺序表比链表好。

A. 根据元素值查找B. 插入C. 根据序号查找D. 删除题目6、在一个单链表中,若P所指结点不是最后结点,在P之后插入S所指结点A. P→next=S;S→next=PB. S→next=P→next; P=SC. S→next=P→next;P→next=SD. S→next=P;P→next=S题目7、在双向循环链表的*p结点之后插入*s结点的操作是A. s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;B. s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;C. p->next=s; s->prior=p; p->next->prior=s; s->next=p->nextD. p->next=s; p->next->prior=s; s->prior=p; s->next=p->next题目8、单链表表示的整数数列如下图,值P->next->next->data为:A. 47B. 93C. 19D. 64题目9、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( )。

数据结构形成性考核册第1次作业参考答案

数据结构形成性考核册第1次作业参考答案

《数据结构》形成性考核册第1次作业参考答案第一章绪论一、填空题1、数据操作2、集合结构线性结构树型结构图形结构3、引用类型4、1:1 1:n n:m5、不对6、多个7、O(m*n)8、时间复杂度空间复杂度9、顺序链接索引散列10、O(n2)11、O(n)12、O(n)O(m*n)二、选择题1~8:DBABADDD三、应用题(1)功能:判断n是否是一个素数,若是则返回数值1,否则返回0。

时间复杂度:O(n)。

(2)功能:计算S=1!+2!+…+n!的值。

时间复杂度:O(n)。

(3)功能:计算S=1!+2!+…+n!的值。

时间复杂度:O(n2)。

(4)求出满足不等式1+2+…+i≥n的最小i值。

O(n)。

第二章线性表四、填空题1、A[P-1]2、1083、前驱后继4、最后一个表头5、p->next=q->nextq->next=p6、HL->next=NULLHL->next=HL7、P->next8、Q->next9、P->next s10、从前向后前移n-i11、O(1)O(n)12、(n+1)/213、O(n)O(1)14、A[P].next15、a[j].next=a[i].nexta[i].next=j16、数据值指针五、选择题1~5:BDDBC六、应用题1、(1)、(79,62,34,57,26,48)(2)、(26,34,48,57,62,79)(3)、(48,56,57,62,79,34)(4)、(56,57,79,34)(5)、(26,34,39,48,57,62)2、(1)将类型为List的线性表L中第i个元素移至表尾位置的算法,L中的元素类型为ElemType,假定不需要对i的值进行有效性检查。

void move (List& L, int i){ElemType x=L.list[ i-1];for(int j=i; j<L.size; j++)L.list[ j-1]=L.list[ j ];L.list[L.size-1]=x;}·将线性表L中的第i个元素移入表头的算法与上类似。

数据结构第一次作业

数据结构第一次作业
D.O(n2)
2.
下面关于算法说法错误的是(D)
A.算法最终必须由计算机程序实现
B.为解决某问题的算法同为该问题编写的程序含义是相同的
C.算法的可行性是指指令不能有二义性
D.以上几个都是错误的
3.数据的存储结构通常有D

A.顺序存储结构和链式存储结构
B.顺序存储结构、链式存储结构和索引结构
C.顺序存储结构、链式存储结构和散列结构
A. 1
B. 2
C. 3
D. 4
10.以下程序段的时间复杂度是C
int i=0;
for (int j=1;j<=n;j*=2)
{
for (int k=1;k<=n;k++)
{
i++;
}
}
A. O(log2n) B. O(n) C. O(nlog2n) D. O(n2)
编程题
1.合并链表
【问题描述】
两个数据以非降序排列的链表的并集的链表,例如将链表1->2->3 和 2->3->5 并为 1->2->3->5,只能输出结果,不能修改两个链表的数据。
3.设n为大于1的正整数,计算机执行下面的语句时,带#语句的执行次数为n。
i=1;
j=0;
while(i+j<=n){
# if(i>j)
j++;
else
i++;
}
4.在具有n个链结点的链表中查找一个链结点的时间复杂度为O(n)。
5.下面程序段的时间复杂度为O(mn)。
for ( i = 0; i < n; i++ )

清华大学数据结构第一次课后作业

清华大学数据结构第一次课后作业

第一次作业(注: 各题的题号为教材课后练习的题号)第一章数据结构概论笔做题1-4 什么是抽象数据类型?试用C++ 的类声明定义“复数”的抽象数据类型。

要求(1) 在复数内部用浮点数定义它的实部和虚部。

(2) 实现3个构造函数:缺省的构造函数没有参数;第二个构造函数将双精度浮点数赋给复数的实部,虚部置为0;第三个构造函数将两个双精度浮点数分别赋给复数的实部和虚部。

(3) 定义获取和修改复数的实部和虚部,以及+、-、*、/等运算的成员函数。

(4) 定义重载的流函数来输出一个复数。

1-9 (1) 在下面所给函数的适当地方插入计算count的语句:void d (ArrayElement x[ ], int n ) {int i = 1;do {x[i] += 2; i += 2;} while (i <= n );; i = 1;while ( i <= (n / 2) ) {x[i] += x[i+1]; i++;}}(2) 将由(1)所得到的程序化简。

使得化简后的程序与化简前的程序具有相同的count 值。

(3) 程序执行结束时的count值是多少?(4) 使用执行次数的方法计算这个程序的程序步数,画出程序步数统计表。

上机题1-8 试编写一个函数计算n!*2n的值,结果存放于数组A[arraySize]的第n个数组元素中,0 ≤ n ≤ arraySize。

若设计算机中允许的整数的最大值为maxInt,则当n > arraySize或者对于某一个k (0 ≤ k ≤ n),使得k!*2k > maxInt时,应按出错处理。

可有如下三种不同的出错处理方式:(1) 用cerr <<及exit (1)语句来终止执行并报告错误;(2) 用返回整数函数值0, 1来实现算法,以区别是正常返回还是错误返回;(3) 在函数的参数表设置一个引用型的整型变量来区别是正常返回还是某种错误返回。

数据结构作业及答案

数据结构作业及答案

第一章绪论一、选择题1.数据结构是一门研究非数值计算的程序设计问题中计算机的1以及它们之间的2和运算等的学科。

1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像2 A.结构 B.关系 C.运算 D.算法2.数据结构被形式地定义为(K, R),其中K是1的有限集,R是K上的2有限集。

1 A.算法 B.数据元素 C.数据操作 D.逻辑结构2 A.操作 B.映像 C.存储 D.关系3.在数据结构中,从逻辑上可以把数据结构分成。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4.线性结构的顺序存储结构是一种1的存储结构,线性表的链式存储结构是一种2的存储结构。

A.随机存取 B.顺序存取 C.索引存取 D.散列存取5.算法分析的目的是1,算法分析的两个主要方面其一是指2,其二是指正确性和简单性。

1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性2 A.空间复杂度和时间复杂度 B.研究算法中的输入和输出的关系C.可读性和文档性D.数据复杂性和程序复杂性k6.计算机算法指的是1,它必须具备输入、输出和2等5个特性。

1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。

A.正确 B.不正确8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。

A.必须连续的B.部分地址必须连续的C.一定是不续的D连续不连续都可以9.以下的叙述中,正确的是。

A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。

数据结构(本)形考作业1参考答案:

数据结构(本)形考作业1参考答案:

数据结构(本)形考作业1参考答案:一、单项选择题1.C 2.D 3.C 4.C 5.D 6.C 7.C 8.C 9.A 10.B二、填空题1.n-i+1 2.n-i 3.集合、线性表、树、图 4. 存储结构、物理结构 5.线性表图6. 有穷性、确定性、可行性、有输入、有输出7. 图8.树9. 线性表10.n-1 O(n)11.s->next=p->next; 12.head 13.q->next=p->next; 14.p->next=head; 15.单链表16.顺序存储链式存储17.存储结构18.两个后继结点前驱结点尾结点头结点19.指向头结点的指针指向第一个结点的指针20.链式链表三、问答题1.简述数据的逻辑结构和存储结构的区别与联系,它们如何影响算法的设计与实现?答:若用结点表示某个数据元素,则结点与结点之间的逻辑关系就称为数据的逻辑结构。

数据在计算机中的存储表示称为数据的存储结构。

可见,数据的逻辑结构是反映数据之间的固有关系,而数据的存储结构是数据在计算机中的存储表示。

尽管因采用的存储结构不同,逻辑上相邻的结点,其物理地址未必相同,但可通过结点的内部信息,找到其相邻的结点,从而保留了逻辑结构的特点。

采用的存储结构不同,对数据的操作在灵活性,算法复杂度等方面差别较大。

2.解释顺序存储结构和链式存储结构的特点,并比较顺序存储结构和链式存储结构的优缺点。

答:顺序结构存储时,相邻数据元素的存放地址也相邻,即逻辑结构和存储结构是统一的,,要求内存中存储单元的地址必须是连续的。

优点:一般情况下,存储密度大,存储空间利用率高。

缺点:(1)在做插入和删除操作时,需移动大量元素;(2)由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;(3)表的容量难以扩充。

链式结构存储时,相邻数据元素可随意存放,所占空间分为两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。

数据结构第一次作业题及答案.doc

数据结构第一次作业题及答案.doc

第1次作业一、单项选择题(本大题共60分,共20小题,每小题3分)1.在长度为n的顺序表求最小值的时间复杂度为()。

A.0(1)B.0 (n)C.O (n2)D.O (logn)2.顺序表中数据元索的存取方式是()oA.顺序存取B.链式存取C.随机存取D.散列存取3.对于一个具有n个结点的单链表,,在给定值为x的结点后插入一个新结点的平均时间复杂度为()。

A.0(0)B.0(1)C.O(n)D.0(n2)4.在稀疏矩阵的带行指针向量的链接存储中,每个行单链表中的结点都具有和同的()。

A.行号B.列号C.元素值D.地址5.数组A [0.. 5] [0.. 5]的每个元素占5个字节,将其以列为主序存储在起始地址为1000的内存单元中,则元索A [5] [5]的地址是( )。

A.1175B.1180C.1205D.12106.下而程序段的时间复杂度是()。

i = 0; while (i<=n) i二i * 3;A.0 (3n)B.0(log3n)C.0 (n3)D.0(n2)7.假设顺序表中第一个数据元索的存储地址是1000,每个元索占用4个字节,则第7个元索的存储地址是()。

A.1024C.1004D.10078・设栈S和队列Q的初始状态为空,元素el, e2, e3, e4, e5和e6依次通过栈S, —个元素出栈后即进队列Q,若6个元素出队的序列是e2, e4,e3, e6, e5, el则栈S的容量至少应该是()。

A.B.4C.3D.29.判断带头结点的循环单链表L屮只冇一个结点的条件是()。

A.L二二NULLB.L->next->next==LD.L->next==NULL10.下而关于算法说法错误的是()。

A.算法最终必须rti计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C.算法的可行性是指指令不能有二义性D.以上几个都是错谋的11.用单链表表示的链队列中,队头在链表的()位置。

数据结构第一次作业

数据结构第一次作业

1判断题(对)1. 数据的逻辑结构与数据元素本身的内容和形式无关。

(错)2. 线性表的逻辑顺序与物理顺序总是一致的。

(对)3. 若有一个叶子结点是二叉树中某个子树的前序遍历结果序列的最后一个结点,则它一定是该子树的中序遍历结果序列的最后一个结点。

(对)4. 对于同一组待输入的关键码集合,虽然各关键码的输入次序不同,但得到的二叉搜索树都是相同的。

(对)5. 最优二叉搜索树的任何子树都是最优二叉搜索树。

(对)6. 在二叉搜索树上插入新结点时,不必移动其它结点,仅需改动某个结点的指针,使它由空变为非空即可。

(对)7. 有n(n≥1)个顶点的有向强连通图最少有n条边。

(错)8. 连通分量是无向图中的极小连通子图。

(错)9. 二叉树中任何一个结点的度都是2。

(错)10. 单链表从任何一个结点出发,都能访问到所有结点。

二、单选题1 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动( B )个元素。

A.8 B. 63.5 C. 63 D. 72 设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,则A[3][3]在( A )位置,(10)表明用10进数表示。

A.692(10) B. 626(10) C. 709(10) D. 724(10)3 N个顶点的连通图至少有( A )条边。

A.N-1 B. N C. N+1 D. 04 下面程序的时间复杂度为( C )。

for(int i=0; i<m;i++)for(int j=0; j<n;j++)a[i][j]=i*j;A.O(m2) B. O(n2) C. O(m*n) D. O(m+n)5 设单链表中结点的结构为(data, link)。

已知指针q所指结点是指针p所指结点的直接前驱,若在*q与*p之间插入结点*s,则应执行下列哪一个操作( B )。

数据结构(C语言版)第1章习题答案

数据结构(C语言版)第1章习题答案

数据结构(C语言版)第1章习题答案1第一章概论自测题答案一、填空题1. 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科。

2. 数据结构被形式地定义为(D, R ),其中D 是数据元素的有限集合,R 是D 上的关系有限集合。

3. 数据结构包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的内容。

4. 数据结构按逻辑结构可分为两大类,它们分别是线性结构和非线性结构。

5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。

6.在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结点没有后续结点,其余每个结点有且只有1个后续结点。

7. 在树形结构中,树根结点没有前驱结点,其余每个结点有且只有 1 个前驱结点;叶子结点没有后续结点,其余每个结点的后续结点数可以任意多个。

8. 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。

9.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序、链式、索引和散列。

10. 数据的运算最常用的有5种,它们分别是插入、删除、修改、查找、排序。

11. 一个算法的效率可分为时间效率和空间效率。

二、单项选择题( B )1. 非线性结构是数据元素之间存在一种:A )一对多关系B )多对多关系C )多对一关系D )一对一关系( C )2. 数据结构中,与所使用的计算机无关的是数据的结构;A) 存储 B) 物理 C) 逻辑 D) 物理和存储( C )3. 算法分析的目的是:A) 找出数据结构的合理性B) 研究算法中的输入和输出的关系C) 分析算法的效率以求改进 D) 分析算法的易懂性和文档性( A )4. 算法分析的两个主要方面是:A) 空间复杂性和时间复杂性 B) 正确性和简明性C) 可读性和文档性 D) 数据复杂性和程序复杂性( C )5. 计算机算法指的是:A) 计算方法 B) 排序方法 C) 解决问题的有限运算序列 D) 调度方法( B )6. 计算机算法必须具备输入、输出和等5个特性。

数据结构作业(1)

数据结构作业(1)

第一章绪论一、选择题1.一个算法应该是()。

A.程序B问题求解步骤的描述C 要满足5个基本特性D.A和c2 计算机算法必须具备输入、输出、()等5个特性。

A 可行性、可移植性和可扩展性B 可行性、确定性和有穷性C 确定性、有穷性和稳定性D 易读性、安全性和稳定性3 在数据结构中,从逻辑上可以把数据结构分为()A 动态结构和静态结构B 紧凑结构和非紧凑结构C 内容结构和外部结构D 线性结构和非线性结构4 下面程序段的时间复杂性的量级为()for (i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;A O(1)B O(n)C O(n2)D O(n3)5 在数据结构中,与所使用的计算机无关的是数据的()结构A 逻辑B 存储C 逻辑和存储D 物理6 数据结构在计算机中的表示是指()A 数据的逻辑结构B 数据结构C 数据的存储结构D 数据元素之间的关系7 下面()的时间复杂性最好,即执行时间最短。

A O(n)B O(logn)C O(nlogn)D O(n2)8 下面程序段的时间复杂性的量级为()。

int fun(int n){i=1,s=1;while(s<n)s+=++i;return i;}A O(n/2)B O(logn)C O(n)D O(n1/2)9 下面程序段的时间复杂性的量级为()。

for(int i=0;i<m;i++)for(int j=0;j<n;j++)A[i][j]=i*j;A O(m3)B O(n2)C O(m*n)D O(m+n)10 执行下面程序段时,S 语句的执行次数为()。

for(int i=1;i<n-1;i++)for(int j=i+1;j<=n;j++)S;A n(n-1)/2B n2/2C n(n+1)/2D n11、研究数据结构就是研究( )。

A、数据的逻辑结构B、数据的存储结构C、数据的逻辑结构和存储结构D、数据的逻辑结构、存储结构及其数据在运算上的实现12、以下属于逻辑结构的是( )。

大连理工大学 张绍武老师 数据结构 第一次上机作业答案

大连理工大学 张绍武老师 数据结构 第一次上机作业答案

大连理工大学张绍武老师数据结构第一次上机作业答案作业1. 线性表编程作业:1.将顺序表逆置,要求用最少的附加空间。

参考答案#include <stdio.h>#include <malloc.h>#include <process.h>#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct{ ElemType *elem;int length;int listsize;}SqList;//创建空顺序表Status InitList_Sq( SqList &L ){L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof(ElemType));if (!L.elem)exit(OVERFLOW);L.length = 0;L.listsize = LIST_INIT_SIZE;return OK;}//顺序表在第i个元素之前插入eStatus ListInsert_Sq( SqList &L, int i, ElemType e){ ElemType *newbase,*q,*p;if(i<1 || i>L.length+1) //插入位置非法return ERROR;if(L.length>=L.listsize)//溢出,动态追加空间{ newbase= (ElemType *)realloc(L.elem, (L.listsize+ LISTINCREMENT) *sizeof(ElemType));if(!newbase) exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}q=&(L.elem[i-1]);for(p=&(L.elem[L.length-1]);p>=q;p--) //元素后移*(p+1)=*p;*q=e; //完成元素插入++L.length;return(OK);}//顺序表遍历显示Status ListTraverse_Sq(SqList L){ int i=0;if(!L.elem)return ERROR;while(i<L.length)printf("%d ",L.elem[i++]);printf("\n");return OK;}//顺序表逆置void Reverse_Sq(SqList &L){int i,j;ElemType temp;for(i=0,j=L.length-1; i<j; i++,j--){temp=L.elem[i];L.elem[i]=L.elem[j];L.elem[j]=temp;}}void main(){SqList L;char flag;int i;ElemType e;if(InitList_Sq(L)==OK){printf("建立空顺序表成功!\n");do{printf("当前线性表长度为:%d\n",L.length);printf("请输入要插入元素的位置:");scanf("%d",&i);printf("请输入要插入的元素值:");scanf("%d",&e);if(ListInsert_Sq(L,i,e)==OK){printf("插入成功,插入后顺序表长度为:%d\n",L.length);printf("插入后的顺序表为:");ListTraverse_Sq(L);}elseprintf("插入失败");printf("\n继续插入元素?(y/n) ");fflush(stdin);scanf("%c",&flag);}while(flag=='y');Reverse_Sq(L);printf("顺序表逆置后为:\n");ListTraverse_Sq(L);}elseprintf("顺序表初始化失败!\n");}2.从键盘读入n个整数(升序),请编写算法实现:(1)CreateList():建立带表头结点的单链表;(2)PrintList():显示单链表,(形如:H->10->20->30->40);(3)InsertList():在有序单链表中插入元素x;(4)ReverseList():单链表就地逆置;(5)DelList():在有序单链表中删除所有值大于mink且小于maxk的元素。

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

2014年上半年数据结构(C++)第一次作业一.单项选择题(20分)1.已知一棵二叉树的前序遍历序列为ABCDEFG,则其中序遍历可能是____b____。

a、CABDEFGb、ABCDEFGc、DACEFBGd、ADCFEGB2.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则采用__b______存储方式最节省时间(假设链表仅设有一个first指针一个)。

a. 单链表b. 带头结点的双循环链表c. 单循环链表d. 双链表3.有6个元素6,5,4,3,2,1顺序入栈,则所得到的输出序列不可能是___c____。

a. 5 4 3 6 1 2b. 4 5 3 1 2 6c. 3 4 6 5 2 1d. 2 3 4 1 5 64.链表不具有的特点是__d___。

a.插入,删除不需要移动元素 b.所需空间与线性长度成正比c.不必事先估计存储空间 d.可随机访问任一元素5.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为_____c____。

(1≤i≤n+1)a、O(0)b、O(1)c、O(n)d、O(n2)6.对于一个头指针为head的带头结点的单链表,该表为空表的条件是__a____为真值;a. head->next==NULL;b. head==NULL;c. head->next==head;d. head!=NULL;7.用数组A[0..N-1]存放一个循环队列,一元素出队时,其队头指针front的修改方法是___a____:a. front = (front + 1) mod N;b. front = (front - 2)mod N;c. front = front + 1;d. front = front – 2;8.若用Head()和Tail()分别表示取广义表的表头和表尾,广义表A=(1,2,(3,4),(5,(6,7))),则Head(Tail(Head(Tail(Tail(A))))) b 。

a. 1b. 4c. ()d. (4)9.设关于串的叙述中,哪一个是不正确的?___b_____a. 串是字符的有限序列b. 空串是由空格构成的串c. 模式匹配是串的一种重要运算d. 串既可以采用顺序存储,也可以采用链式存储10.链下列排序算法中时间复杂度不受数据初始状态影响,恒为O(n2)的是____c____。

a.堆排序b.起泡排序c.直接选择排序d.快速排序二.填空作图题(共56分):1.设 n是偶数,且有程序段:for(i=1; i<=n; i++){if(2*i <= n){for(j = 2* i; j<=n;j++)y = y+i*j;}}则语句“y = y+i*j”的执行次数多少?要求列出计算公式。

解答:语句y=y+i*j;在i=1时,执行n-1次,在i=2时,执行n-3次,……,当i=n/2时执行1次,当i>n/2时不再执行。

故总的执行次数是: (n-1)+(n-3)+(n-5)+……+3+1=n2/4运算符栈2.如果采用一运算数栈和一运算符栈来计算由键盘输入的中缀表达式1+((2+3)*4+5)*9/(5-(6+7)*8)#的值,这里运算数栈用来存放计算过程中使用或产生的运算数,运算符栈用来存放尚未用于计算的运算符,那么按照算法,请将当运算数栈第一次在栈顶出现13时各栈中存放的数据情况填入下表。

运算数栈3.画出稀疏矩阵A的三元组表和十字链表。

4.已知广义表为((()), (2), (‘q’,(‘p’,5,8)));试画出该广义表的存储表示。

答:三元组:((1,2,9),(3,4,12),(4,2,3),(5,3,8),(5,6,6))a 0 1 2 3 4 5 6 7 85.在下面数组a中链接存储着一个线性表,其表头“指针”为head==0,可利用空间表第一个元素的“指针”av==5:a 0 1 2 3 4 5 6 7 8;3)删除25;4)在元素56后插入66;5)在元素66前插入88。

请问,在进行上面操作后,av== ,并将此时数组a的内容填入下表:三.程序填空(24分)下面是仅给出了部分操作某线性表类的定义和实现。

试在程序的每一划线部分填入一条语句或表达式,完成相应的操作。

class node {public:int elem;int next;node(const int elemval, int nextval =-1){ elem = elemval; next = nextval; } node(int nextval =-1) { next = nextval; }};class List{private:node * datalist;int head;int curr;int av; //可利用空间表第一个空闲单元的位置int maxSize; //可存放元素的个数int newElement(); //分配一空闲单元,返回单元所在下标void freeElement(int n); //释放一空闲单元到可利用空间表,参数n为释放单元的下标public:List(int Size=10);bool isEmpty()const; //判断线性表是否为空bool isFull()const; //判断线性表是否已满bool isInList()const; //判断curr是否在表中void insert(const int & item); //在表的当前位置处插入元素itemint remove(); //将当前位置的元素从表中删除,并返回被删除元素的值void setFirst(); //将表的当前位置定位于第1个元素void next(); //定位到下一个元素int currValue() const; //将表的当前位置的元素值返回bool find(const int & eval); //从将表的当前位置开始查找元素eval};List::List(int Size):maxSize(Size) {datalist=new node[maxSize+1];if(datalist == NULL){cout<<"Insufficient memory available\n" ;exit(0);};curr=head=0;av=1;for(int i=1;i<maxSize;i++) ____① _datalist[i].next=i+1;__}int List::newElement(){if(isFull()){cout<<"Insufficient memory available\n" ;exit(0);};int newnode = av;____② av=datalist[av].next;____return newnode;}void List::freeElement(int n){_____③ datalist[n].next=av;av=n;}void List::next(){if(curr!=-1)curr=datalist[curr].next;else {cout<<"Current position is not a legal position\n";exit(0);}}void List::insert(const int & item) {if(curr == -1){cout<<"Current position is not a legal position\n";exit(0); }; int newnode;______④ _newnode=newElement(); ____datalist[newnode].elem=item;____⑤ datalist[newnode].next= datalist[curr].next;__datalist[curr].next = newnode;}int List::remove(){if(!isInList()){cout<<"Current position is not a legal position\n";exit(0);}int retVal=currValue();int n;_____⑥_n=curr--; _________⑦ datalist[curr].next=datalist[n].next; _freeElement(n);return retVal;}void List::setFirst(){___⑧ curr=head; ___}int List::currValue() const{ if(!isInList()){cout<<"Current position is not a legal position\n";exit(0);} return ____⑨ datalist[curr].item; ___ }bool List::isEmpty() const{return ____⑩ curr==0 && head==0;}bool List::isFull(){retrun ______⑾ av==-1; ___}bool List::isInList() const{ return (curr != -1) && (datalist[curr].next!=-1) && (!isEmpty()); }bool List::find(const int & eval) {while (isInList())if (____⑿ datalist[curr].item==eval ____) return TRUE;else next();return FALSE;}。

相关文档
最新文档