数据结构作业
数据结构作业

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),按照依次插入结点的方法生成一棵二叉排序树,则该树的深度为。
- 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");}运行结果:第四题目:新建一个单链表,写一个算法实现单链表的就地逆置。