将递增有序的单链表A和B合并成递减有序的单链表C

合集下载

北京邮电大学2018年807软件工程考研真题

北京邮电大学2018年807软件工程考研真题

北京邮电大学2018年硕士研究生入学统一考试试题考试科目:软件工程专业综合请考生注意:①所有答案(包括选择题和填空题)一律写在答题纸上,否则不计成绩②不允许考生使用计算器。

本试题包含数据结构,数据库和操作系统三个科目。

请考生在答题时注明答题科目。

数据结构总分90分,为必选部分。

其他两部分总分各为60分,是二选一科目。

必选科目数据结构(90分)一、选择题(每小题2分,共20分)1.在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是:A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)B.在第i个结点后插入一个新结点(1≤i≤n)C.删除第i个结点(1≤i≤n)D.将n个结点从小到大排序2 .若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1, p2, p3, …, p n,若p1=n,则p i为:A.i B.n-i C.n-i+1 D.不确定3.设有两个串p和q,求q在p中首次出现的位置的运算称作:A.连接 B.模式匹配 C.求子串 D.求串长4.二叉排序树的前序遍历和中序遍历序列如下:前序遍历:EFHIGJK,中序遍历:HFIEJKG。

该二叉树的根的右子树的根是:A.E B.F C.G D.H5.已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是:A.0321 B.0123 C.0132 D. 03126.下列二叉排序树中查找效率最高的是:A.平衡二叉树 B.排序二叉树C.没有左子树的排序二叉树 D.没有右子树的排序二叉树7.要尽可能快的对序列进行稳定的排序,则应该选择:A.快速排序 B.归并排序 C.冒泡排序 D.堆排序8.哈希表的地址区间是0到16,哈希函数为H(K)=K mod 17,采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59依次存储到哈希表中。

则元素59存放在哈希表中的地址是:A.8 B.9 C.10 D.119.如果线性表用链表实现,下面所列的算法中哪一种算法对线性表排序速度最快:A.简单选择排序 B.归并排序 C.插入排序 D.快速排序10.设矩阵A是某个有向图的邻接矩阵(0-1矩阵),矩阵B是m个A相乘,即B=A m=[b jk]。

数据结构课后习题答案详解(C语言版_严蔚敏) 2

数据结构课后习题答案详解(C语言版_严蔚敏) 2

数据结构习题集答案(C语言版严蔚敏)第2章线性表2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。

解:头指针是指向链表中第一个结点的指针。

首元结点是指链表中存储第一个数据元素的结点。

头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。

它可以对空表、非空表以及首元结点的操作进行统一处理。

2.2 填空题。

解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。

