数据结构作业
数据结构作业
6.45 编写递归算法:对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。
6.46 编写复制一棵二叉树的非递归算法。
6.59 编写算法完成下列操作:无重复地输出以孩子兄弟链表存储的树T中所有的边(这里的边是指树T本身的分支,而不是孩子兄弟链表所形成的二叉树的分支)。输出的形式为(k1, k2), ..., (ki, kj), ..., 其中,ki和kj为树结点中的结点标识。
1.20试编写算法求一元多项式 的值Pn(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度。注意选择你认为较好的输入和输出方法。本题的输入为ai(i=0, 1,…, n)、x0和n,输出为Pn(x0)。
第二章线性表
2.11设顺序表va中的数据元素非递减有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
注:根据同学们的要求,将作业量从六道题减少到三道题,希望同学们能及时完成。
第五章数组和广义表
5.21 假设稀疏矩阵A和B均以三元组顺序表作为存储结构。试写出矩阵相加的算法,另设三元组C存放结果矩阵。
5.26 试编写一个以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法。
5.33 试编写递归算法,输出广义表中所有原子项及其所在的层次。
第十二章 文件
12.10假设某个有3000张床位的旅店需建立一个便于管理的文件,每个记录是一个旅客的身份和投宿情况。其中旅客身份证号(15位十进制数字)可作为主关键字,此外还需建立按姓名、投宿日期、从哪来等次关键字项索引。请为此文件确定一种组织方式(如:主文件如何组织,各次关键字项索引如何建立等
第十章 排序
10.23 试以L.r[k+1]作为监视哨改写直接插入排序算法。其中,L.r[1...k]为待排记录且k<MAXSIZE。
数据结构作业及答案
第一章绪论一、选择题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.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。
200721数据结构 作业(高起专、高起本)
比较(
)个元素结点。
A、
B、n
C、
D、
20、设单链表中指针 p 指向结点 m,若要删除 m 之后的结点(若存在),则需修改指针的操作
为(
)。
A、
B、
C、
D、
21、在(
)运算中,使用顺序表比链表好。
A、插入
B、删除
C、根据序号查找
D、根据元素值查找
22、在一个具有 n 个结点的有序单链表中插入一个新结点并保持该表有序的时间复杂度
第 2 页 共 20 页 在您完成作业过程中,如有疑难,请登录学院网站“辅导答疑”栏目,与老师进行交流讨论!
C、一个无限序列,可以为空
D、一个无限序列,不可以为空
18、在一个长度为 n 的顺序表中删除第 i 个元素
时,需向前移动(
)个元素。
A、
B、
C、
D、i
19、从一个具有 n 个结点的单链表中查找其值等于 x 的结点时,在查找成功的情况下,需平均
( )个。
第 6 页 共 20 页 在您完成作业过程中,如有疑难,请登录学院网站“辅导答疑”栏目,与老师进行交流讨论!
A、15
B、16
C、17
D、47
48、设 n , m 为一棵二叉树上的两个结点,在中序遍历序列中 n 在 m 前的条件是( )。
A、n 在 m 右方
B、n 在 m 左方
C、n 是 m 的祖先
D、求串长
6、二维数组 M 的成员是 6 个字符(每个字符占一个存储单元)组成的串,行下标 i 的
范围从 0 到 8,列下标 j 的范围从 1 到 10,则存放 M 至少需要(
)个字节。
A、90
B、180
数据结构的作业
第五章作业: 第五章作业: 1.假设有二维数组 假设有二维数组a:array[1..6,0..7] of elemtp; 每个数据元 假设有二维数组 素占6个字节 存储器按字节编址 的基地址为1000,则: 素占 个字节,存储器按字节编址。a的基地址为 个字节 存储器按字节编址。 的基地址为 则 (1) 数组 的体积; 数组a的体积 的体积; (2)数组 的最后一个元素的第一个字节的地址; 数组a的最后一个元素的第一个字节的地址 数组 的最后一个元素的第一个字节的地址; (3)按行存储时,a[2,4]的第一个字节的地址; 按行存储时, 的第一个字节的地址; 按行存储时 的第一个字节的地址 (4)按列存储时,a[5,7]的第一个字节的地址; 按列存储时, 的第一个字节的地址; 按列存储时 的第一个字节的地址
7.写出下列各树的先根序列 后根序列 并且画出对应的二 写出下列各树的先根序列,后根序列 写出下列各树的先根序列 后根序列,并且画出对应的二 叉树. 叉树 A A A A B C D B C B C I 8.画出第 题的森林相应的二叉树 画出第7题的森林相应的二叉树 画出第 题的森林相应的二叉树. 9.画出和下列已知序列对应的树 画出和下列已知序列对应的树T: 画出和下列已知序列对应的树 树的先根次序访问序列为:GFKDAIEBCHJ,而且 而且 树的先根次序访问序列为 树的后根次序访问序列为:DIAEKFCJHBG。 。 树的后根次序访问序列为 E F J G H K
3.用单链表实现 用单链表实现Locate(L,x)函数。(可参考 函数。(可参考P26算法 算法2.5) 用单链表实现 函数。(可参考 算法 4.上机题:设单链表Va中的数据元素递增有序。试编 上机题:设单链表 中的数据元素递增有序 中的数据元素递增有序。 上机题 写程序,将数据X插入单链表 插入单链表Va, 写程序,将数据 插入单链表 ,要求插 入后保持该表的有序性。 入后保持该表的有序性。 5.写出双向链表删除第i个结点的算法 5.写出双向链表删除第i个结点的算法。 写出双向链表删除第 个结点的算法。 6.写出求双向循环链表长度的算法。(注:头结点 写出求双向循环链表长度的算法。(注 写出求双向循环链表长度的算法。( 不算) 不算)
数据结构作业
第二次作业一、选择题1、设有编号为1, 2, 3, 4的4辆列车,顺序进入一个栈结构的站台,下列不可能的出栈顺序为D。
A. 1234B. 1243C. 1324D. 14232、4个元素按A, B, C, D顺序进入S栈,执行两次Pop(S, x)运算后,栈顶元素的值是B 。
A. AB. BC. CD. D3、从一个栈顶指针为top的链栈中删除一个结点时,用x保存被删除的结点,应执行下列A 命令。
A. x=top; top=top->next;B. top=top->next; x=top->data;C. x=top->data;D. x=top->data; top=top->next;4、向顺序栈中输入元素时 A 。
A. 先存入元素,后移动栈顶指针B. 先移动栈顶指针,后存入元素C. 谁先谁后无关紧要D. 同时进行5、设有一个顺序栈,元素A, B, C, D, E, F依次进栈,如果6个元素出栈的顺序是B, D, C, F, E, A,则栈的容量至少为A。
A. 3B. 4C. 5 6. 66、设已将元素A, B, C依次入栈,元素D正等待进栈。
那么下列4个序列中不可能出现的出栈顺序为A。
A. CADBB. CBDAC. CDBAD. DCBA7、栈和队列的相同之处是C。
A.元素的进出满足先进后出B.元素的进出满足后进先出C.只允许在端点进行插入和删除操作D.无共同点8、设栈S 和队列Q 的初始状态为空,元素e1,e2,e3,e4,e5 和e6 依次通过栈,一个元素出栈后即进入队列Q,若6 个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈S 的容量至少应该是B。
A. 6B. 4C. 3D. 29、队列通常采用的两种存储结构是( A)。
A. 顺序存储结构和链式存储结构B.散列方式和索引方式C. 链表存储结构和线性存储结构D.线性存储结构和非线性存储结构10、循环队列SQ队满的条件是B。
数据结构作业题目
一、第一次作业
①写一个函数find,实现从数组a[n]查找元素x,返回x在数组中的序号,如果找不到则返回-1。
②当a[n]递增有序时,有没有高效的算法?
③以Niklus Wirth的观点,程序是什么?
④算法有什么特性?
⑤好算法应该满足哪些标准?
⑥数据结构主要在哪些层面上讨论问题?
⑦按增长率由小至大的顺序排列下列各函数(严蔚敏题集1.10)
⑧试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z 的值(严蔚敏题集1.16)
二、第二次作业
1)题集2.2(严蔚敏)
2)题集2.10(严蔚敏)
3)题集2.12(严蔚敏)
4)题集2.7(严蔚敏)
5)题集2.15(严蔚敏)
三、第三次作业
第二章题集1、9、10(于津、陈银冬)
四、第四次作业
第三章题集1、2、3、4、5(于津、陈银冬)
五、第五次作业
①第四章题集2、5(于津、陈银冬)
②实现以下C库函数:
(1)strlen(cs)
(2)strcpy(s, ct)
(3)strcmp(cs, ct)
③完成对称矩阵、三角矩阵、对角矩阵在压缩存储下的输入输出算法
④第五章题集1、2、3(于津、陈银冬)
六、第六次作业
第六章题集1、2、10(于津、陈银冬)
七、第七次作业
第六章题集3、8、12、13(于津、陈银冬)
八、第八次作业
第六章题集6、7、9、15(于津、陈银冬)
九、第九次作业
第七章题集1、7(另加上“十字链表”存储)(于津、陈银冬)。
南开24秋学期《数据结构》作业参考一
24秋学期《数据结构》作业参考1.堆的形状是一棵()选项A:二叉排序树选项B:满二叉树选项C:完全二叉树选项D:平衡二叉树参考答案:C2.用邻接表表示图进行深度优先遍历时,通常是采用()来实现算法的选项A:栈选项B:队列选项C:树选项D:图参考答案:A3.栈中元素的进出原则是()选项A:先进先出选项B:后进先出选项C:栈空则进选项D:栈满则出参考答案:B4.若一组记录的排序码为(46, 79, 56, 38, 40, 84),则利用堆排序的方法建立的初始堆为()选项A:79,46,56,38,40,84选项B:84,79,56,38,40,46选项C:84,79,56,46,40,38选项D:84,56,79,40,46,38参考答案:B5.有8个结点的无向图最多有()条边选项A:14选项B:28选项C:56选项D:112参考答案:B6.链表是一种采用存储结构存储的线性表选项A:顺序选项B:链式选项C:星式选项D:网状参考答案:B7.下列关键字序列中,()是堆选项A:16,72,31,23,94,53选项B:94,23,31,72,16,53选项C:16,53,23,94,31,72选项D:16,23,53,31,94,72参考答案:D8.折半查找有序表(4,6,10,12,20,30,50,70,88,100)。
若查找表中元素58,则它将依次与表中()比较大小,查找结果是失败。
选项A:20,70,30,50选项B:30,88,70,50选项C:20,50选项D:30,88,50参考答案:A9.已知图的邻接矩阵,根据算法,则从顶点0出发,按深度优先遍历的结点序列是()选项A:0 2 4 3 1 5 6选项B:0 1 3 5 6 4 2。
数据结构作业题及参考答案【精选文档】
东北农业大学网络教育学院数据结构作业题(一)一、选择题(每题2分,共20分)1.在一个长度为n的顺序表的任一位置插入一个新元素的渐进时间复杂度为( )。
A、O(n)B、O(n/2)C、O (1)D、O(n2)2.带头结点的单链表first为空的判定条件是()。
A、first == NULL;B、first->link == NULL;C、first-〉link == first;D、first != NULL;3.在一棵树中,()没有前驱结点.A、分支结点B、叶结点C、树根结点D、空结点4.在有向图中每个顶点的度等于该顶点的( )。
A、入度B、出度C、入度与出度之和D、入度与出度之差5.对于长度为9的有序顺序表,若采用折半搜索,在等概率情况下搜索成功的平均搜索长度为( )的值除以9。
A、20B、18C、25D、226.下列程序段的时间复杂度为( )。
s=0;for(i=1;i<n;i++)for(j=1;j〈n;j++)s+=i*j;A、O(1)B、O (n)C、O(2n)D、O(n2)7.栈是一种操作受限的线性结构,其操作的主要特征是()。
A、先进先出B、后进先出C、进优于出D、出优于进8.假设以数组A[n]存放循环队列的元素,其头、尾指针分别为front和rear.若设定尾指针指向队列中的队尾元素,头指针指向队列中队头元素的前一个位置,则当前存于队列中的元素个数为()。
A、(rear-front—1)%nB、(rear—front)%nC、(front-rear+1)%nD、(rear—front+n)%n9.高度为5的完全二叉树中含有的结点数至少为()。
A、16B、17C、31D、3210.如图所示有向图的一个拓扑序列是( )A、ABCDEFB、FCBEADC、FEDCBAD、DAEBCF二、填空题(每空1分,共20分)1.n (n﹥0)个顶点的无向图最多有条边,最少有条边。
2.在一棵A VL树中,每个结点的左子树高度与右子树高度之差的绝对值不超过.3.已知8个数据元素为(34,76,45,18,26,54,92,65),按照依次插入结点的方法生成一棵二叉排序树,则该树的深度为。
数据结构作业题
数据结构作业题(总15页) -本页仅作为预览文档封面,使用时请删除本页-第一章1、设n为正整数,利用大"O"记号,将下列程序段的执行时间表示为n的函数。
(1) i=1; k=0;while(i<n){ k=k+10*i;i++;}(2) i=0; k=0;do{k=k+10*i; i++;}while(i<n);(3) i=1; j=0;while(i+j<=n){if (i>j) j++;else i++;}(4)x=n; 编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。
当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。
两个栈均从两端向中间增长。
当向第0号栈插入一个新元素时,使top[0]增1得到新的栈顶位置,当向第1号栈插入一个新元素时,使top[1]减1得到新的栈顶位置。
当top[0]+1 == top[1]时或top[0] == top[1]-1时,栈空间满,此时不能再向任一栈加入新的元素。
试定义这种双栈(Double Stack)结构的类型定义,并实现初始化、判栈空、判栈满、插入、删除算法。
0 m-1【提示】类型定义:#define m 100;Typedef int dsType;试利用算符优先法,画出对如下中缀算术表达式求值时运算符栈和操作数栈的变化。
a +b * (c - d) – e# (#表示结束符)第四章设有模式串T1,T2,T1=‘aaab’,T2=‘abcabaa’,目标串s为‘abc aaabbabcabaacbacba’,(1)计算模式串T1的next(j) 和nextval(j)函数的值,并(按照nextval(j) )画出KMP算法匹配过程。
(2)计算模式串T2的next(j) 和nextval(j)函数的值,并(按照nextval(j) )画出KMP算法匹配过程。
数据结构形考作业
一、单项选择题(每小题2分,共42分)题目1对线性表进行二分查找时,要求线性表必须()。
选择一项:A. 以链接存储方式,且数据元素有序B. 以顺序存储方式,且数据元素有序C. 以链接存储方式D. 以顺序存储方式题目2采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为()。
选择一项:A. (n-1)/2B. nC. (n+1)/2D. n/2题目3有一个长度为10的有序表,按折半查找对该表进行查找,在等概率情况下查找成功的平均比较次数为()。
选择一项:A. 29/9B. 26/10C. 31/10D. 29/10题目4已知一个有序表为{11,22,33,44,55,66,77,88,99},则顺序查找元素55需要比较()次。
选择一项:A. 5B. 4C. 3D. 6题目5有数据{53,30,37,12,45,24,96},从空二叉树开始逐个插入数据来形成二叉排序树,若希望高度最小,应该选择的序列是()。
选择一项:A. 12,24,30,37,45,53,96B. 37,24,12,30,53,45,96C. 30,24,12,37,45,96,53D. 45,24,53,12,37,96,30题目6对于顺序存储的有序表{5,12,20,26,37,42,46,50,64},若采用折半查找,则查找元素26的比较次数是()。
选择一项:A. 4B. 5C. 6D. 3题目7在所有的排序方法中,关键字比较的次数与记录初始排列秩序无关的是()。
选择一项:A. 希尔排序B. 直接选择排序C. 直接插入排序D. 冒泡排序题目8从未排序序列中依次取出元素与已经排好序的序列中的元素作比较。
将其放入已排序序列的正确的位置上,此方法称为()。
选择一项:A. 交换排序B. 归并排序C. 插入排序D. 选择排序题目9依次将每两个相邻的有序表合并成一个有序表的排序方法称为()。
选择一项:A. 归并排序B. 选择排序C. 交换排序D. 插入排序题目10当两个元素出现逆序的时候就交换位置,这种排序方法称为()。
数据结构各章作业题目
第一章作业一、选择题1.被计算机加工的数据元素不是孤立的,它们彼此之间一般存在某种关系,通常把数据元素之间的这种关系称为( ).A。
规则B。
结构 C. 集合 D. 运算2.在Data_Structure=(D,S)中,D是()的有限集合。
A。
数据元素 B. 算法C。
数据操作D。
数据对象3.计算机所处理的数据一般具有某种关系,这是指()之间存在的某种关系。
A。
数据与数据B。
数据元素与数据元素C。
元素内数据项与数据项D。
数据文件内记录与记录4.顺序存储表示中数据元素之间的逻辑关系是由( )表示的.A。
指针B。
逻辑顺序 C. 存储位置D。
问题上下文5.链接存储表示中数据元素之间的逻辑关系是由( )表示的。
A。
指针B。
逻辑顺序C。
存储位置 D. 问题上下文6.从逻辑上可将数据结构分为()。
A. 动态结构和静态结构B. 紧凑结构和非紧凑结构C。
内部结构和外部结构D。
线性结构和非线性结构7.以下选项属于线性结构的是( )。
A。
广义表 B. 二叉树C。
串 D. 稀疏数组8.以下选项属于非线性结构的是().A。
广义表B。
队列 C. 优先队列D。
栈9.以下属于逻辑结构的是( )A. 顺序表B。
散列表 C. 有序表 D. 单链表10.一个完整的算法应该具有( )等特性。
A. 可执行性、可修改性和可维护性B. 可行性、确定性和有穷性C。
确定性、有穷性和可靠性D。
正确性、可读性和有效性11.若一个问题既可以用迭代方法也可以用递归方法求解,则( )的方法具有更高的时空效率.A. 迭代B。
递归C。
先递归后迭代D。
先迭代后递归12.一个递归算法必须包括( )A。
递归部分 B. 终止条件和递归部分C。
迭代部分 D. 终止条件和迭代部分13.算法的时间复杂度与()有关。
A. 问题规模B. 源程序长度C. 计算机硬件运行速度D. 编译后执行程序的质量二、指出下列各算法的功能并求出其时间复杂度。
(1)int Prime(int n){int i=2,x=(int)sqrt(n); //sqrt(n)为求n的平方根while(i<=x){if(n%i==0)break;i++;}if(i〉x)return 1;else return 0;}(2)int sum1(int n){int p=1,s=0;for(int i=1;i<=n;i++){p*=i;s+=p;}return s;}(3)int sum2(int n){int s=0;for(int i=1;i〈=n;i++){int p=1;for(int j=1;i〈=i;j++) p*=j;s+=p;}return s;}(4)int fun(int n){int i=1,s=1;while(s<n) s+=++i;return i;}(5)void mtable(int n){for(int i=1;i〈=n;i++){for(int j=i;j<=n;j++)cout<〈i〈<"*"<<j〈<"=”〈〈setw(2)<〈i*j<<" ”;cout<<endl;}}第二章作业 一、选择题1. 在线性表中的每一个表元素都是不可再分的( )A 。
数据结构题及参考答案
数据结构作业题作业题(一)一、单项选择题1. 从逻辑上可以把数据结构分为( c )两大类。
A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构2. 链表不具有的特点是( b )A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比3.下面程序段的时间复杂度的量级为( d )。
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(n²) D.O(n³)4.在一个带头结点的双向循环链表中,若要在p所指向的结点之前插入一个新结点,则需要相继修改(c)个指针域的值。
A.2 B.3C.4 D.65、一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是( b )。
A.98 B.100C.102 D.1066、判定一个栈s(最多元素为m0)为空的条件是(b)。
A.s-〉top! =0 B.s-〉top= =0C.s-〉top! =m0 D.s-〉top= =m07、循环队列用数组A[m](下标从0到m-1)存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是( a )。
A.(rear-front+m)%m B.rear-front+1C.rear-front-1 D. rear-front8、设有两个串S1与S2,求串S2在S1中首次出现位置的运算称作(c)。
A.连接 B.求子串C.模式匹配 D.判子串9、设串S1='ABCDEFG',S2='PQRST',函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串S的的从序号i的字符开始的j个字符组成的子串,len(s)返回串S的长度,则con(subs(S1,2,len(S2)),subs(S1,len(S2),2))的结果是( d )。
数据结构平时作业
数据结构平时作业引言概述:数据结构作为计算机科学的基础课程,是计算机专业学生必修的一门课程。
平时作业是巩固学生对数据结构知识的理解和应用的重要手段。
本文将从五个方面详细阐述数据结构平时作业的内容和意义。
一、作业内容1.1 理论题目:平时作业中通常包含一些理论题目,要求学生回答与数据结构相关的问题,如树的遍历方式、图的表示方法等。
1.2 编程题目:作业中常包含一些编程题目,要求学生根据所学的数据结构知识,编写相应的代码实现,如链表的插入、删除操作等。
1.3 综合题目:综合题目是将理论和编程结合起来的题目,要求学生综合运用所学的知识,解决实际问题,如使用栈实现括号匹配等。
二、作业要求2.1 理论题目要求:学生需要准确回答问题,理解并运用数据结构的概念和原理,给出合理的解释和例子。
2.2 编程题目要求:学生需按照作业要求,使用合适的数据结构和算法,编写出正确且高效的代码,并给出相应的测试用例进行验证。
2.3 综合题目要求:学生需要将理论和编程结合,灵便运用所学的知识,解决实际问题,同时给出详细的思路和步骤。
三、作业意义3.1 知识巩固:平时作业是巩固学生对数据结构知识的重要途径,通过理论题目的回答和编程题目的实现,加深对数据结构的理解和应用。
3.2 锻炼能力:作业要求学生独立思量和解决问题的能力,培养学生的编程能力和逻辑思维能力。
3.3 提高实践能力:作业中的编程题目要求学生将所学的知识应用到实际问题中,提高学生的实践能力和解决实际问题的能力。
四、作业建议4.1 认真对待:学生应认真对待每一次作业,按时完成,做到理论和实践相结合。
4.2 多思量:遇到难题时,学生应多思量,多与同学交流,共同解决问题,提高自己的思维能力和合作能力。
4.3 多实践:除了作业要求外,学生可以主动进行更多的实践,如参加编程竞赛,实现一些有趣的数据结构算法等,提高自己的编程能力和动手能力。
五、总结数据结构平时作业是巩固学生对数据结构知识的重要手段,通过作业的完成,学生能够加深对数据结构的理解和应用,提高自己的编程能力和解决实际问题的能力。
数据结构作业答案
1:41.如果待排序序列中两个数据元素具有相同的值,在排序后它们的位置发生颠倒,则称该排序是不稳定的。
()就是不稳定的排序方法。
1.起泡排序2.归并排序3.直接插入法排序4.简单选择排序2:8 带头结点的单链表head为空的判断条件是( )。
1.head==NULL2.head->next==NULL3. head->next==head4. head!=NULL3:9 在单链表中增加头结点的目的是为了( )。
1.方便运算的实现2.用于标识单链表3.使单链表中至少有一个结点4.用于标识起始结点的位置4:46 下列四个关键字序列中,( )不是堆。
1. {05,23,16,68,94,72,71,73}2.{05,16,23,68,94,72,71,73}3. {05,23,16,73,94,72,71,68}4.{05,23,16,68,73,71,72,94}5:20.设输入序列为1,2,3,4,5,借助一个栈可以得到的输出序列是( )。
1.2,4,1,3,52.3,4,1,5,23.3,2,4,1,54.4,1,3,2,56:50 对有n个记录的表按记录键值有序建立二叉排序树,在这种情况下,其平均查找长度的量级为()。
1.O(n)2.O(nlog2n)3.O(1)4. O(log2n)7:37.用分划交换排序方法对包含有n个关键的序列进行排序,最坏情况下执行的时间杂度为( )。
1.O(n)2. O(log2n)3.O(nlog2n)4. O(n2)8:38.邻接表的存储结构下图的深度优先遍历类似于二叉树(树)的( )。
1.先序遍历2.中序遍历3.后序遍历4.按层遍历9:48 对有n个记录的有序表采用二分查找,其平均查找长度的量级为()。
1. O(log2n)2.O(nlog2n)3.O(n)4. O(n2)10:2 线性表是具有n个( )的有限序列。
1.表元素2.字符3.数据元素4.信息项11:15 在一个单链表中,若删除(*p)结点的后继结点,则执行( )。
数据结构作业(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. 数组数组是一种线性数据结构,它能够存储相同类型的元素。
在数据结构作业中,数组常用于解决需要顺序访问元素的问题。
例如,计算一个数组的平均值或找出最大值。
2. 链表链表也是一种常见的线性数据结构。
它由节点组成,每个节点保存一个元素和一个指向下一个节点的引用。
链表常用于需要频繁插入和删除操作的场景。
在数据结构作业中,我们可能需要实现链表的插入、删除、反转等操作。
三、非线性数据结构1. 树树是一种分层的非线性数据结构。
它由节点和边组成,节点之间存在层次关系。
树常用于表达层级结构,比如文件系统或组织架构。
在数据结构作业中,我们可能需要实现树的遍历,例如前序遍历、中序遍历和后序遍历。
2. 图图是一种由节点和边组成的非线性数据结构。
节点之间的边可以表示任意关系。
图常用于表示网络、社交关系等复杂结构。
在数据结构作业中,我们可能需要实现图的遍历、最短路径算法等操作。
四、常见数据结构算法1. 查找算法查找算法用于在数据结构中查找一个特定的元素。
常见的查找算法包括线性查找、二分查找和哈希查找。
在数据结构作业中,我们可能需要根据特定要求选择合适的查找算法。
2. 排序算法排序算法是将一组元素按照特定顺序排列的算法。
常见的排序算法包括冒泡排序、插入排序和快速排序。
在数据结构作业中,我们需要选择合适的排序算法,以便高效地对数据进行排序操作。
五、应用实例数据结构的应用非常广泛,它在各个领域都有重要作用。
以下是一些数据结构在实际应用中的例子。
1. 括号匹配在编程中,我们经常需要检查括号是否匹配。
这可以通过使用栈这种数据结构来实现。
我们可以遍历字符串,每当遇到左括号时,将其入栈;每当遇到右括号时,将栈顶元素出栈并进行匹配。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程设计报告2014-2015学年第一学期课程设计题目:设计学生姓名:所在系部名称:计算机工程系所在班级名称:计算机科学2013()参加设计时间:课程设计课时: 30指导教师姓名:年月日第一题目:假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。
现要求一个新的集合C=A∪B。
算法思想:先初始化线性表LC,将LA的所有元素复制到LC中,然后扫描线性表LB,若LB的当前元素不在线性表LA中,则将其插入到LC中。
Void unionList(List LA, ListB, list &LC){int Lena, Lenc, i;Elem Type e;Init List (LC);for (i=1;i<=ListLength (LA);i++) /*将LA的所有元素插入到LA中*/{GetLElem(LA,i,e);ListInsert(LC,i,e,);}Lena=ListLength(LA);/*求线性表的长度*/Lenb=ListLength(LB);For(i=1,i<=Lenb;i++){GetElem(LB,i,e);/*取LB中第i个数据元素赋给e*/If(!LocateElem(LA),e));ListInsert(LC,++Lena,e);/*C中不存在和e相同者,则插入到LA中*/}}第二题目:有顺序表LA和LB,其元素均按从小到大的升序排列,编写一个算法将它们合并成一个顺序表LC,要求LC的元素也是按从小到大的升序排列。
算法思想:依次扫描顺序表A和BD的元素,比较当前元素的值,将较小值的元素赋给C,重复,直到一个线性表扫描完毕,然后将未完的那个顺序表中余下部分赋给C。
顺序表C的容量要能够容纳A、B两个顺序表相加的长度。
#include <stdio.h>#include <stdlib.h>#define DataType int#define MAXSIZE 100typedef struct{DataType data[MAXSIZE];int last;}seqlist;seqlist *Init_seqlist(){seqlist *L;L=(seqlist*)malloc(sizeof(seqlist));if(L){L->last=-1;return L;}}void merge(seqlist A,seqlist B,seqlist *C) {int i,j,k;i=0;j=0;k=0;while(i<=st&&j<=st)if(A.data[i]<B.data[j]){C->data[k]=A.data[i];k++;i++;}else{C->data[k]=B.data[j];k++;j++;}while(i<=st){C->data[k]=A.data[i];k++;i++;}while(j<=st){C->data[k]=B.data[j];k++;j++;}C->last=k-1;}void main(){seqlist A,B,*C;int r;int i,j,k;printf("请输入线性表A的长度:");scanf("%d",&r);st = r-1;printf("请输入线性表A的各元素值:\n");for(i=0; i<=st; i++){scanf("%d",&A.data[i]);}printf("\n请输出线性表A的各元素值:\n"); for(j=0;j<=st;j++)printf("%6d",A.data[j]);printf("\n请输入线性表B的长度:");scanf("%d",&r);st = r-1;printf("请输入线性表B的各元素值:\n");for(i=0; i<=st; i++){scanf("%d",&B.data[i]);}printf("\n请输出线性表B的各元素值:\n"); for(j=0;j<=st;j++)printf("%6d",B.data[j]);C=Init_seqlist();merge(A,B,C);printf("\n合并后线性表C的各元素值:\n"); for(k=0;k<=C->last;k++){printf("%6d",C->data[k]);}printf("\n");}运行结果:第三题目:新建一个单链表,求(1)单链表的长度.(2)取单链表的第i个数据元素.(3)对单链表进行插入操作.(4)对单链表进行删除操作。
算法思想:1)设一个移动指针P和计数器i,P所指结点后面若还有结点,P向后移动,计数器家1。
(2)从链表的第一个元素结点开始,判断当前结点值是否等于X。
若是,返回该结点的指针,否则继续后一个,直到链表结束为止。
找不到时返回空指针。
(3)第一步:查找第i-1个结点,若存在,继续第二步,否则结束。
第二步:申请、填装新结点。
;第三步:将新结点插入,结束。
(4)第一步:查找第i-1个结点,若存在,继续第二步,否则结束;第二步:若存在第i个结点则继续第三步,否则结束;第三步:删除第i个结点,结束。
程序代码:#include "common.h"#include "linklist.h"//求单链表的长度----取单链表的第I个数据元素---对单链表进行插入操作--对单链表进行删除操作void init_linklist(LinkList *l)/*对单链表进行初始化*/{*l=(LinkList)malloc(sizeof(Node));(*l)->next=NULL;}void CreateFromHead(LinkList L){Node *s;//char c;int c;int flag=1;while(flag) /* flag初值为1,当输入"0"时,置flag为0,建表结束*/{//c=getchar();scanf("%d",&c);fflush(stdin);if(c!=0){s=(Node*)malloc(sizeof(Node)); /*建立新结点s*/s->data=c;s->next=L->next;/*将s结点插入表头*/L->next=s;}elseflag=0;}}int ListLength(LinkList L)/*求带头结点的单链表L的长度*/{Node *p;int j;p=L->next;j=0; /*用来存放单链表的长度*/while(p!=NULL){p=p->next;j++;}return j; /*j为求得的单链表长度*/}Node *get_linklist(LinkList L,int i){Node *p;int j;p=L;j=0;while((p!=NULL)&&(j<i)){p=p->next;j++;}if(p!=NULL)return(p);elsereturn(0);}void Print(LinkList L){Node *p;p = L->next;while(p!=NULL){printf("%3d",p->data);p=p->next;}}int Insert_Linklist(LinkList L,int i,int x) {Node *p,*s;p=get_linklist(L,i-1);if(p==NULL)return 0;else{s=(Node*)malloc(sizeof(Node));s->data=x;s->next=p->next;p->next=s;return 1;}}int Del_LinkList(LinkList L,int i){LinkList p,s;p=get_linklist(L,i-1);if(p==NULL)return -1;else{if(p->next==NULL)return 0;else{s=p->next;p->next=s->next;free (s);return 1;}}}void main(){LinkList l;Node *q;int length,location,insertlocation,insertvalue,deleteposition;int length1;init_linklist(&l);printf("\n用头插法建立单链表,请输入链表数据,以0结束!\n");CreateFromHead(l);printf("带头结点的单链表L为:");Print(l);length=ListLength(l);printf("\n带头结点的单链表L的长度为:%4d\n",length);printf("要查找单链表L的位置为:");scanf("%d",&location);q=get_linklist(l,location);printf("要查找单链表L的元素为:%3d\n",q->data);//插入操作printf("要插入单链表L的位置为:");scanf("%d",&insertlocation);printf("要插入单链表L的元素值为:");scanf("%d",&insertvalue);Insert_Linklist(l,insertlocation,insertvalue);printf("插入元素后带头结点的单链表L为:");Print(l);//插入元素后的单链表的长度length1=ListLength(l);printf("\n带头结点的单链表L的长度为:%4d\n",length1);////删除操作printf("要删除单链表L的位置为:");scanf("%d",&deleteposition);Del_LinkList(l,deleteposition);printf("删除元素后带头结点的单链表L为:");Print(l);printf("\n");}运行结果:第四题目:新建一个单链表,写一个算法实现单链表的就地逆置。