删除顺序表L中值为X的结点
数据结构(本科)武汉理工大学-在线作业
数据结构(本科)武汉理工大学在线作业一、判断(共计40分,每题2.5分)1、快速排序是排序算法中平均性能最好的一种排序。
()A. 正确B. 错误答案:【A】2、调用一次深度优先遍历可以访问到图中的所有顶点。
()A. 正确B. 错误答案:【B】3、对连通图进行深度优先遍历可以访问到该图中的所有顶点。
()A. 正确B. 错误答案:【A】4、线性表中的所有元素都有一个前驱元素和后继元素。
()A. 正确B. 错误答案:【B】5、设一棵二叉树的先序序列和后序序列,则能够唯一确定出该二叉树的形状。
()A. 正确B. 错误答案:【B】6、先序遍历一棵二叉排序树得到的结点序列不一定是有序的序列。
()A. 正确B. 错误答案:【A】7、不论线性表采用顺序存储结构还是链式存储结构,删除值为X的结点的时间复杂度均为O(n)。
()A. 正确B. 错误答案:【A】8、满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
()B. 错误答案:【A】9、子串“ABC”在主串“AABCABCD”中的位置为2。
( )A. 正确B. 错误答案:【A】10、非空的双向循环链表中任何结点的前驱指针均不为空。
()A. 正确B. 错误答案:【A】11、分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。
()A. 正确B. 错误答案:【A】12、线性表的顺序存储结构比链式存储结构更好。
()A. 正确B. 错误答案:【B】13、向二叉排序树中插入一个结点需要比较的次数可能大于该二叉树的高度。
()A. 正确B. 错误答案:【B】14、层次遍历初始堆可以得到一个有序的序列。
()A. 正确B. 错误答案:【B】15、冒泡排序在初始关键字序列为逆序的情况下执行的交换次数最多。
()A. 正确B. 错误答案:【A】16、设初始记录关键字基本有序,则快速排序算法的时间复杂度为O(nlog2n)。
()A. 正确B. 错误二、单选(共计60分,每题2.5分)17、在二叉排序树中插入一个关键字值的平均时间复杂度为()。
线性表--题目(从顺序表中删除所有元素值为x的元素)
线性表--题⽬(从顺序表中删除所有元素值为x的元素)
1.问题描述:设计⼀个⾼效算法,从顺序表中删除所有元素值为x的元素,要求空间复杂度为O(1)
2.解题思路:(1)⾸先确定顺序表L中第⼀个值为x的元素的位置i,然后依次检查L.data[i+1]~L.data[L.length-1]中每个元素L.data[j](i+1<=j
(2)从头开始扫描顺序表L,⽤k记录下元素值等于x的元素个数,对于不等于x的元素,前移k个位置。
这种算法的时间复杂度为O(n),其中n为顺序表的长度。
具体实现代码如下:
上⾯两种⽅法的空间复杂度:由于其辅助空间不随着N的增⼤⽽增⼤,因此为常量级,因此,空间复杂度为O(1),满⾜题⽬要求。
《数据结构》自考同步习题
数据结构习题集1 概述一、选择题:1、下列算法的时间复杂度是()for(i=0;i<n;i+ +)c[i]=i;A.O(1)B.O(n)C.O(log2n)D.O(nlog2n)2、数据在计算机存储器内表示时,根据结点的关键字直接计算出该结点的存储地址,这种方法称为()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、下列算法的时间复杂度是()for(i=0;i<m;i+ +)for(j=0;j<n;j+ +)a[i][j]=i*j;A.O(m2)B.O(n2)C.O(m×n)D.O(m+n)11、算法分析的两个主要方面是()。
A.正确性和简明性B.数据复杂性和程序复杂性C.可读性和可维护性D.时间复杂性和空间复杂性二、填空题:1、数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它包括三方面的内容,分别是数据的逻辑结构、()和()。
2、数据的逻辑结构是从逻辑关系上描述数据,它与数据的()无关,是独立于计算机的。
1-4章复习题
一、选择题。
1. 算法的计算量的大小称为计算的()。
A.效率 B. 复杂性 C. 现实性 D. 难度2.计算机算法指的是(1),它必须具备(2)这三个特性。
(1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列D. 调度方法(2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性D. 易读性、稳定性、安全性3. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的5.从逻辑上可以把数据结构分为()两大类。
A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构6.程序段 For(i=n-1;i>0;i--)For(j=1;j<=i;j++)If(a[j]>a[j+1])a[j]←→a[j+1]其中 n为正整数,则最后一行的语句时间复杂度在最坏情况下是()A. O(n)B. O(nlogn)C. O(n3)D. O(n2)7.下述哪一条是顺序存储结构的优点?()A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示8.下面关于线性表的叙述中,错误的是哪一个?()A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
9.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表11. 链表不具有的特点是()A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比12.单链表的一个存储结点包含()A数据域或指针域 B指针域或链域C指针域和链域 D数据域和链域13.(1) 静态链表既有顺序存储的优点,又有动态链表的优点。
《数据结构》课后参考答案
单元练习1一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)数据的逻辑结构与数据元素本身的内容和形式无关。
(√)(2)一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。
(ㄨ)(3)数据元素是数据的最小单位。
(ㄨ)(4)数据的逻辑结构和数据的存储结构是相同的。
(ㄨ)(5)程序和算法原则上没有区别,所以在讨论数据结构时可以通用。
(√)(6)从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。
(√)(7)数据的存储结构是数据的逻辑结构的存储映像。
(√)(8)数据的物理结构是指数据在计算机内实际的存储形式。
(ㄨ)(9)数据的逻辑结构是依赖于计算机的。
(√)(10)算法是对解题方法和步骤的描述。
二.填空题(1)数据有逻辑结构和存储结构两种结构。
(2)数据逻辑结构除了集合以外,还包括:线性结构、树形结构和图形结构。
(3)数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。
(4)树形结构和图形结构合称为非线性结构。
(5)在树形结构中,除了树根结点以外,其余每个结点只有 1 个前趋结点。
(6)在图形结构中,每个结点的前趋结点数和后续结点数可以任意多个。
(7)数据的存储结构又叫物理结构。
(8)数据的存储结构形式包括:顺序存储、链式存储、索引存储和散列存储。
(9)线性结构中的元素之间存在一对一的关系。
(10)树形结构结构中的元素之间存在一对多的关系,(11)图形结构的元素之间存在多对多的关系。
(12)数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)三个方面的内容。
(13)数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系的有限集合。
(14)算法是一个有穷指令的集合。
(15)算法效率的度量可以分为事先估算法和事后统计法。
(16)一个算法的时间复杂性是算法输入规模的函数。
(17)算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n 的函数。
李云清揭安全数据结构答案
1数据结构(C 语言版)(第2 版)习题解析揭安全云清庆红师大学计算机信息工程学院联系方式:janquan163.(习题答案仅供参考)2第1 章绪论1.1 什么是数据结构?【答】:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合。
1.2 数据结构涉及哪几个方面?【答】:数据结构涉及三个方面的容,即数据的逻辑结构、数据的存储结构和数据的运算集合。
1.3 两个数据结构的逻辑结构和存储结构都相同,但是它们的运算集合中有一个运算的定义不一样,它们是否可以认作是同一个数据结构?为什么?【答】:不能,运算集合是数据结构的重要组成部分,不同的运算集合所确定的数据结构是不一样的,例如,栈与队列它们的逻辑结构与存储结构可以相同,但由于它们的运算集合不一样,所以它们是两种不同的数据结构。
1.4 线性结构的特点是什么?非线性结构的特点是什么?【答】:线性结构元素之间的关系是一对一的,在线性结构中只有一个开始结点和一个终端结点,其他的每一个结点有且仅有一个前驱和一个后继结点。
而非线性结构则没有这个特点,元素之间的关系可以是一对多的或多对多的。
1.5 数据结构的存储方式有哪几种?【答】:数据结构的存储方式有顺序存储、链式存储、散列存储和索引存储等四种方式。
1.6 算法有哪些特点?它和程序的主要区别是什么?【答】:算法具有(1)有穷性(2)确定性(3)0 个或多个输入(4)1 个或多个输出(5)可行性等特征。
程序是算法的一种描述方式,通过程序可以在计算机上实现算法。
1.7 抽象数据类型的是什么?它有什么特点?【答】:抽象数据类型是数据类型的进一步抽象,是大家熟知的基本数据类型的延伸和发展。
抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。
对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。
数据结构与算法分析课后习题答案
数据结构与算法分析课后习题答案【篇一:《数据结构与算法》课后习题答案】>2.3.2 判断题2.顺序存储的线性表可以按序号随机存取。
(√)4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。
(√)6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
(√)8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。
(√)9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。
(√)2.3.3 算法设计题1.设线性表存放在向量a[arrsize]的前elenum个分量中,且递增有序。
试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。
【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。
int insert (datatype a[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/else {i=*elenum;while (i=0 a[i]x)/*边找位置边移动*/{a[i+1]=a[i];i--;}a[i+1]=x;/*找到的位置是插入位的下一位*/ (*elenum)++;return 1;/*插入成功*/}}时间复杂度为o(n)。
2.已知一顺序表a,其元素值非递减有序排列,编写一个算法删除顺序表中多余的值相同的元素。
《数据结构》填空作业题(答案)
《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3. 数据结构的形式定义为:数据结构是一个二元组:Data Structure =(D,S)。
4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7. 在树形结构中,数据元素之间存在一对多的关系。
8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9. 数据的逻辑结构包括线性结构、树形结构和图形结构3种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14. 数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16. 数据元素可由若干个数据项组成。
17. 算法分析的两个主要方面是时间复杂度和空间复杂度。
18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
数据结构 期末习题
第2章线性表习题一、单项选择题1、在有n 个结点顺序表中,等概率插入结点所需的结点移动平均次数为①,等概率删除结点所需的结点移动平均次数为②。
①A.n B.(n-1)/2 C.n/2 D.(n+1)/2A.nB.(n-1)/2C.n/2D.(n+1)/22、在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是。
A访问第i个结点. (1≤i≤n)B.在第i个结点之前插入一个新结点(1≤i≤n)C.删除第i个结点(1≤i≤n)D.将n个结点从大到小排序(1≤i≤n)3、顺序表中逻辑上相邻的结点的物理位置。
A.按照某种规律排序B.不必相邻C.一定相邻D.无要求4、相对于顺序存储而言,链式存储的优点是。
A.随机存取B.增、删操作方便C.节约空间D.结点间关系简单5、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s所指结点,则应执行的操作是。
A. q->next=s;s->ne xt=p;B. p->next=s->next;s->next=p;C. s->next=p->next;p->next=s;D. p->next=s;s->next=q;6、在一个单链表中,若p所指结点不是最后结点,删除p之后的结点,则执行。
A. p->next=p->next->next;B. p=p->next;C. p=p->next->next;D. p->next=p;7、在一个单链表中,若p所指结点不是最后结点,删除p的直接后继结点,则执行。
A. p->nex t=p->next->nex t;B. p=p->next;C. p=p->next->next;D. p->next=p;8、链表不具备的特点是。
A. 可以随机访问任一结点B. 插入操作不需要移动元素C. 不必事先估计存储空间D. 所需空间与其长度成正比9、不带头结点的单链表L为空的判定条件是。
数据结构复习题
2017 ~2018学年度第2学期《数据结构》复习提纲1.在数据结构中,从逻辑上可以把数据结构分为_________两类。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构2.链表不具有的特点是_________。
A.可随机访问任一元素B.插入、删除不需要移动的元素C.不必事先估计存储空间D.所需空间与线性表长度成正比3.若线性表最常用的运算是存取第i个元素及其前驱元素,则采用_________存储方式节省时间。
A.单链表B.双链表C.循环单链表D.顺序表4.算法分析的目的是_________。
A.找出数据结构的合理性B.研究算法中的输入和输出关系C.分析算法的效率以求改进D.分析算法的易读性和文档性5.若一个栈用数组data[1..n]存储,初始栈顶指针top为0,则以下元素x进栈的操作正确的是_________。
A.top++; data[top]=x;B.data[top]=x; top++;C.top--; data[top]=x;D.data[top]=x; top--;6.表达式a*(b+c)-d的后缀表达式是_________。
A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd7.递归函数f(1)=1,f(n)=f(n-1)+n(n>1)的递归出口是_________。
A.f(1)=1B.f(1)=0C.f(0)=0D.f(n)=n8.将递归算法转换成对应的非递归算法时,通常需要使用_________保存中间结果。
A.队列B.栈C.链表D.树9.对稀疏矩阵采用压缩存储,其缺点之一是_________。
A.无法判断矩阵有多少行、多少列B.无法根据行、列号查找某个矩阵元素C.无法根据行、列号直接计算矩阵元素的存储地址D.使矩阵元素之间的逻辑关系更加复杂10.一个n阶上三角矩阵a按行优先顺序压缩存放在一维数组b中,则b中的元素个数是_________。
数据结构选择填空题库
习题2 线性表、栈、队列一、单项选择题1. 线性表是___A_____。
A.一个有限序列,可以为空B.一个有限序列,不可以为空C.一个无限序列,可以为空D.一个无限序列,不可以为空2. 在一个长度为n的顺序表中删除第i个元素(1<=i<=n)时,需向前移动B 个元素。
A.n-iB.n-i+lC.n-i-1D.i3. 线性表采用链式存储时,其地址____D____。
A.必须是连续的B.一定是不连续的C.部分地址必须是连续的D.连续与否均可以4. 从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较_____C___个元素结点。
A.n/2B.nC.(n+1)/2D.(n-1)/25. 在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是__D__。
A.p->next=s; s->prior=p;p->next->prior=s; s->next=p->next;B.s->prior=p; s->next=p->next;p->next=s; p->next->prior=s;C.p->next=s; p->next->prior=s;s->prior=p; s->next=p->next;D.s->prior=p; s->next=p->next;p->next->prior=s; p->next=s;6. 设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为___A_____。
6.A.p->next=p->next->next;B.p=p->next;C.p=p->next->next;D.p->next=p;7. 在一个长度为n的顺序表中向第i个元素(0<i<n+l )之前插入一个新元素时,需向后移动___B___个元素。
数据结构课程课后习题集答案解析
《数据结构简明教程》练习题及参考答案练习题11. 单项选择题(1)线性结构中数据元素之间是()关系。
A.一对多B.多对多C.多对一D.一对一答:D(2)数据结构中与所使用的计算机无关的是数据的()结构。
A.存储B.物理C.逻辑D.物理和存储答:C(3)算法分析的目的是()。
A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性答:C(4)算法分析的两个主要方面是()。
A.空间复杂性和时间复杂性B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性答:A(5)计算机算法指的是()。
A.计算方法B. 排序方法C.求解问题的有限运算序列D.调度方法答:C(6)计算机算法必须具备输入、输出和()等5个特性。
A.可行性、可移植性和可扩充性B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性答:B2. 填空题(1)数据结构包括数据的①、数据的②和数据的③这三个方面的内容。
答:①逻辑结构②存储结构③运算(2)数据结构按逻辑结构可分为两大类,它们分别是①和②。
答:①线性结构②非线性结构(3)数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。
答:①数据元素②关系数据结构简明教程(4)在线性结构中,第一个结点 ① 前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点 ② 后继结点,其余每个结点有且只有1个后继结点。
答:①没有 ②没有 (5)在树形结构中,树根结点没有 ① 结点,其余每个结点有且只有 ② 个前驱结点;叶子结点没有 ③ 结点,其余每个结点的后继结点数可以是 ④ 。
答:①前驱 ②1 ③后继 ④任意多个(6)在图形结构中,每个结点的前驱结点数和后继结点数可以是( )。
答:任意多个(7)数据的存储结构主要有四种,它们分别是 ① 、 ② 、 ③ 和 ④ 存储结构。
答:①顺序 ②链式 ③索引 ④哈希(8)一个算法的效率可分为 ① 效率和 ② 效率。
数据结构试题汇编带答案
《数据结构》习题汇编一、单项选择题1. 在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构2. 数据结构在计算机内存中的表示是指()。
A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系3. 在数据结构中,与所使用的计算机无关的是数据的()结构。
A.逻辑B.存储C.逻辑和存储D.物理4.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。
①A.计算方法 B.排序方法C.解决问题的有限运算序列D.调度方法②A.可行性、可移植性和可扩充性 B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性5.在一个长度为n的顺序表中向第i个元素(l W i W n+1)位置插入一个新元素时,需要从后向前依次后移()个元素。
A. n-iB. n-i+1C. n-i-1D. i6.在一个长度为n的顺序表中删除第i个元素(i W i W n)时,需要从前向后依次前移()个元素。
A. n-iB. n-i+1C. n-i-1D. i7.在一个长度为n的顺序表的表尾插入一个新元素的渐进时间复杂度为()。
A. O(n)B. O(1)C. O(n2)D. O(log2n)8.在一个长度为n的顺序表的任一位置插入一个新元素的渐进时间复杂度为()。
A. O(n)B. O(n/2)C. 0(1)D. O(n2)9.不带头结点的单链表first为空的判定条件是:()A. first == NULL;B. first->next == NULL;C. first->next == first;D. first != NULL;10.带头结点的单链表first为空的判定条件是:()A. first == NULL;B. first->next == NULL;C. first->next == first;D. first != NULL;11.设单链表中结点的结构为(data, next)。
数据结构第二章试题
第2章线性表一、选择题1.链表不具备的特点是()。
A.可随机访问任意结点B.插入删除不需要移动元素C.不必事先估计存储空间D.所需空间与其长度成正比2.不带头结点的单链表head为空的判定条件是()。
==NULLB. head->next==NULL >next==head!=NULL3.带头结点的单链表head为空的判定条件是()。
==NULLB. head->next==NULL >next==head!=NULL4.带头结点的双循环链表L为空表的条件是()。
A.L==NULL B.L->next->==NULL C.L->prior==NULL >next==L5.非空的循环链表head的尾结点(由P所指向)满足()。
A.p->next==NULL B.p==NULL C.p->next==head ==head6.在循环双链表的p所指结点之前插入s所指结点的操作是()。
A.p->prior=s;s->next=p;p->prior->next=s;s->prior=p->prior;B.p->prior=s;p->prior->next=s;s->next=p;s->prior=p->prior;C.s->next=p;s->prior=p->prior;p->prior=s;p->right->next=s;D. s->next=p;s->prior=p->prior;p->prior->next=s;p->prior=s;7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用()存储方式最节省运算时间。
A.单链表B.给出表头指针的单循环链表C.双链表D.带头结点的双循环链表8.某线性表最常用的操作是在最后一个结点之后插入一个节点或删除第一个结点,故采用()存储方式最节省运算时间。
数据结构课程设计分类题目
线性表顺序表:1、设有一元素为整数的线性表L=(a1,a2,a3,…,a n),存放在一维数组A[N]中,设计一个算法,以表中a n作为参考元素,将该表分为左、右两部分,其中左半部分每个元素小于等于a n,右半部分每个元素都大于a n, a n位于分界位置上(要求结果仍存放在A[N]中)。
2、设线性表存于A[1..size]的前num各分量中,且递增有序。
请设计一个算法,将x插入到线性表的适当位置上,以保持线性表的有序性。
3、线性表(a1,a2,a3,…,a n)中元素递增有序且按顺序存储于计算机内。
要求设计一算法完成:(1)用最少时间在表中查找数值为x的元素。
(2)若找到将其与后继元素位置相交换。
(3)若找不到将其插入表中并使表中元素仍递增有序。
4、已知数组A[0:n-1]的元素类型为int,试设计算法将其调整为左右两个部分,左边所有元素为奇数,右边所有元素为偶数。
5、设计一个算法从顺序表L中删除所有值为x的元素6、设计一个算法从顺序表L中删除所有值为x到y之间(x<=y)的元素链表:1、假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。
请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
2、已知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。
要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。
3、设L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,设计一个将该链表整理成数据递增的有序单链表的算法。
5、设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A的元素类型为整型,要求B、C表利用A表的结点)。
6、试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。
数据结构第二章习题
数据结构第二章习题第2章线性表一、单选题1.线性表是具有n个_________的有限序列。
a、表元素B.字符C.数据元素D.数据项2。
线性表格是。
a.一个有限序列,可以为空b.一个有限序列,不可以为空c.一个无限序列,可以为空d.一个无限序列,不可以为空3.线性表采用链表存储时,其地址_________。
a、 U4。
列表中不连续的部分必须是U4。
a.可随机访问任一结点b.插入删除不需要移动元素c.不必事先估计存储空间d.所需空间与其长度成正比5.设线性表有n个元素,以下操作中,_________在顺序表上实现比在链表上实现效率更高。
a、输出I(1≤ 我≤ n) th元素值b.交换第1个元素与第2个元素的值c.顺序输出这n个元素的值d、输出与线性表中给定值x相等的元素序列号6.设线性表中有2n个元素,以下操作中,_________在单链表上实现要比在顺序表上实现效率更高。
a.删除指定的元素b、在最后一个元素后插入新元素。
C.按顺序输出前k个元素d.交换第i个元素和第2n-i-1个元素的值(i=0,1…,n-1)7.如果最常见的操作是获取第i个节点及其前体,请使用___________________。
a.单链表b.双链表c、与单链表相比,双链表的优点之一是。
a.插入和删除操作更简单b.可以进行随机访问c.可以省略表头指针或表尾指针d.访问前后相邻结点更灵活9.带头结点的单链表l为空的判定条件是_________。
a、 l==nullb.l->next==nullc.l->next==ld.l!=无效的10.在一个具有n个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是_________。
a、 o(1)b.o(n)c.o(n2)d.o(nlog2n)11.在一个长度为n(n>1)的带头结点的单链表h上,另设有尾指针r(指向尾结点),执行_________操作与链表的长度有关。
数据结构课程 课后习题答案
《数据结构简明教程》练习题及参考答案练习题11. 单项选择题(1)线性结构中数据元素之间是()关系。
A.一对多B.多对多C.多对一D.一对一答:D(2)数据结构中与所使用的计算机无关的是数据的()结构。
A.存储B.物理C.逻辑D.物理和存储答:C(3)算法分析的目的是()。
A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性答:C(4)算法分析的两个主要方面是()。
A.空间复杂性和时间复杂性B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性答:A(5)计算机算法指的是()。
A.计算方法B. 排序方法C.求解问题的有限运算序列D.调度方法答:C(6)计算机算法必须具备输入、输出和()等5个特性。
A.可行性、可移植性和可扩充性B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性答:B2. 填空题(1)数据结构包括数据的①、数据的②和数据的③这三个方面的内容。
答:①逻辑结构②存储结构③运算(2)数据结构按逻辑结构可分为两大类,它们分别是①和②。
答:①线性结构②非线性结构(3)数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。
数据结构简明教程答:①数据元素 ②关系 (4)在线性结构中,第一个结点 ① 前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点 ② 后继结点,其余每个结点有且只有1个后继结点。
答:①没有 ②没有 (5)在树形结构中,树根结点没有 ① 结点,其余每个结点有且只有 ② 个前驱结点;叶子结点没有 ③ 结点,其余每个结点的后继结点数可以是 ④ 。
答:①前驱 ②1 ③后继 ④任意多个(6)在图形结构中,每个结点的前驱结点数和后继结点数可以是( )。
答:任意多个(7)数据的存储结构主要有四种,它们分别是 ① 、 ② 、 ③ 和 ④ 存储结构。
答:①顺序 ②链式 ③索引 ④哈希(8)一个算法的效率可分为 ① 效率和 ② 效率。
顺序表删除值为x的元素
顺序表删除值为x的元素思路: 不要去考虑删除的字眼,要考虑如何进⾏保存⾮ x 的值这⾥提供两种解法,殊途同归: 1.将其中⾮ x 的元素统计并保存 2.统计为 x 的元素个数,并将⾮ x 的元素保存注意事项:注意这⾥代码由于使⽤了引⽤(&),只能在 C++ 中编译通过使⽤指针的时候⼀定要注意开辟空间,否则之后可能发现⽆法预知的错误代码如下:1 #include <stdio.h>2 #include <stdlib.h>3#define MaxSize 504 typedef int ElemType;56 typedef struct {7 ElemType data[MaxSize];8int length;9 } Sqlist;1011//将其中⾮ x 的元素统计并保存12void delnode1(Sqlist* &L, ElemType x) {13int k = 0, i;14for(i = 0; i < L -> length; i++) {15if(L -> data[i] != x) {16 L -> data[k] = L -> data[i];17 k++;18 }19 }20 L -> length = k;21 }2223//统计为 x 的元素个数,并将⾮ x 的元素保存24void delnode2(Sqlist* &L, ElemType x) {25int k = 0, i;26for (i = 0; i < L -> length; i++) {27if (L -> data[i] == x) {28 k++;29 } else {30 L -> data[i - k] = L -> data[i];31 }32 }33 L -> length -= k;34 }3536void createList(Sqlist* &L, ElemType a[], int n) {37int i;38 L = (Sqlist *)malloc(sizeof(Sqlist));39for (i = 0; i < n; i++) {40 L -> data[i] = a[i];41 }42 L -> length = n;43 }4445void dispList(Sqlist *L) {46int i;47for (i = 0; i < L -> length; i++) {48 printf("%d ", L -> data[i]);49 }50 printf("\n");51 }5253int main(int argc, char const *argv[]) {54 Sqlist *L;55 ElemType a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};56 createList(L, a, 10);57 printf("原始线性表:\n");58 dispList(L);59 delnode1(L, 3);60 printf("删除 3 后:\n");61 dispList(L);62 delnode2(L, 4);63 printf("删除 4 后:\n");64 dispList(L);65return0;66 }轻点加号,代码即现运⾏结果在这⼉*^_^*原始线性表:0123456789删除3后:012456789删除4后:01256789。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return OK;
}
int ListDelete(SqList *L,int i,ElemType *e)
// 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) 。操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1
{
{
newbase=(ElemType *)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) // 存储分配失败
{
ElemType *p,*q;
if(i<1||i>(*L).length) // i值不合法
return ERROR;
if((*L).length==0) // i值不合法
(*L).listsize=LIST_INIT_SIZE; // 初始存储容量
return OK;
}
int DestroyList(SqList *L)
// 初始条件:顺序线性表L已存在。操作结果:销毁顺序线性表L
{
free((*L).elem);
if(!(*L).elem) // 存储分配失败
exit(OVERFLOW);
(*L).length=0; // 空表长度为0
InitList(&L); // 创建空表L成功
printf("請輸入順序表中的元素個數n的值:");
scanf("%d",&n);
printf("请输入L的%d个数据元素:",n);
for(j=1;j<=n;j++) // 在表L中插入元素
//編寫算法,將順序表中刪除值為X的結點
#include<stdio.h>
#include<malloc.h>
#define LIST_INIT_SIZE 100 // 初始化大小
#define LISTINCREMENT 15
{
ElemType *newbase,*q,*p;
if(i<1||i>(*L).length+1) // i值不合法
return ERROR;
if((*L).length>=(*L).listsize) // 当前存储空间已满,增加分配
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
int InitList(SqList *L)
// 操作结果:构造一个空的顺序线性表
{
(*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
return OK;
}
int ListEmpty(SqList L)
// 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE
{
if(L.length==0)
return TRUE;
else
ElemType *p=L.elem;
while(i<L.length&&*p!=cur_e)
{
i++;
p++;
}
if(i==L.length)
return INFEASIBLE;
else
// 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) 。操作结果:用e返回L中第i个数据元素的值
{
if(i<1||i>L.length)
exit(ERROR);
*e=*(L.elem+i-1);
return OK;
}
int LocateElem(SqList L,ElemType e)
exit(OVERFLOW);
(*L).elem=newbase; // 新基址
(*L).listsize+=LISTINCREMENT; // 增加存储容量
}
q=L.elem+L.length-1; // 表尾元素的位置
for(p;p<=q;++p) // 被删除元素之后的元素左移
*p=*(p+1);
return FALSE;
}
int ListLength(SqList L)
// 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数
{
return L.length;
}
int GetElem(SqList L,int i,ElemType *e)
// 初始条件:顺序线性表L已存在。操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义。
{
int i=2;
ElemType *p=L.elem+1;
while(i<=L.length&&*p!=cur_e)
while(i<=L.length&&(*p++!=e))
++i;
if(i<=L.length)
return i;
else
return 0;
}
int PriorElem(SqList L,ElemType cur_e,ElemType *pre_e)
// 初始条件:顺序线性表L已存在。操作结果:返回L中第1个与e相等的数据元素的位序。若这样的数据元素不存在,则返回值为0。
{
ElemType *p;
int i=1; // i的初值为第1个元素的位序
p=L.elem; // p的初值为第1个元素的存储位置
return ERROR;
p=(*L).elem+i-1; // p为被删除元素的位置
*e=*p; // 被删除元素的值赋给e
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1 // 不可实行的
#define OVERFLOW -2 // 溢出
#include<process.h> // exit()
typedef int ElemType; // 基本(元素)类型
q=(*L).elem+(*L).length-1; // 表尾元素的位置
for(++p;p<=q;++p) // 被删除元素之后的元素左移
*(p-1)=*p;
(*L).length--; // 表长减1
L.length--;
i--;
}
return OK;
}
void print(ElemType *c)
{
printf("%d ",*c);
}
void main()
{
SqList L;
int i,j,k,n,x;
{
p++;
i++பைடு நூலகம்
}
if(i>L.length)
return INFEASIBLE;
else
{
*pre_e=*--p;
return OK;
}
}
return OK;
}
int Delete_Prior(SqList &L,int x)
{
int i;
ElemType *p,*q;
for(i=0;i<L.length;i++)
if(L.elem[i]==x)
{
p=&L.elem[i];
{
*next_e=*++p;
return OK;
}
}
int ListInsert(SqList *L,int i,ElemType e)
// 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 。操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1
q=(*L).elem+i-1; // q为插入位置
for(p=(*L).elem+(*L).length-1;p>=q;--p) // 插入位置及之后的元素右移
*(p+1)=*p;
*q=e; // 插入e
int NextElem(SqList L,ElemType cur_e,ElemType *next_e)
// 初始条件:顺序线性表L已存在。操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义
{
int i=1;
(*L).elem=NULL;
(*L).length=0;
(*L).listsize=0;
return OK;
}
int ClearList(SqList *L)
// 初始条件:顺序线性表L已存在。操作结果:将L重置为空表