(2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。

单链表中逻辑上相邻的元素的物理位置不一定紧邻。

(3) 在单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的链域的值指示。

(4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。

2.3 在什么情况下用顺序表比链表好?解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。

2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。

解:2.5 画出执行下列各行语句后各指针及链表的示意图。

L=(LinkList)malloc(sizeof(LNode)); P=L;for(i=1;i<=4;i++){P->next=(LinkList)malloc(sizeof(LNode));P=P->next; P->data=i*2-1;}P->next=NULL;for(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2);for(i=1;i<=3;i++) Del_LinkList(L,i);解:2.6 已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是__________________。

《数据结构》习题集

《数据结构》习题集

《数据结构》习题集第一章序论思考题:1。

1简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型、抽象数据类型作业题:1。

2设有数据结构(D,R),其中D={d1, d2, d3, d4}R={r1,r2}r1={<d1, d2〉,<d2,d3>,<d3,d4〉,〈d1, d4>,〈d4,d2>, 〈d4, d1〉}r2={(d1, d2),(d1,d3),(d1, d4),(d2, d4), (d2, d3)}试绘出其逻辑结构示意图。

1。

3设n是正整数。

试写出下列程序段中用记号“△”标注的语句的频度: (1)i=1; k=0;while(i〈=n-1){△k+=10*i;i++;}(2) i=1; k=0;do {△k+=10*i;i++;}while(i〈=n-1)(3)i=1; k=0;do {△k+ = 10*i; i++;}while(i==n);(4) i=1; j=0;while(i+j≤n) {△if(i〈j) i++;else j++;}(5) x=n; y=0; //n是不小于1的常数while(x〉=(y+1)*(y+1)){△y++;}(6)x=91; y=100;while ( y>0 ){△if(x>100) { x—=10; y——; }else x++ ;}(7) for( i=0; i〈n; i++)for( j=i; j〈n; j++)for( k=j; k〈n; k++)△x+=2;1。

4 试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z的值。

1.5 已知k阶斐波那契序列的定义为:f0=0,f1=0,……,f k—2=0,f k—1=1;f n=f n—1+f n-2+……+f n-k, n=k,k+1,……试编写求k阶斐波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。

数据结构考试题9

数据结构考试题9

要求:所有的题目的解答均写在答题纸上,需写清楚题目的序号。

每张答题纸都要写上姓名和学号。

一、单项选择题(每小题2分,共20小题,共计40分)1、设n是描述问题规模的非负整数,下面程序片段的时间复杂度为()。

x=1;while (x<=n)x=5*x;A. O(log5n)B.O(n)C.O(n log5n)D.O(n5)2、顺序表和链表相比存储密度较大,这是因为()。

A.顺序表的存储空间是预先分配的B.顺序表不需要增加指针来表示元素之间的逻辑关系C.链表中所有节点的地址是连续的D.顺序表中所有元素的存储地址是不连续的3、在长度为n(n≥1)的循环双链表L中,在尾节点之后插入一个新节点的时间复杂度为()。

A. O(n2)B.O(n)C. O(1)D.O(n log2n)4、设栈的输入序列是1、2、3、4,则()不可能是其出栈序列。

A.1,2,4,3B.2,1,3,4C.1,4,3,2D.4,3,1,25、当用一个数组data[0..n-1]存放栈中元素时,栈底最好()。

A. 设置在data[0]或data[n-1]处B.设置在data[n-1]处C. 设置在data[0]处D.设置在data数组的任何位置6、在数据处理过程中常需要保存一些中间数据,如果先保存的数据先处理,则使用()来保存这些数据。

A.线性表B. 队列C. 栈D.单链表7、在环形队列中,元素的排列顺序()。

A.与队头和队尾指针的取值有关B.与元素值的大小有关C.由元素进队的先后顺序确定D.与存放队中元素的数组大小有关8、将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为()。

A.100B.40C.80D.559、设目标串为s,模式串为是t,在KMP模式匹配中,next[4]=2的含义是()。

A.表示t4字符前面最多有2个字符和开头的2个字符相同B.表示s4字符前面最多有2个字符和开头的2个字符相同C.表示目标串匹配失败的位置是i=4D.表示模式串匹配失败的位置是j=210、由权值分别为9、2、7、5的四个叶子节点构造一棵哈夫曼树,该树的带权路径长度为()。

专业课计算机科学模拟题2020年(78)_真题-无答案

专业课计算机科学模拟题2020年(78)_真题-无答案

专业课计算机科学模拟题2020年(78)(总分150,考试时间180分钟)单项选择题1. 1.若某线性表中最常用的操作是在最后一个结点之后插入一个结点和删除第一个结点,则下面最节省运算时间的存储方式是( )。

A. 单链表B. 带有头指针的单循环链表C. 双链表D. 带有尾指针的单循环链表2. 2.已知两个长度分别为l和s的降序链表,若将它们合并为一个长度为l+s的升序链表,则最坏情况下的时间复杂度是( )。

A. D(l)B. D(ls)C. D(min(l,s))D. D(max(l,s))3. 3.线性表中存放的主要是( )。

A. 整型常量B. 字符C. 数据元素D. 信息元素4. 4.下面的叙述中正确的是( )。

I.线性表在链式存储时,查找第i个元素的时间同i的值成正比Ⅱ.线性表在链式存储时,查找第i个元素的时间同i的值无关Ⅲ.线性表在顺序存储时,查找第i个元素的时间同i的值成正比A. 仅ⅠB. 仅ⅡC. 仅ⅢD. Ⅰ、Ⅱ、Ⅲ5. 5.对于某线性表来说,主要的操作是存取任一指定序号的元素和在最后进行插入运算,那么应该选择( )存储方式最节省时间。

A. 顺序表B. 双链表C. 带头结点的双循环链表D. 单循环链表6. 6.若线性表最常用的运算是查找第i个元素及其前驱的值,则下列存储方式中最节省时间的是( )。

A. 单链表B. 双链表C. 单循环链表D. 顺序表7. 7.如果线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( )存储方式最节省运算时间。

A. 单链表B. 仅有头指针的单循环链表C. 双链表D. 仅有尾指针的单循环链表8. 8.算法的时间复杂度取决于( )。

A. 问题的规模B. 待处理数据的初态C. A和BD. 以上都不正确9. 9.关于链表的特点,下面的叙述中不正确的是( )。

A. 插入、删除运算方便B. 可实现随机访问任一元素C. 不必事先估计存储空间D. 所需空间与线性长度成正比10. 10.设线性表中有2n个元素,以下操作中,在单链表上实现要比在顺序表上实现效率更高的是( )。

数据结构模拟试卷和答案

数据结构模拟试卷和答案

北京语言大学网络教育学院《数据结构》模拟试卷一注意:1.试卷保密,考生不得将试卷带出考场或撕页,否则成绩作废。

请监考老师负责监督。

2.请各位考生注意考试纪律,考试作弊全部成绩以零分计算。

3.本试卷满分100分,答题时间为90分钟。

4.本试卷分为试题卷和答题卷,所有答案必须答在答题卷上,答在试题卷上不给分。

一、【单项选择题】(本大题共10小题,每小题2分,共20分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在答题卷相应题号处。

1、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则采用()存储方式最节省时间。

[A] 顺序表[B] 双链表[C]带头结点的双循环链表[D] 单循环链表2、队列操作的原则是()。

[A] 只能进行删除[B] 后进先出[C]只能进行插入[D] 先进先出3、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是()的二叉树。

[A] 空或只有一个结点[B] 高度等于其结点数[C]任一结点无左孩子[D] 任一结点无右孩子4、在下列排序方法中,()方法平均时间复杂度为0(nlogn),最坏情况下时间复杂度为0(n2)。

[A] 插入排序[B] 希尔排序[C] 快速排序[D] 堆排序5、对二叉树从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一个结点的左、右孩子中,其左孩子编号小于右孩子编号。

则可采用()次序的遍历实现编号。

[A] 先序[B] 中序[C]后序[D] 从根开始的层次遍历6、若用数组S[n]作为两个栈S1和S2的共用存储结构,对任何一个栈,只有当S[n]全满时才不能作入栈操作。

为这两个栈分配空间的最佳方案是()。

[A] S1的栈底位置为0,S2的栈底位置为n[B] S1的栈底位置为-1,S2的栈底位置为n/2[C] S1的栈底位置为0,S2的栈底位置为n-1[D] S1的栈底位置为0,S2的栈底位置为n/27、对一棵二叉排序树进行()遍历,可以得到该二叉树的所有结点按值从小到大排列的序列。

南京航空航天大学829计算机专业基础2013—2018年考研真题试题

南京航空航天大学829计算机专业基础2013—2018年考研真题试题

南京航空航天大学2013年硕士研究生入学考试初试试题A 卷科目代码: 829科目名称:计算机专业基础满分: 150分注意: ①认真阅读答题纸上的注意事项;②所有答案必须写在答题纸上,写在本试题纸或草稿纸上均无效;③本试题纸须随答题纸一起装入试题袋中交回!(一、数据结构部分 50分)1.(1)(2分)推导二叉树的性质3:度为2的结点数与度为0的结点数的关系。

(2)(3分)推导二叉树的性质4:求解N 个结点完全二叉树的高度。

(3)(5分))将关键字序列(75,24, 8,10,28,64,16,35)存储在长度为10的哈希表中,使用哈希函数H(key) = Key % 10,并采用二次探测再散列法解决冲突,说明关键字存储位置的计算方法,画出哈希表示意图。

2.(10分)试用Dijkstra 算法,求下图中从V1到其余各顶点的最短路径,写出算法过程中每一步的状态。

3.(10分)设稀疏矩阵用三元组顺序表存储,用下面例子说明快速转置算法的执行过程。

A 5×6=((1,3,8),(1,5,68),(3,1,12),(3,4,52),(3,5,3),(4,1,45),(5,1,26)) 4.(10分)已知有两个带头结点的单链表A 和B,元素值递增有序,编写函数,调整删减A 链表,使A 链表结点的元素值为A、B 的交集,并成为一个递减有序的单链表。

要求先给出算法思想,再写出相应代码。

5.(10分)编写函数,用非递归方法,求二叉链表表示的二叉树T 的高度。

要求先给出算法思想,再写出相应代码。

(二、操作系统部分 50分)1.简答题(20分,每题5分)(1) 为什么要引入线程,线程和进程有何区别?V2V 4V5V6 V 1V 3123137 7 516(2) 什么是通道,通道经常采用如图所示的交叉连接,为什么?通道1存储器控制器1控制器2通道2I/O设备1 I/O设备2 I/O设备3 I/O设备4(3)简述操作系统引入缓冲的原因?(4)何谓文件的物理结构,可分为哪几类,有何优缺点?2.(10分)假设有个南北向的胡同很窄,仅能容同方向的人顺序走过,相对方向的两个人则无法通过。

山东师范大学数据结构考研真题

山东师范大学数据结构考研真题

第1章绪论一、选择题1. 算法的时间复杂度取决于( C )A.问题的规模 B. 待处理数据的初态 C. A和B2.计算机算法指的是(C),它必须具备(B)这三个特性。

(1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法(2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性D. 易读性、稳定性、安全性3.从逻辑上可以把数据结构分为( C )两大类。

A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构4.以下与数据的存储结构无关的术语是( D )。

A.循环队列 B. 链表 C. 哈希表 D. 栈5.在下面的程序段中,对x的赋值语句的频度为( C )FOR i:=1 TO n DOFOR j:=1 TO n DOx:=x+1;A. O(2n) B.O(n) C.O(n2) D.O(log2n)6.连续存储设计时,存储单元的地址( A )。

A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续二、判断题1. 数据元素是数据的最小单位。

( F ) 【山东师范大学 2001 一、1 (2分)】2. 记录是数据处理的最小单位。

( F )3.数据的物理结构是指数据在计算机内的实际存储形式。

( T )【山东师范大学2001 一、2(2分)】4. 在顺序存储结构中,有时也存储数据结构中元素之间的关系。

( F )5. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。

( F )三、填空1.数据的物理结构包括的表示和的表示。

2. 对于给定的n个元素,可以构造出的逻辑结构有(1),(2),(3),_(4)四种。

3.数据的逻辑结构是指。

4.一个数据结构在计算机中称为存储结构。

5.数据结构中评价算法的两个重要指标是6.已知如下程序段FOR i:= n DOWNTO 1 DO {语句1}BEGINx:=x+1;{语句2}FOR j:=n DOWNTO i DO {语句3}y:=y+1; {语句4}END;语句1执行的频度为(1);语句2执行的频度为(2);语句3执行的频度为(3);语句4执行的频度为(4)。

数据结构复习题目及答案

数据结构复习题目及答案

《数据结构-C语言版》第一章绪论单项选择题1.在数据结构中,数据的基本单位是_____ ____。

A. 数据项B. 数据类型C. 数据元素D. 数据变量2.数据结构中数据元素之间的逻辑关系被称为__ ____。

A. 数据的存储结构B. 数据的基本操作C. 程序的算法D. 数据的逻辑结构3.在数据结构中,与所使用计算机无关的是数据的____ ___。

A. 存储结构B. 逻辑和物理结构C. 逻辑结构D. 物理结构4.在链式存储结构中,数据之间的关系是通过____ ____体现的。

A. 数据在存的相对位置B. 指示数据元素的指针C. 数据的存储地址D. 指针5.计算算法的时间复杂度是属于一种____ ___。

A. 事前统计的方法B. 事前分析估算的方法C. 事后统计的方法D. 事后分析估算的方法6.在对算法的时间复杂度进行估计的时候,下列最佳的时间复杂度是____ __。

A. n2B. nlognC. nD. logn7.设使用某算法对n个元素进行处理,所需的时间是T(n)=100nlog2n+200n+2000,则该算法的渐近时间复杂度为____ ___。

A. O(1)B. O(n)C. O(200n)D. O(nlog2n)CDCBBDD第二章线性表单项选择题1.链表不具有的特点是____ ____。

A. 可随机访问任一元素B. 插入和删除时不需要移动元素C. 不必事先估计存储空间D. 所需空间与线性表的长度正比2.设顺序表的每个元素占8个存储单元。

第1个单元的存储地址是100,则第6个元素占用的最后一个存储单元的地址为。

A. B. 140 C. 147 D. 1483.在线性链表存储结构下,插入操作算法。

A. 需要判断是否表满B. 需要判断是否表空C. 不需要判断表满D. 需要判断是否表空和表满4.在一个单链表中,若删除p所指结点的后继结点,则执行。

A. p->next = p->next->next;B. p->next = p->next;C. p = p->next->next;D. p = p->next; p->next = p->next->next;5.将长度为n的单链表接在长度为m的单链表之后的算法时间复杂度为。

测试题(1)

测试题(1)

一、选择题1.从一个具有n个结点的单链表中查找值为x的结点,在查找成功情况下,需平均比较(n个节点,单链表。

如果x等于第一个元素的值。

则要比较1次x等于第二个元素的值,则要比较2次…最不巧:x值刚好等于第n个元素,则要比较x次所以总次数是1+2+3+……+n-1+n=(n+1)*n/2所以平均需要:(n+1)/2次。

顺序数组可以用折半查找,需要log2…为低…N 次个结点。

A.n B.n/2 C.(n-1)/2 D.(n+1)/22.(a )插入、删除速度快,但查找速度慢。

链表只需要修改前驱或者前驱与后继的指针就可以,查找时链表需要顺序查找,并且由于读取指针耗费时间A.链表B.顺序表C.有序顺序表D.上述三项无法比较3.若希望从链表中快速确定一个结点的前驱,则链表最好采用(c)方式。

双链表在结点前驱后继查找上的时间复杂度是O(1)A.单链表B.循环单链表C.双向链表D.任意4.在一个单链表中,若删除p所指结点的后继结点,则执行(d)。

p->next指向p指针的后继结点,p->next->next指向后继结点的后继结点。

A.p->next=p->next B.p=p->next->nextC.p=p->next;p->next=p->next->next; D.p->next=p->next->next5.带头结点的单链表head为空的判定条件是(b)。

A.head==NULL B.head->next==NULLC.head->next==head D.head!=NULL6.在循环双向链表的p所指结点之后插入s所指结点的操作是(d)。

A.p->next=s;s->prior=p;p->next->prior=s;s->next=p->next;B.p->next=s;p->next->prior=s;s->prior=p;s->next=p->next;C.s->prior=p;s->next=p->next;p->next=s;p->next->prior=s;D.s->prior=p;s->next=p->next;p->next->prior=s;p->next=s;7.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(a)存储方式最节省时间。

数据结构预算法 习题解答第2章

数据结构预算法 习题解答第2章
3.简答题
1.循环队列的优点是什么?如何判别它的空和满? 循环队列的优点是能够克服“假溢满”现象。 设有循环队列 sq,队满的判别条件为: (sq->rear+1)%maxsize==sq->front;或 sq->num==maxsize。 队空的判别条件为: sq->rear==sq->front。 2.栈和队列数据结构各有什么特点,什么情况下用到栈,什么情况下用到队列? 栈和队列都是操作受限的线性表,栈的运算规则是“后进先出”,队列的运算规则是“先进先出”。栈 的应用如数制转换、递归算法的实现等,队列的应用如树的层次遍历等。 3.什么是递归?递归程序有什么优缺点? 一个函数在结束本函数之前,直接或间接调用函数自身,称为递归。例如,函数 f 在执行中,又调用 函数 f 自身,这称为直接递归;若函数 f 在执行中,调用函数 g,而 g 在执行中,又调用函数 f,这称为间 接递归。在实际应用中,多为直接递归,也常简称为递归。 递归程序的优点是程序结构简单、清晰,易证明其正确性。缺点是执行中占内存空间较多,运行效率 低。 4.设有编号为 1,2,3,4 的四辆车,顺序进入一个栈式结构的站台,试写出这四辆车开出车站的所有可 能的顺序(每辆车可能入站,可能不入站,时间也可能不等)。 1234,1243,1324,1342,1432,213,2143,2314,2341,2431,3214,3241,3421,4321
【提示】对顺序表 A,从前向后依次判断当前元素 A->data[i]是否介于 x 和 y 之间,若是,并不立即删除, 而是用 n 记录删除时应前移元素的位移量;若不是,则将 A->data[i]向前移动 n 位。n 用来记录当前已删除 元素的个数。
void delete(Seqlist *A,int x,int y)

石家庄铁道大学数据结构试卷卷A

石家庄铁道大学数据结构试卷卷A

一、单项选择题(每小题2分,共20分)1. 计算机中的算法是指解决某一问题的有限操作序列,它必须具备输入、输出、()等5个特性。

A. 可行性、可移植性和可扩充性B. 可行性、有穷性和确定性C. 确定性、有穷性和稳定性D. 易读性、稳定性和确定性2. 循环链表的主要优点是()。

A. 不再需要头指针B. 已知某结点位置后能容易找到其直接前驱C. 在进行插入、删除运算时能保证链表不断开D. 在表中任一结点出发都能扫描整个链表3. 已知指针p和q分别指向某单链表中第一个结点和最后一个结点。

假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为()。

A. q->next=s->next;s->next=p;B. s->next=p;q->next=s->next;C. p->next=s->next;s->next=q;D. s->next=q;p->next=s->next;4. 判定一个顺序栈S(栈空间大小为n)为空的条件是()。

A. S->top==0B. S->top!=0C. S->top==nD. S->top!=n5. 循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是()。

A. (rear-front+m)%mB. rear-front+1C. rear-front-1D. rear-front6. 对一些特殊矩阵采用压缩存储的目的主要是为了()。

A. 表达变得简单B. 对矩阵元素的存取变得简单C. 去掉矩阵中的多余元素D. 减少不必要的存储空间的开销7. 对二叉排序树进行()遍历,可得到包含该二叉树所有结点的有序序列。

A.层序B.前序C.中序D.后序8. 一个无向图包含7个顶点,则这个无向图中边的总数最多是()条。

线性表编程练习题

线性表编程练习题

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

请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。

输入: 1 2 5 6 83 4 7 9 10输出: 10 9 8 7 6 5 4 3 2 1测试数据输入:7 9 10 118 12 13 14输出:14 13 12 11 10 9 8 7链表翻转2.带头结点且头指针为ha和hb的两线性表A和B 分别表示两个集合。

两表中的元素皆为递增有序。

请写一算法求A和B的并集AUB。

要求该并集中的元素仍保持递增有序。

且要利用A和B的原有结点空间。

输入: 1 2 5 6 82 5 7 9输出: 1 2 5 6 7 8 9测试数据输入:7 9 10 118 9 10 11输出:7 8 9 10 113. 知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。

要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。

4. 顺序结构线性表LA与LB的结点关键字为整数。

LA与LB的元素按非递减有序,线性表空间足够大。

试用类PASCAL语言给出一种高效算法,将LB中元素合到LA中,使新的LA的元素仍保持非递减有序。

高效指最大限度的避免移动元素。

5. 已知不带头结点的线性链表list,链表中结点构造为(data、link),其中data为数据域,link为指针域。

请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。

要求链接过程中不得使用除该链表以外的任何链结点空间。

6. 设L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,试设计利用直接插入的原则把该链表整理成数据递增的有序单链表的算法。

7. 设 Listhead为一单链表的头指针,单链表的每个结点由一个整数域DATA和指针域NEXT组成,整数在单链表中是无序的。

编一PASCAL 过程,将 Listhead链中结点分成一个奇数链和一个偶数链,分别由P,Q指向,每个链中的数据按由小到大排列。

计算机四级考试习题练习(第2章线性表习题练习解析)

计算机四级考试习题练习(第2章线性表习题练习解析)

计算机四级考试习题练习(第2章线性表习题练习解析)2.1 试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。

答:开始结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。

链表的头指针是一指向链表开始结点的指针,单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。

头结点是在链表的开始结点之前附加的一个结点。

有了头结点之后,头指针指向头结点,不论链表否为空,头指针总是非空。

而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致。

2.2 何时选用顺序表、何时选用链表作为线性表的结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1.基于空间的考虑。

当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。

2.基于时间的考虑。

若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。

并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。

2.3 在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素?答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点。

删除一个结点需平均移动/2个结点。

具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。

i越接近n则所需移动的结点数越少。

2.4 为什么在单循环链表中设置尾指针比设置头指针更好?答:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear-next-next 和rear,查找时间都是O。

数据结构(1-2-3章)课后题答案解析

数据结构(1-2-3章)课后题答案解析
西北大学可视化技术研究所
q=p; p=p->next; b->next=q; q->next=B; b=b->next; } else {//分出其他字符结点 q=p; p=p->next; c->next=q; q->next=C; c=c->next; } } }//结束
西北大学可视化技术研究所
A.双向链表
B.双向循环链表
C.单向循环链表 D.顺序表
(4)下列选项中, D 项是链表不具有的特点。
A.插入和删除运算不需要移动元素
B.所需要的存储空间与线性表的长度成正比
C.不必事先估计存储空间大小
D.可以随机访问表中的任意元素
西北大学可视化技术研究所
(5)在链表中最常用的操作是删除表中最后一个结点和 在最后一个结点之后插入元素,则采用 C 最 节省时间。
西北大学可视化技术研究所
8.假设两个按元素值递增有序排列的线性 表A和B,均以单链表作为存储结构,请 编写算法,将A表和B表归并成一个按元 素值递减有序排列的线性表C,并要求利 用原表(即A表和B表的)结点空间存放 表C。
西北大学可视化技术研究所
算法描述:要求利用现有的表A和B中的结 点空间来建立新表C,可通过更改结点的next 域来重新建立新的元素之间的线性关系。为保 证新表递减有序可以利用头插法建立单链表的 方法,只是新建表中的结点不用malloc,而只 需要从A和B中选择合适的点插入到新表C中即 可。
西北大学可视化技术研究所
1.3填空题: (1)变量的作用域是指 变量的有效范围 (2)抽象数据类型具有 数据抽象 、 信息隐 蔽 的特点。 (3)一种抽象类型包括 数据对象 、 结构 关系 和 基本操作 。

练习1设有两个按元素递增的有序表A与B,设计一个算法将

练习1设有两个按元素递增的有序表A与B,设计一个算法将
d Merge(SqList A,SqList B,SqList &C) { //将有序表A,B合并为有序表C int i=0,j=0,k=0; while (i<A.len && j<B.len) { if(A.data[i]<=B.data[j]) { C.data[k]=A.data[i]; i++;k++;} else { C.data[k]=B.data[j]; j++;k++;} } while(i<A.len) { C.data[k]=A.data[i]; i++;k++;} while(j<B.len) { C.data[k]=B.data[j]; j++;k++;} C.len=k; }
针,试设计一个算法,将这两个有序链表合并成一个非递减有 序单链表。要求结果链表仍使用原来两个链表的存储空间,不 另外占用其他的存储空间。表中允许有重复的数据。
2019/1/21
1:
SLink *MaxNode(SLink *sq) { SLink *p=sq->next,*q=p; while (p!=NULL) { if (p->data>q->data) q=p; p=p->next; } return q; }
2019/1/21
void Move(SqList A) { //将整型元素互不相等的线性表A中的奇数移到偶数之前 int i=0,j,k; j=A.len-1; ElemType temp; while(i<=j) { while(A.data[i]%2==0) i++; while(A.data[j]%2==1) j--; if(i<j) { temp=A.data[i];A.data[i]=A.data[j];A.data[j]=temp;} } }

数据结构(中国海洋大学)知到章节答案智慧树2023年

数据结构(中国海洋大学)知到章节答案智慧树2023年

数据结构(中国海洋大学)知到章节测试答案智慧树2023年最新第一章测试1.图书馆的数目检索系统采用关系的数据结构。

参考答案:线性2.是相互之间存在一种或多种特定关系的数据元素的集合。

参考答案:数据结构3.()是一个值的集合和定义在这个值集上的一组操作的总称。

参考答案:数据类型4.算法的确定性是指()参考答案:算法中的每一条指令必须有确切的含义第二章测试1.线性表中的数据元素有一个前驱多个后继。

参考答案:错2.用顺序结构存储,删除最后一个结点时,()参考答案:一定不会移动其它结点位置3.链表中逻辑上相邻的元素的物理地址__________相邻。

参考答案:不一定4. 1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B 表)的结点空间构造C表。

//将合并逆置后的结果放在C表中,并删除B表StatusListMergeOppose_L(LinkList &A,LinkList &B,LinkList &C){LinkList pa,pb,qa,qb;pa=A;pb=B;qa=pa; //保存pa的前驱指针qb=pb; //保存pb的前驱指针pa=pa->next;pb=pb->next;A->next=NULL;C=A;while(pa&&pb){if(pa->data<pb->data){qa=pa;pa=pa->next;qa->next=A->next; //将当前最小结点插入A表表头A->next=qa;}else{qb=pb;pb=pb->next;( )//将当前最小结点插入B表表头A->next=qb;}}while(pa){qa=pa;pa=pa->next;qa->next=A->next;A->next=qa;}while(pb){qb=pb;pb=pb->next;qb->next=A->next;A->next=qb;}pb=B;free(pb);return OK;}参考答案:qb->next=A->next5.假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。

两个顺序链表的合并【openjudge】

两个顺序链表的合并【openjudge】

两个顺序链表的合并【openjudge】总时间限制: 2ms内存限制: 1024kB描述已知两个线性单链表A和B中的元素以递增有序排列(数据长度和元素由键盘输⼊),编写算法将A表和B表归并成⼀个按元素值递增的有序表C,并要求利⽤原表(即A和B表的)节点空间存储表C。

再输⼊链之前,先要输⼊链的长度样例输⼊61 3 6 7 12 135-1 3 8 10 15样例输出-1 1 3 3 6 8 9 10 12 13 15提⽰只有⼀组测试数据,不需要循环重复输⼊搞了N久,才搞出来的,发现了不少⾃⾝的问题。

后来参考了⽹上的代码。

但是那个代码有点错误,坑爹呢,⾃⼰⼜边调试边改正。

最初想交叉合并的,但是发现太难了。

后来直接⽤插⼊排序的思想吧。

即便知道了插排,实现起来还是困难。

感觉数据结构这个东西,技巧性太强了。

有很多时候,即使你有思想,也实现不了,或许这是语法基础的⽋缺吧。

不写了,要上思修了。

后天放五⼀,所以这周末补课。

#include <stdio.h>#include <malloc.h>typedef struct Lnode{int data;struct Lnode *next;}LNode,*Linklist;LNode *A,*B,*p;void Initlist(Linklist *L){*L=(LNode *)malloc(sizeof(LNode));(*L)->next=NULL;}void Inselem(LNode *L,int n){int x,i;LNode *s,*p;p=L;for(i=0;i<n;i++){scanf("%d",&x);s=(LNode *)malloc(sizeof(LNode)); s->next=NULL;s->data=x;p->next=s;p=s;}}void Mergelist(LNode *a,LNode *b){Linklist p,q,s,t;int x;p=a->next;q=a;s=b->next;t=b;while(p!=NULL&&s!=NULL){while(p->data<=s->data){q=p;p=p->next;if(p==NULL)goto end;}q->next=s;while(p->data>s->data) {t=s;s=s->next;if(s==NULL)goto end;}t->next=p;}end:if(p==NULL)q->next=s;if(s==NULL)t->next=p;}int main(){int n,m;Initlist(&A);Initlist(&B);scanf("%d",&n);Inselem(A,n);scanf("%d",&m);Inselem(B,m);Mergelist(A,B);p=A->next;while(p!=NULL){printf("%d ",p->data); p=p->next;}return 0;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
print(C);//输出单链表C
}
B=CreateLinkList();//生成单链表B
printf("Output list B:\n");
print(B);//输出单链表B
printf("Make list C:\n");
Merge(A,B,&C);//将升序链表A、B合并成降序链表C
printf("Output list C:\n");
p->next=NULL;
q->next=p;//在链尾插入
q=p;
}
return head;//返回指向单链表的头指针head
}
void Merge(LNode *A,LNode *B,LNode **C)
{ //将升序链表A、B合并成降序链表*C
LNode *p,*q,*s;
p=A->nex
LNode *A,*B,*C;
printf("Input data of list A:\n");
A=CreateLinkList();//生成单链表A
printf("Output list A:\n");
print(A);//输出单链表A
printf("Input data of list B:\n");
将递增有序的单链表A和B合并成递减有序的单链表C
实现程序如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;//data为结点的数据信息
struct node *next;//next为指向后继结点的指针
}LNode;//单链表结点类型
{
s=p;
p=p->next;
}
else
{
s=q;
q=q->next;
}
s->next=(*C)->next; //用头插法将结点*s插到链表*C的头结点之后
(*C)->next=s;
}
if(p==NULL)//如果指向链表A的指针*p为空,则使*p指向链表B
p=q;
while(p!=NULL) //将*p所指链表中的剩余结点依次摘下插入的链表C的链首
scanf("%d", &n);//读入结点数据
printf("Input data of list: \n");
for(i=1;i<=n;i++)//生成链表的数据结点
{
p=(LNode *)malloc(sizeof(LNode));//申请一个结点空间
scanf("%d",&p->data);
{
s=p;
p=p->next;
s->next=(*C)->next;
(*C)->next=s;
}
}
void print(LNode *p)//输出单链表
{
p=p->next;
while(p!=NULL)
{
printf("%d,",p->data);
p=p->next;
}
printf("\n");
}
void main()
LNode *CreateLinkList()//生成单链表
{
LNode *head,*p,*q;
int i,n;
head=(LNode*)malloc(sizeof(LNode));//生成头结点
head->next=NULL ;
p=head;
q=p;//指针q始终指向链尾结点
printf("Input length of list: \n");
q=B->next;// q始终指向链表B的第一个未比较的数据结点
*C=A;//生成链表的*C的头结点
(*C)->next=NULL;
free(B); //回收链表B的头结点空间
while(p!=NULL&&q!=NULL) //将A、B两链表中当前比较结点中值小者赋给*s
{
if(p->data<q->data)
相关文档
最新文档