数据结构与算法分析习题与参考答案
数据结构与算法分析考试试题
数据结构与算法分析考试试题一、选择题(共 20 小题,每小题 3 分,共 60 分)1、在一个具有 n 个元素的顺序表中,查找一个元素的平均时间复杂度为()A O(n)B O(logn)C O(nlogn)D O(n²)2、以下数据结构中,哪一个不是线性结构()A 栈B 队列C 二叉树D 线性表3、一个栈的入栈序列是 1,2,3,4,5,则栈的不可能的出栈序列是()A 5,4,3,2,1B 4,5,3,2,1C 4,3,5,1,2D 1,2,3,4,54、若一棵二叉树的先序遍历序列为 ABCDEFG,中序遍历序列为CBDAEGF,则其后序遍历序列为()A CDBGFEAB CDBFGEAC CDBAGFED BCDAGFE5、具有 n 个顶点的无向完全图的边数为()A n(n 1)B n(n 1) / 2C n(n + 1) / 2D n²6、以下排序算法中,在最坏情况下时间复杂度不是O(n²)的是()A 冒泡排序B 选择排序C 插入排序D 快速排序7、在一个长度为 n 的顺序表中,删除第 i 个元素(1≤i≤n)时,需要向前移动()个元素。
A n iB iC n i + 1D n i 18、对于一个具有 n 个顶点和 e 条边的有向图,其邻接表表示中,所有顶点的边表中边的总数为()A eB 2eC e/2D n(e 1)9、以下关于哈夫曼树的描述,错误的是()A 哈夫曼树是带权路径长度最短的二叉树B 哈夫曼树中没有度为 1 的节点C 哈夫曼树中两个权值最小的节点一定是兄弟节点D 哈夫曼树中每个节点的权值等于其左右子树权值之和10、用邻接矩阵存储一个具有 n 个顶点的无向图时,矩阵的大小为()A nB n²C (n 1)²D (n + 1)²11、下列关于堆的描述,正确的是()A 大根堆中,每个节点的值都大于其左右子节点的值B 小根堆中,每个节点的值都小于其左右子节点的值C 堆一定是完全二叉树D 以上都对12、在一个具有 n 个单元的顺序存储的循环队列中,假定 front 和rear 分别为队头指针和队尾指针,则判断队满的条件是()A (rear + 1) % n == frontB (front + 1) % n == rearC rear == frontD rear == 013、已知一个图的邻接表如下所示,从顶点 1 出发,按深度优先搜索法进行遍历,则得到的一种可能的顶点序列为()|顶点|邻接顶点|||||1|2, 3||2|4, 5||3|5||4|6||5|6||6| |A 1, 2, 4, 6, 5, 3B 1, 2, 5, 3, 4, 6C 1, 2, 3, 5, 4, 6D 1, 3, 2, 4, 5, 614、对线性表进行二分查找时,要求线性表必须()A 以顺序方式存储,且元素按值有序排列B 以顺序方式存储,且元素按值无序排列C 以链式方式存储,且元素按值有序排列D 以链式方式存储,且元素按值无序排列15、以下算法的时间复杂度为 O(nlogn)的是()A 顺序查找B 折半查找C 冒泡排序D 归并排序16、若某链表最常用的操作是在最后一个节点之后插入一个节点和删除最后一个节点,则采用()存储方式最节省时间。
数据结构与算法复习题及参考答案剖析
复习题集─参考答案一判断题(√)1. 在决定选取何种存储结构时,一般不考虑各结点的值如何。
(√)2. 抽象数据类型与计算机内部表示和实现无关。
(×)3. 线性表采用链式存储结构时,结点和结点内部的存储空间可以是不连续的。
(×)4. 链表的每个结点中都恰好包含一个指针。
(×)5.链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
(×)6. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
(×)7. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
(×)8. 线性表在物理存储空间中也一定是连续的。
(×)9. 顺序存储方式只能用于存储线性结构。
(√)10.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
(√)11.对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
(√)12.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
(√)13.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
(×)14.二叉树的度为2。
(√)15.若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。
(×)16.二叉树中每个结点的两棵子树的高度差等于1。
(√)17.用二叉链表法存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。
(√)18.具有12个结点的完全二叉树有5个度为2的结点。
(√)19.二叉树的前序遍历序列中,任意一个结点均处在其孩子结点的前面。
(×)20.在冒泡法排序中,关键值较小的元素总是向前移动,关键值较大的元素总是向后移动。
(×)21.计算机处理的对象可以分为数据和非数据两大类。
数据结构与算法分析习题与参考答案
大学《数据结构与算法分析》课程习题及参考答案模拟试卷一一、单选题(每题2分,共20分)1. 以下数据结构中哪一个是线性结构?()A. 有向图B.队列C. 线索二叉树D. B树2. 在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下()语句序列。
A. p=q; p_>n ext=q;B. p_>n ext=q; q_>n ext=p;C. p_>n ext=q _>n ext; p=q;D. q_>n ext=p->n ext; p_>n ext=q;3. 以下哪一个不是队列的基本运算?()A. 在队列第i个元素之后插入一个元素B. 从队头删除一个元素C.判断一个队列是否为空D. 读取队头元素的值4. 字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成()个不同的字符串?A. 14B.5C.6D.8由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为()5.A. 11B.35C. 19D. 536.A. E、G F、 A C D BB. E、A、G C F、B、DC. E、A、C、B D G FD. E、G A、C D F、B7.A. A 、B、 C D E、G FB. E 、A、G C F、B、DC. E 、A、C B、D G FE. B D C '、AF、G E以下6-8题基于图1。
该二叉树结点的前序遍历的序列为该二叉树结点的中序遍历的序列为(8.该二叉树的按层遍历的序列为()9.下面关于图的存储的叙述中正确的是 ()。
A .用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关B .用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关 C. 用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关 D .用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关10. 设有关键码序列(q , g , m z , a , n , p , x , h),下面哪一个序列是从上述序列出发建 堆的结果?()A. a , g , h , m n , p , q , x , zB. a ,g , m h , q , n , p , x , zC. g, m, q , a , n , p , x , h , z D. h,g , m p , a , n , q , x , z二、填空题(每空1分,共26分)1.数据的物理结构被分为 、、 和四种。
数据结构与算法设计课后习题及答案详解
第一章1.数据结构研究的主要内容包括逻辑结构、存储结构和算法。
2.数据元素是数据的基本单位,数据项是数据的最小标示单位。
3.根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、树形、线性、图状。
4.常见的数据存储结构有四种类型:顺序、链式、索引、散列。
5.可以从正确性、可读性、健壮性、高效性四方面评价算法的质量。
6.在一般情况下,一个算法的时间复杂度是问题规模的函数。
7.常见时间复杂度有:常数阶O(1)、线性阶O(n)、对数阶O(log2 n)、平方阶O(n²)和指数阶O(2ⁿ)。
通常认为,具有常数阶量级的算法是好算法,而具有指数阶量级的算法是差算法。
8.时间复杂度排序由大到小(n+2)!>2ⁿ+²>(n+2)4次方>nlog2 n>100000.问答题:1.什么叫数据元素?数据元素是数据的基本单位,是数据这个集合的个体,也称为元素、结点、顶点、记录。
2.什么叫数据逻辑结构?什么叫数据存储结构?数据逻辑结构:指数据元素之间存在的固有的逻辑结构。
数据存储结构:数据元素及其关系在计算机内的表示。
3.什么叫抽象数据类型?抽象数据类型是指数据元素集合以及定义在该集合上的一组操作。
4.数据元素之间的关系在计算机中有几种表示方法?顺序、链式、索引、散列。
5.数据的逻辑结构与数据的存储结构之间存在着怎样的关系?相辅相成,不可分割。
6.什么叫算法?算法的性质有哪些?算法:求解问题的一系列步骤的集合。
可行性、有容性、确定性、有输入、有输出。
7.评价一个算法的好坏应该从哪几方面入手?正确性、可读性、健壮性、高效性。
第二章1.线性表中,第一个元素没有直接前驱,最后一个元素没有直接后继。
2.线性表常用的两种存储结构分别是顺序存储结构和链式存储结构。
3.在长度为n的顺序表中,插入一个新元素平均需要移动表中的n/2个元素,删除一个元素平均需要移动(n-1)/2个元素。
4.在长度为n的顺序表的表头插入一个新元素的时间复杂度为O(n),在表尾插入一个新元素的时间复杂度为O(1)。
《数据结构与算法》习题与答案
《数据结构与算法》习题与答案(解答仅供参考)一、名词解释:1. 数据结构:数据结构是计算机存储、组织数据的方式,它不仅包括数据的逻辑结构(如线性结构、树形结构、图状结构等),还包括物理结构(如顺序存储、链式存储等)。
它是算法设计与分析的基础,对程序的效率和功能实现有直接影响。
2. 栈:栈是一种特殊的线性表,其操作遵循“后进先出”(Last In First Out, LIFO)原则。
在栈中,允许进行的操作主要有两种:压栈(Push),将元素添加到栈顶;弹栈(Pop),将栈顶元素移除。
3. 队列:队列是一种先进先出(First In First Out, FIFO)的数据结构,允许在其一端插入元素(称为入队),而在另一端删除元素(称为出队)。
常见的实现方式有顺序队列和循环队列。
4. 二叉排序树(又称二叉查找树):二叉排序树是一种二叉树,其每个节点的左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。
这种特性使得能在O(log n)的时间复杂度内完成搜索、插入和删除操作。
5. 图:图是一种非线性数据结构,由顶点(Vertex)和边(Edge)组成,用于表示对象之间的多种关系。
根据边是否有方向,可分为有向图和无向图;根据是否存在环路,又可分为有环图和无环图。
二、填空题:1. 在一个长度为n的顺序表中,插入一个新元素平均需要移动______个元素。
答案:(n/2)2. 哈希表利用______函数来确定元素的存储位置,通过解决哈希冲突以达到快速查找的目的。
答案:哈希(Hash)3. ______是最小生成树的一种算法,采用贪心策略,每次都选择当前未加入生成树且连接两个未连通集合的最小权重边。
答案:Prim算法4. 在深度优先搜索(DFS)过程中,使用______数据结构来记录已经被访问过的顶点,防止重复访问。
答案:栈或标记数组5. 快速排序算法在最坏情况下的时间复杂度为______。
数据结构与算法分析课后习题答案
数据结构与算法分析课后习题答案[篇一:《数据结构与算法》课后习题答案]>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,其元素值非递减有序排列,编写一个算法删除顺序表中多余的值相同的元素.[提示]对顺序表a,从第一个元素开始,查找其后与之值相同的所有元素,将它们删除;再对第二个元素做同样处理,依此类推.void delete<seqlist *a>{i=0;while<ia-last>/*将第i个元素以后与其值相同的元素删除*/{k=i+1;while<k=a-lasta-data[i]==a-data[k]>k++;/*使k指向第一个与a[i]不同的元素*/ n=k-i-1;/*n表示要删除元素的个数*/for<j=k;j=a-last;j++>a-data[j-n]=a-data[j]; /*删除多余元素*/a-last= a-last -n;i++;}}3.写一个算法,从一个给定的顺序表a中删除值在x~y<x=y>之间的所有元素,要求以较高的效率来实现.[提示]对顺序表a,从前向后依次判断当前元素a-data[i]是否介于x 和y之间,若是,并不立即删除,而是用n记录删除时应前移元素的位移量;若不是,则将a-data[i]向前移动n位.n用来记录当前已删除元素的个数.void delete<seqlist *a,int x,int y>{i=0;n=0;while <ia-last>{if <a-data[i]=x a-data[i]=y>n++; /*若a-data[i] 介于x和y之间,n 自增*/ else a-data[i-n]=a-data[i];/*否则向前移动a-data[i]*/i++;}a-last-=n;}4.线性表中有n个元素,每个元素是一个字符,现存于向量r[n]中,试写一算法,使r中的字符按字母字符、数字字符和其它字符的顺序排列.要求利用原来的存储空间,元素移动次数最小.[提示]对线性表进行两次扫描,第一次将所有的字母放在前面,第二次将所有的数字放在字母之后,其它字符之前.int fch<char c> /*判断c是否字母*/{if<c=ac=z||c=ac=z> return <1>;elsereturn <0>;}int fnum<char c> /*判断c是否数字*/{if<c=0c=9>return <1>;elsereturn <0>;}void process<char r[n]>{low=0;high=n-1;while<lowhigh> /*将字母放在前面*/{while<lowhighfch<r[low]>> low++;while<lowhigh!fch<r[high]>> high--;if<lowhigh>{k=r[low];r[low]=r[high];r[high]=k;}}low=low+1;high=n-1;while<lowhigh> /*将数字放在字母后面,其它字符前面*/{while<lowhighfnum<r[low]>> low++;while<lowhigh!fnum<r[high]>> high--;if<lowhigh>{k=r[low];r[low]=r[high];r[high]=k;}}}5.线性表用顺序存储,设计一个算法,用尽可能少的辅助存储空间将顺序表中前m个元素和后n个元素进行整体互换.即将线性表:〔a1, a2, … , am, b1, b2, … , bn〕改变为:〔b1, b2, … , bn , a1, a2, … , am〕.[提示]比较m和n的大小,若mn,则将表中元素依次前移m次;否则,将表中元素依次后移n次.void process<seqlist *l,int m,int n>{if<m=n>for<i=1;i=m;i++>{x=l-data[0];for<k=1;k=l-last;k++>l-data[k-1]=l-data[k];l-data[l-last]=x;}else for<i=1;i=n;i++>{x=l-data[l-last];for<k=l-last-1;k=0;k- ->l-data[k+1]=l-data[k];l-data[0]=x; }}6.已知带头结点的单链表l中的结点是按整数值递增排列的,试写一算法,将值为x 的结点插入到表l中,使得l仍然递增有序,并且分析算法的时间复杂度.linklist insert<linklist l, int x>{p=l;while<p-next xp-next-data>p=p-next;/*寻找插入位置*/ s=<lnode *>malloc<sizeof<lnode>>; /*申请结点空间*/ s-data=x;/*填装结点*/s-next=p-next;p-next=s; /*将结点插入到链表中*/ return<l>;}7.假设有两个已排序〔递增〕的单链表a和b,编写算法将它们合并成一个链表c而不改变其排序性.linklist bine<linklist a, linklist b>{c=a;rc=c;pa=a-next; /*pa指向表a的第一个结点*/pb=b-next; /*pb指向表b的第一个结点*/free<b>; /*释放b的头结点*/while <pa pb> /*将pa、pb所指向结点中,值较小的一个插入到链表c的表尾*/if<pa-datapb-data>{rc-next=pa;rc=pa;pa=pa-next;}else{rc-next=pb;rc=pb;pb=pb-next;}if<pa> rc-next=pa;else rc-next=pb;/*将链表a或b中剩余的部分到链表c的表尾*/return<c>;}8.假设长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某一结点的指针,编写算法删除该结点的前驱结点.[提示]利用循环单链表的特点,通过s指针可循环找到其前驱结点p 与p的前驱结点q,然后可删除结点*p.viod delepre<lnode *s>{lnode *p, *q;p=s;while <p-next!=s>{q=p;p=p-next;}q-next=s;free<p>;}9.已知两个单链表a和b分别表示两个集合,其元素递增排列,编写算法求出a和b的交集c,要求c同样以元素递增的单链表形式存储.[提示]交集指的是两个单链表的元素值相同的结点的集合,为了操作方便,先让单链表c带有一个头结点,最后将其删除掉.算法中指针p 用来指向a中的当前结点,指针q用来指向b中的当前结点,将其值进行比较,两者相等时,属于交集中的一个元素,两者不等时,将其较小者跳过,继续后面的比较.linklist intersect<linklist a, linklist b>{lnode *q, *p, *r, *s;linklist c;c= <lnode *>malloc<sizeof<lnode>>;c-next=null;r=c;p=a;q=b;while <p q >if <p-dataq-data> p=p-next;else if <p-data==q-data>{s=<lnode *>malloc<sizeof<lnode>>;s-data=p-data;r-next=s;r=s;p=p-next;q=q-next;}else q=q-next;r-next=null;c=c-next;return c;}10.设有一个双向链表,每个结点中除有prior、data和next域外,还有一个访问频度freq域,在链表被起用之前,该域的值初始化为零.每当在链表进行一次locata<l,x>运算后,令值为x的结点中的freq 域增1,并调整表中结点的次序,使其按访问频度的非递增序列排列,以便使频繁访问的结点总是靠近表头.试写一个满足上述要求的locata<l,x>算法.[提示]在定位操作的同时,需要调整链表中结点的次序:每次进行定位操作后,要查看所查找结点的freq域,将其同前面结点的freq域进行比较,同时进行结点次序的调整. typedef struct dnode[篇二:数据结构课后习题答案]lass=txt>高等学校精品资源共享课程绪论第 1 章1.1 什么是数据结构?[答]:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合. 1.2 数据结构涉与哪几个方面?[答]:数据结构涉与三个方面的内容,即数据的逻辑结构、数据的存储结构和数据的运算集合.1.3 两个数据结构的逻辑结构和存储结构都相同,但是它们的运算集合中有一个运算的定义不一样,它们是否可以认作是同一个数据结构?为什么?[答]:不能,运算集合是数据结构的重要组成部分,不同的运算集合所确定的数据结构是不一样的,例如,栈与队列它们的逻辑结构与存储结构可以相同,但由于它们的运算集合不一样, 所以它们是两种不同的数据结构.1.4 线性结构的特点是什么?非线性结构的特点是什么?[答]:线性结构元素之间的关系是一对一的,在线性结构中只有一个开始结点和一个终端结点,其他的每一个结点有且仅有一个前驱和一个后继结点.而非线性结构则没有这个特点,元素之间的关系可以是一对多的或多对多的. 1.5 数据结构的存储方式有哪几种?[答]:数据结构的存储方式有顺序存储、链式存储、散列存储和索引存储等四种方式. 1.6 算法有哪些特点?它和程序的主要区别是什么?[答]:算法具有〔1〕有穷性〔2〕确定性〔3〕0 个或多个输入〔4〕1 个或多个输出〔5〕可行性等特征.程序是算法的一种描述方式,通过程序可以在计算机上实现算法. 1.7 抽象数据类型的是什么?它有什么特点?[答]:抽象数据类型是数据类型的进一步抽象,是大家熟知的基本数据类型的延伸和发展. 抽象数据类型是与表示无关的数据类型,是一个数据模型与定义在该模型上的一组运算.对一个抽象数据类型进行定义时,必须给出它的名字与各运算的运算符名,即函数名,并且规定这些函数的参数性质.一旦定义了一个抽象数据类型与具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型.抽象数据类型的设计者根据这些描述给出操作的具体实现,抽象数据类型的使用者依据这些描述使用抽象数据类型. 1.8 算法的时间复杂度指的是什么?如何表示?[答]:算法执行时间的度量不是采用算法执行的绝对时间来计算的,因为一个算法在不同的机器上执行所花的时间不一样,在不同时刻也会由于计算机资源占用情况的不同,使得算法在同一台计算机上执行的时间也不一样,另外,算法执行的时间还与输入数据的状态有关,所以对于算法的时间复杂性,采用算法执行过程中其基本操作的执行次数,称为计算量来度量.算法中基本操作的执行次数一般是与问题规模有关的,对于结点个数为 n 的数据处理问题,用 t<n>表示算法基本操作的执行次数.为了评价算法的执行效率,通常采用大写 o 符号表示算法的时间复杂度,大写 o 符号给出了函数 f 的一个上限.其它义如下:3十二五普通高等教育国家级本科规划教材高等学校精品资源共享课程定义:f <n>=o <g <n>> 当且仅当存在正的常数 c 和 n0,使得对于所有的n≥n0,有f <n> ≤c g<n>.上述定义表明,函数 f 顶多是函数 g 的 c 倍,除非 n 小于 n0.因此对于足够大的 n <如n≥n0>, g 是 f 的一个上限〔不考虑常数因子 c〕.在为函数 f 提供一个上限函数 g 时,通常使用比较简单的函数形式.比较典型的形式是含有 n 的单个项〔带一个常数系数〕.表 1-1 列出了一些常用的 g 函数与其名称.对于表1-1 中的对数函数 logn,没有给出对数基,原因是对于任何大于 1 的常数 a 和 b 都有 logan =logbn/logba,所以 logan 和 logbn 都有一个相对的乘法系数 1/logba, 其中 a 是一个常量.表 1-1 常用的渐进函数1.9 [答]:算法的空间复杂度是指算法在执行过程中占用的额外的辅助空间的个数.可以将它表示为问题规模的函数,并通过大写o符号表示空间复杂度.1.10 对于下面的程序段,分析带下划线的语句的执行次数,并给出它们的时间复杂度 t<n>.〔1〕 i++ ;〔2〕 for<i=0;in;i++>if <a[i]x> x=a[i];〔3〕for<i=0;in;i++>for<j=0;jn;j++>;〔4〕for <i=1;i=n-1;i++>{ k=i;for<j=i+1;j=n;j++>if<a[j]a[j+1]> k=j; t=a[k]; a[k]=a[i]; a[i]=t; }〔5〕for<i=0;in;i++>for<j=0;jn;j++>{++x;s=s+x;}[答]:〔1〕o〔1〕;〔2〕o〔n〕;〔3〕o〔n2〕;〔4〕o〔n2〕;〔5〕o〔n2〕4第 2 章线性表与其顺序存储2.1 选择题〔1〕表长为 n 的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时, 插入一个元素所需移动元素的平均个数为〔为〔 a 〕.a.〔n?1〕/2 e.n/2b.n f.<n+1>/2c.n+1d.n?1g.<n?2>/2〔2〕设栈 s 和队列 q 的初始状态为空,元素 e1、e2、e3、e4、e5 和 e6 依次通过栈 s, 一个元素出栈后即进入队列 q,若 6 个元素出队的序列为 e2、e4、e3、e6、e5 和 e1,则栈 s 的容量至少应该为〔 c 〕.a.6〔 b 〕.a.不确定b.n?i+1c.id.n?i〔4〕在一个长度为 n 的顺序表中删除第 i 个元素〔1=i=n〕时,需向前移动〔 a 〕个元素.a.n?i间复杂度为〔 a 〕.a.o<n>b.o<1>c.o<n2>〕.d.?+*abcd d.o<n3>〔6〕表达式 a*<b+c>?d 的后缀表达式是〔 bb.n?i+1c.n?i?1d.i〔5〕若长度为 n 的线性表采用顺序存储结构存储,在第 i 个位置上插入一个新元素的时b.4c.3d.2〔3〕设栈的输入序列为 1、2、3… n,若输出序列的第一个元素为 n,则第 i 个输出的元素为e 〕,删除一个元素所需移动元素的平均个数a.abcd*+? b.abc+*d? c.abc*+d? 〔7〕队列是一种特殊的线性表,其特殊性在于〔 c 〕.a.插入和删除在表的不同位置执行 b.插入和删除在表的两端位置执行 c.插入和删除分别在表的两端执行 d.插入和删除都在表的某一端执行〔8〕栈是一种特殊的线性表,具有〔 b 〕性质.a.先进先出b.先进后出c.后进后出d.顺序进出〔9〕顺序循环队列中〔数组的大小为 n〕,队头指示 front 指向队列的第 1 个元素,队尾指示 rear 指向队列最后元素的后 1 个位置,则循环队列中存放了 n??? 1 个元素,即循环队列满〕. 的条件为〔 ba.<rear+1>%n=front?1 c.<rear>%n=frontb.<rear+1>%n=front d.rear+1=front〔10〕顺序循环队列中〔数组的大小为 6〕,队头指示 front 和队尾指示 rear 的值分别为 3 和 0,当从队列中删除 1 个元素,再插入 2 个元素后,front 和 rear 的值分别为〔 d 〕.a.5 和 1b.2 和 4c.1 和 5d.4 和 22.2 什么是顺序表?什么是栈?什么是队列?5[答]:当线性表采用顺序存储结构时,即为顺序表.栈是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入与删除操作只能在这种线性表的同一端进行〔即栈顶〕, 因此,栈具有先进后出、后进先出的特点.队列也是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入在表的一端进行,数据的删除在表的另一端进行,因此队列具有先进先出,后进后出的特点.2.3 设计一个算法,求顺序表中值为 x 的结点的个数. [答]:顺序表的存储结构定义如下〔文件名 seqlist.h〕: #include stdio.h #define n 100 typedef int datatype; typedef struct {datatype data[n]; int length; } seqlist;/*预定义最大的数据域空间*/ /*假设数据类型为整型*//*此处假设数据元素只包含一个整型的关键字域*/ /*线性表长度*//*预定义的顺序表类型*/算法 countx〔l,x〕用于求顺序表 l 中值为 x 的结点的个数. int countx<seqlist *l,datatype x> {int c=0; int i;for <i=0;il-length;i++>if <l-data[i]==x> c++; return c; }2.4 设计一个算法,将一个顺序表倒置.即,如果顺序表各个结点值存储在一维数组 a 中,倒置的结果是使得数组 a 中的 a[0]等于原来的最后一个元素,a[1] 等于原来的倒数第 2 个元素,…,a 的最后一个元素等于原来的第一个元素.[答]:顺序表的存储结构定义同题 2.3,实现顺序表倒置的算法程序如下: void verge<seqlist *l> {int t,i,j; i=0;j=l-length-1; while <ij>{ t=l-data[i];l-data[i++]=l-data[j]; l-data[j--]=t; } }2.5 已知一个顺序表中的各结点值是从小到大有序的,设计一个算法,插入一个值为 x 的结点, 使顺序表中的结点仍然是从小到大有序.[答]:顺序表的定义同题 2.3,实现本题要求的算法程序如下:6void insertx<seqlist *l,datatype x> {int j;if <l-lengthn> { j=l-length-1;while <j=0 l-data[j]x>{ l-data[j+1]=l-data[j];j--; } l-data[j+1]=x; l-length++; } }2.6 将下列中缀表达式转换为等价的后缀表达式.<1> 5+6*7 <2> <5-6>/7 <3> 5-6*7*8 <4> 5*7-8 <5> 5*<7-6>+8/9 <6> 7*<5-6*8>-9 [答]:<7> 5+6*7 <8> <5-6>/7 <9> 5-6*7*8 <10>5*7-8 <11>5*<7-6>+8/9 <12>7*<5-6*8>-9后缀表达式:5 6 7*+ 后缀表达式:5 6-7/ 后缀表达式:5 6 7*8*- 后缀表达式:5 7* 8- 后缀表达式:5 7 6-*8 9/+ 后缀表达式:7 5 6 8*-*9-2.7 循环队列存储在一个数组中,数组大小为 n,队首指针和队尾指针分别为 front 和 rear,请写出求循环队列中当前结点个数的表达式.[答]:循环队列中当前结点个数的计算公式是:<n+rear-front>%n2.8 编号为 1,2,3,4 的四列火车通过一个栈式的列车调度站,可能得到的调度结果有哪些?如果有 n 列火车通过调度站,请设计一个算法,输出所有可能的调度结果. [答]:方法一:算法思想:逐次输出所有可能,用回溯法.即:总体:对原始序列中的每一个元素,总是先入栈,后出栈1.入栈后的操作:a.该元素出栈;b.下一个元素入栈;2.出栈后的操作:a.〔栈中其他元素〕继续出栈;b. 〔原始序列中〕下一个数入栈;注意:回溯法,关键在于回溯,即在某分支结点 x:处理 x 的一个子分支,再退回分支 x, 接着处理 x 的下一个子分支,若所有 x 的子分支处理完,再退回上一层分支节点.所谓"退回〞,7[篇三:数据结构课后习题答案]下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型.答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称.如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据.数据项:是组成数据元素的、有独立含义的、不可分割的最小单位.例如,学生基本信息表中的学号、##、性别等都是数据项.数据结构:是相互之间存在一种或多种特定关系的数据元素的集合.换句话说,数据结构是带"结构〞的数据元素的集合,"结构〞就是指数据元素之间存在的关系.逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的.因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型.存储结构:数据对象在计算机中的存储表示,也称为物理结构.抽象数据类型:由用户定义的,表示应用问题的数学模型,以与定义在这个模型上的一组操作的总称.具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合.2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系. 答案:例如有一张学生基本信息表,包括学生的学号、##、性别、籍贯、专业等.每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列.对于整个表来说,只有一个开始结点<它的前面无记录>和一个终端结点<它的后面无记录>,其他的结点则各有一个也只有一个直接前趋和直接后继.学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构.这些学生记录在计算机中的存储表示就是存储结构.如果用连续的存储单元<如用数组表示>来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行,则称为链式存储结构.即相同的逻辑结构,可以对应不同的存储结构.3.简述逻辑结构的四种基本关系并画出它们的关系图.答案:〔1〕集合结构数据元素之间除了"属于同一集合〞的关系外,别无其他关系.例如,确定一名学生是否为班级成员,只需将班级看做一个集合结构.〔2〕线性结构数据元素之间存在一对一的关系.例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构.〔3〕树结构数据元素之间存在一对多的关系.例如,在班级的管理体系中,班长管理多个组长,每位组长管理多名组员,从而构成树形结构.〔4〕图结构或网状结构数据元素之间存在多对多的关系.例如,多位同学之间的朋友关系,任何两位同学都可以是朋友,从而构成图形结构或网状结构.其中树结构和图结构都属于非线性结构.四类基本逻辑结构关系图4.存储结构由哪两种基本的存储方法实现?答案:〔1〕顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述.〔2〕链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间.但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址.所以链式存储结构通常借助于程序设计语言的指针类型来描述.5.选择题〔1〕在数据结构中,从逻辑上可以把数据结构分成〔〕.a.动态结构和静态结构 b.紧凑结构和非紧凑结构c.线性结构和非线性结构d.内部结构和外部结构答案:c〔2〕与数据元素本身的形式、内容、相对位置、个数无关的是数据的〔〕.a.存储结构b.存储实现c.逻辑结构d.运算实现答案:c〔3〕通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着〔〕.a.数据具有同一特点b.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致c.每个数据元素都一样d.数据元素所包含的数据项的个数要相等答案:b〔4〕以下说法正确的是〔〕.a.数据元素是数据的最小单位b.数据项是数据的基本单位c.数据结构是带有结构的各数据项的集合d.一些表面上很不相同的数据可以有相同的逻辑结构答案:d解释:数据元素是数据的基本单位,数据项是数据的最小单位,数据结构是带有结构的各数据元素的集合.〔5〕算法的时间复杂度取决于〔〕.a.问题的规模答案:d解释:算法的时间复杂度不仅与问题的规模有关,还与问题的其他因素有关.如某些排序的算法,其执行时间与待排序记录的初始状态有关.为此,有时会对算法有最好、最坏以与平均时间复杂度的评价.〔6〕以下数据结构中,〔〕是非线性数据结构a.树 b.字符串 c.队列 d.栈答案:a6.试分析下面各程序段的时间复杂度.〔1〕x=90; y=100;while<y0>if<x100>{x=x-10;y--;}else x++;答案:o<1>解释:程序的执行次数为常数阶.b.待处理数据的初态 d.a和b c.计算机的配置〔2〕for <i=0; in; i++>for <j=0; jm; j++>a[i][j]=0;答案:o<m*n>解释:语句a[i][j]=0;的执行次数为m*n.〔3〕s=0;for i=0; in; i++>for<j=0; jn; j++>s+=b[i][j];sum=s;2答案:o<n>解释:语句s+=b[i][j];的执行次数为n.〔4〕i=1;while<i=n>i=i*3;答案:o<log3n>解释:语句i=i*3;的执行次数为 ?log3n?.〔5〕x=0;for<i=1; in; i++>for <j=1; j=n-i; j++>x++;2答案:o<n>解释:语句x++;的执行次数为n-1+n-2+??+1= n<n-1>/2.〔6〕x=n; //n1y=0;while<x≥<y+1>* <y+1>>y++;答案:o<>解释:语句y++;的执行次数为 ?n?. 2第2章线性表1.选择题〔1〕顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是〔〕.a.110b.108 c.100 d.120答案:b解释:顺序表中的数据连续存储,所以第5个元素的地址为:100+2*4=108.〔2〕在n个结点的顺序表中,算法的时间复杂度是o<1>的操作是〔〕.a.访问第i个结点〔1≤i≤n〕和求第i个结点的直接前驱〔2≤i≤n〕b.在第i个结点后插入一个新结点〔1≤i≤n〕c.删除第i个结点〔1≤i≤n〕d.将n个结点从小到大排序答案:a解释:在顺序表中插入一个结点的时间复杂度都是o<n2>,排序的时间复杂度为o<n2>或o<nlog2n>.顺序表是一种随机存取结构,访问第i个结点和求第i个结点的直接前驱都可以直接通过数组的下标直接定位,时间复杂度是o<1>.〔3〕向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为〔〕.a.8 b.63.5 c.63d.7答案:b解释:平均要移动的元素个数为:n/2.〔4〕存储的存储结构所占存储空间〔〕.a.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针b.只有一部分,存放结点值c.只有一部分,存储表示结点间关系的指针d.分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:a〔5〕线性表若采用链式存储结构时,要求内存中可用存储单元的地址〔〕.a.必须是连续的 b.部分地址必须是连续的c.一定是不连续的 d.连续或不连续都可以答案:d〔6〕线性表L在〔〕情况下适用于使用链式结构实现.a.需经常修改L中的结点值B.需不断对L进行删除插入c.L中含有大量的结点D.L中结点结构复杂答案:b。
数据结构与算法测试题+参考答案
数据结构与算法测试题+参考答案一、单选题(共80题,每题1分,共80分)1、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间?A、仅有头指针的单循环链表B、双链表C、仅有尾指针的单循环链表D、单链表正确答案:C2、数据结构研究的内容是()。
A、数据的逻辑结构B、数据的存储结构C、建立在相应逻辑结构和存储结构上的算法D、包括以上三个方面正确答案:D3、下列关于无向连通图特征的叙述中,正确的是:所有顶点的度之和为偶数边数大于顶点个数减1至少有一个顶点的度为1A、只有1B、1和2C、1和3D、只有2正确答案:A4、下面的程序段违反了算法的()原则。
void sam(){ int n=2;while (n%2==0) n+=2;printf(“%d”,n);}A、确定性B、可行性C、有穷性D、健壮性正确答案:C5、对任意给定的含 n (n>2) 个字符的有限集 S,用二叉树表示 S 的哈夫曼编码集和定长编码集,分别得到二叉树 T1 和 T2。
下列叙述中,正确的是:A、出现频次不同的字符在 T2 中处于相同的层B、出现频次不同的字符在 T1 中处于不同的层C、T1 的高度大于 T2 的高度D、T1 与 T2 的结点数相同正确答案:A6、数据序列{ 3,2,4,9,8,11,6,20 }只能是下列哪种排序算法的两趟排序结果?A、快速排序B、选择排序C、插入排序D、冒泡排序正确答案:A7、设散列表的地址区间为[0,16],散列函数为H(Key)=Key%17。
采用线性探测法处理冲突,并将关键字序列{ 26,25,72,38,8,18,59 }依次存储到散列表中。
元素59存放在散列表中的地址是:A、11B、9C、10D、8正确答案:A8、采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是:A、每次划分后,先处理较短的分区可以减少递归次数B、递归次数与每次划分后得到的分区处理顺序无关C、递归次数与初始数据的排列次序无关D、每次划分后,先处理较长的分区可以减少递归次数正确答案:B9、以下数据结构中,()是非线性数据结构。
数据结构与算法题库(含参考答案)
数据结构与算法题库(含参考答案)一、单选题(共100题,每题1分,共100分)1、在一次校园活动中拍摄了很多数码照片,现需将这些照片整理到一个PowerPoint 演示文稿中,快速制作的最优操作方法是:A、创建一个 PowerPoint 相册文件。
B、创建一个 PowerPoint 演示文稿,然后批量插入图片。
C、创建一个 PowerPoint 演示文稿,然后在每页幻灯片中插入图片。
D、在文件夹中选中所有照片,然后单击鼠标右键直接发送到PowerPoint 演示文稿中。
正确答案:A2、下面对“对象”概念描述错误的是A、对象不具有封装性B、对象是属性和方法的封装体C、对象间的通信是靠消息传递D、一个对象是其对应类的实例正确答案:A3、设栈与队列初始状态为空。
首先A,B,C,D,E依次入栈,再F,G,H,I,J 依次入队;然后依次出队至队空,再依次出栈至栈空。
则输出序列为A、F,G,H,I,J,E,D,C,B,AB、E,D,C,B,A,J,I,H,G,FC、F,G,H,I,J,A,B,C,D,E,D、E,D,C,B,A,F,G,H,I,J正确答案:A4、设表的长度为 20。
则在最坏情况下,冒泡排序的比较次数为A、20B、19C、90D、190正确答案:D5、设二叉树的前序序列为 ABDEGHCFIJ,中序序列为 DBGEHACIFJ。
则后序序列为A、DGHEBIJFCAB、JIHGFEDCBAC、GHIJDEFBCAD、ABCDEFGHIJ正确答案:A6、Excel工作表B列保存了11位手机号码信息,为了保护个人隐私,需将手机号码的后 4 位均用“*”表示,以 B2 单元格为例,最优的操作方法是:A、=REPLACE(B2,7,4,"****")B、=REPLACE(B2,8,4,"****")C、=MID(B2,7,4,"****")D、=MID(B2,8,4,"****")第 10 组正确答案:B7、小金从网站上查到了最近一次全国人口普查的数据表格,他准备将这份表格中的数据引用到 Excel 中以便进一步分析,最优的操作方法是:A、通过 Excel 中的“自网站获取外部数据”功能,直接将网页上的表格导入到 Excel 工作表中。
数据结构与算法练习题库(含答案)
数据结构与算法练习题库(含答案)一、单选题(共80题,每题1分,共80分)1、对一棵二叉树的结点从 1 开始顺序编号。
要求每个结点的编号大于其左子树所有结点的编号、但小于右子树中所有结点的编号。
可采用▁▁▁▁▁ 实现编号。
A、中序遍历B、先序遍历C、层次遍历D、后序遍历正确答案:A2、设一段文本中包含4个对象{a,b,c,d},其出现次数相应为{4,2,5,1},则该段文本的哈夫曼编码比采用等长方式的编码节省了多少位数?A、5B、4C、2D、0正确答案:C3、两个有相同键值的元素具有不同的散列地址A、一定不会B、一定会C、可能会D、有万分之一的可能会正确答案:C4、将元素序列{18,23,11,20,2,7,27,33,42,15}按顺序插入一个初始为空的、大小为11的散列表中。
散列函数为:H(Key)=Key%11,采用线性探测法处理冲突。
问:当第一次发现有冲突时,散列表的装填因子大约是多少?A、0.73B、0.27C、0.64D、0.45正确答案:D5、对N个记录进行归并排序,归并趟数的数量级是:A、O(NlogN)B、O(logN)C、O(N)D、O(N2)正确答案:B6、下列说法不正确的是:A、图的遍历是从给定的源点出发每一个顶点仅被访问一次B、图的深度遍历不适用于有向图C、遍历的基本算法有两种:深度遍历和广度遍历D、图的深度遍历是一个递归过程正确答案:B7、二叉树的中序遍历也可以循环地完成。
给定循环中堆栈的操作序列如下(其中push为入栈,pop为出栈): push(1), push(2), push(3), pop(), push(4), pop(), pop(), push(5), pop(), pop(), push(6), pop()A、6是根结点B、2是4的父结点C、2和6是兄弟结点D、以上全不对正确答案:C8、设最小堆(小根堆)的层序遍历结果为{1, 3, 2, 5, 4, 7, 6}。
数据结构与算法练习题附答案
1、下面关于算法的说法错误的是()A、算法最终必须由计算机程序实现B、为解决某问题的算法同为该问题编写的程序含义是相同的C、算法的可行性是指指令不能有二义性D、以上几个都是错误的参考答案:D2、数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称为()A、存储结构B、逻辑结构C、链式存储结构D、顺序存储结构参考答案:C3、以下说法正确的是()(2分)A、数据元素是数据的最小单位B、数据项是数据的基本单位C、数据结构是带有结构的各数据项的集合D、数据结构是带有结构的数据元素的集合参考答案:D4、通常从正确性、易读性、健壮性、高效性等四个方面评价算法(包括程序)的质量。
以下解释错误的是()A、正确性算法应能正确地实现预定的功能(即处理要求)B、易读性算法应易于理解和阅读,以便于调试、修改和扩充C、健壮性当环境发生变化时,算法能适当地做出反应或进行处理,不会产生不需要的运行结果D、高效性即达到所需要的时间性能参考答案:C5、树形结构是数据元素之间存在一种()A、一对一关系B、多对多关系C、多对一关系D、一对多关系参考答案:D6、数据结构是指()A、数据元素的组织形式B、数据类型C、数据存储结构D、数据定义参考答案:A7、算法分析的目的是()A、找出数据结构的合理性3、研究算法中的输入和输出关系C、分析算法的效率以求改进D、分析算法的易懂性和文档性参考答案:C8、数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()A、低B、高C、相同D、以上都不正确参考答案:B9、算法的空间复杂度是指()A、执行算法程序所占的存储空间B、算法程序中的指令条数C、算法程序的长度D、算法执行过程中所需要的存储空间参考答案:D10、数据的存储结构是指()A、数据所占的存储空间量B、数据的逻辑结构在计算机中的表示C、数据在计算机中的顺序存储方式D、存数在外存中的数据参考答案:B11、线性表是()A、一个有限序列,可以为空B、一个有限序列,不能为空C、一个无限序列,可以为空D、一个无限序列,不能为空参考答案:A12、下列叙述正确的是()A、线性表是线性结构B、栈和队列是非线性结构C、线性链表是非线性结构D、二叉树是线性结构参考答案:A13、计算机内部数据处理的基本单位是()A、数据B、数据元素C、数据项D、数据库参考答案:B14、从逻辑上可以把数据结构分为()两大类A、动态结构、静态结构B、顺序结构、链式结构C、线性结构、非线性结构D、初等结构、构造型结构参考答案:C15、算法的时间复杂度取决于()A、问题的规模B、待处理数据的初态C、A 和B参考答案:C16、以下属于逻辑结构的是()(2分)A、顺序表B、哈希表C、有序表D、单链表参考答案:C17、下列数据结构中,()是非线性数据结构A、树B、字符串C、队D、栈参考答案:A18、设语句x++的时间是单位时间,则以下语句的时间复杂度为()for(i=1;i<=n;i++)for(j=|;j<=n;j++)x++;(2分)A、O(1)B、O(n2)C、O(n)D、O(n3)参考答案:B19、算法的计算量大小称为计算的()(2分)A、效率B、复杂性C、现实性D、难度参考答案:B20、数据结构只是研究数据的逻辑结构和物理结构,这种观点()A、正确B、错误C、前半句正确,后半句错误D、前半句错误,后半句正确参考答案:B21、计算机算法指的是(),它具有输入、输出、可行性、确定性和有穷性等五个特性。
数据结构与算法分析—期末复习题及答案
单选题(每题 2 分,共20分)1. 对一个算法的评价,不包括如下(B )方面的内容。
A.健壮性和可读性 B.并行性 C.正确性 D.时空复杂度2. 在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( A )。
A. p->next=HL->next; HL->next=p;B. p->next=HL; HL=p;C. p->next=HL; p=HL;D. HL=p; p->next=HL;3. 对线性表,在下列哪种情况下应当采用链表表示?( B )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4. 一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( C )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 36. 若需要利用形参直接访问实参时,应将形参变量说明为(D )参数。
A.值 B.函数 C.指针 D.引用8. 在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的( A )。
A.行号 B.列号 C.元素值 D.非零元素个数10. 从二叉搜索树中查找一个元素时,其时间复杂度大致为(C )。
A. O(n)B. O(1)C. O(log2n)D. O(n2)二、运算题(每题 6 分,共24分)1. 数据结构是指数据及其相互之间的_联系。
当结点之间存在M对N(M:N)的联系时,称这种结构为__图__。
2. 队列的插入操作是在队列的___尾_进行,删除操作是在队列的_首_进行。
3. 当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈满的条件是___top==0___(要超出才为满)_______________。
4. 对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为___ O(1)__,在表尾插入元素的时间复杂度为___ O(n)___。
(完整版)数据结构与算法第1章参考答案08
for(j=i+1;j<=n;j++)
if(R[j]>R[j+1])k=j;
t=R[k];R[k]=R[i];R[i]=t;
}
[解答]O(n2)
7.计算一元n次多项式P( x,n)=a0+alx+a2x2+..+anxn“的值,输人x,n,a0,al,…,an,输出多项式P(x,n)的值。设计算法求解,请选择合适的输人、输出格式,要求算法具有较好的时间性能。
习题参考答案
一.选择题
1.从逻辑上可以把数据结构分为(C)两大类。
A.动态结构、静态结构B.顺序结构、链式结构
C.线性结构、非线性结构D.初等结构、构造型结构
2.在下面的程序段中,对x的斌值语句的频度为(C)。
for( t=1;k<=n;k++)
for(j=1;j<=n; j++)
x=x十1;
A. O(2n)B.O(n)C.O(n2).D.O(1og2n)
D.同一个算法,实现语言的级别越高,执行效率就越低
5.在发生非法操作时,算法能够作出适当处理的特性称为(B)。
A.正确性B.健壮性C.可读性D.可移植性
二、判断题
1.数据的逻辑结构是指数据的各数据项之间的逻辑关系。(√)
2.顺序存储方式的优点是存储密度大,且插人、删除运算效率高。(×)
3.数据的逻辑结构说明数据元素之间的次序关系,它依赖于数据的存储结构。(×)
3.采用链式存储结构表示数据时,相邻的数据元素的存储地址(C)。
A.一定连续B.一定不连续
C.不一定连续D.部分连续,部分不连续
4.下面关于算法说法正确的是(D)。
A.算法的时间复杂度一般与算法的空间复杂度成正比
B.解决某问题的算法可能有多种,但肯定采用相同的数据结构
第5章 数据结构与算法 习题与答案
第五章习题(1)复习题1、试述数据和数据结构的概念及其区别。
数据是对客观事物的符号表示,是信息的载体;数据结构则是指互相之间存在着一种或多种关系的数据元素的集合。
(P113)2、列出算法的五个重要特征并对其进行说明。
算法具有以下五个重要的特征:有穷性:一个算法必须保证执行有限步之后结束。
确切性:算法的每一步骤必须有确切的定义。
输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件。
输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。
没有输出的算法没有实际意义。
可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
(P115)3、算法的优劣用什么来衡量?试述如何设计出优秀的算法。
时间复杂度空间复杂度(P117)4、线性和非线性结构各包含哪些种类的数据结构?线性结构和非线性结构各有什么特点?线性结构用于描述一对一的相互关系,即结构中元素之间只有最基本的联系,线性结构的特点是逻辑结构简单。
所谓非线性结构是指,在该结构中至少存在一个数据元素,有两个或两个以上的直接前驱(或直接后继)元素。
树型和图型结构就是其中十分重要的非线性结构,可以用来描述客观世界中广泛存在的层次结构和网状结构的关系。
(P118 P122)5、简述树与二叉树的区别;简述树与图的区别。
树用来描述层次结构,是一对多或多对一的关系;二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。
二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。
图也称做网,是一种比树形结构更复杂的非线性结构。
在图中,任意两个节点之间都可能相关,即节点之间的邻接关系可以是任意的,图表示的多对多的关系。
(P121-P124)6、请举出遍历算法在实际中使用的例子。
提示:根据实际生活中需要逐个访问处理的情况举例。
数据结构与算法分析课后习题答案
数据结构与算法分析课后习题答案第一章:基本概念一、题目:什么是数据结构与算法?数据结构是指数据在计算机中存储和组织的方式,如栈、队列、链表、树等;而算法是一系列解决问题的清晰规范的指令步骤。
数据结构和算法是计算机科学的核心内容。
二、题目:数据结构的分类有哪些?数据结构可以分为以下几类:1. 线性结构:包括线性表、栈、队列等,数据元素之间存在一对一的关系。
2. 树形结构:包括二叉树、AVL树、B树等,数据元素之间存在一对多的关系。
3. 图形结构:包括有向图、无向图等,数据元素之间存在多对多的关系。
4. 文件结构:包括顺序文件、索引文件等,是硬件和软件相结合的数据组织形式。
第二章:算法分析一、题目:什么是时间复杂度?时间复杂度是描述算法执行时间与问题规模之间的增长关系,通常用大O记法表示。
例如,O(n)表示算法的执行时间与问题规模n成正比,O(n^2)表示算法的执行时间与问题规模n的平方成正比。
二、题目:主定理是什么?主定理(Master Theorem)是用于估计分治算法时间复杂度的定理。
它的公式为:T(n) = a * T(n/b) + f(n)其中,a是子问题的个数,n/b是每个子问题的规模,f(n)表示将一个问题分解成子问题和合并子问题的所需时间。
根据主定理的不同情况,可以得到算法的时间复杂度的上界。
第三章:基本数据结构一、题目:什么是数组?数组是一种线性数据结构,它由一系列具有相同数据类型的元素组成,通过索引访问。
数组具有随机访问、连续存储等特点,但插入和删除元素的效率较低。
二、题目:栈和队列有什么区别?栈和队列都是线性数据结构,栈的特点是“先进后出”,即最后压入栈的元素最先弹出;而队列的特点是“先进先出”,即最先入队列的元素最先出队列。
第四章:高级数据结构一、题目:什么是二叉树?二叉树是一种特殊的树形结构,每个节点最多有两个子节点。
二叉树具有左子树、右子树的区分,常见的有完全二叉树、平衡二叉树等。
数据结构与算法习题含参考答案
数据结构与算法习题含参考答案一、单选题(共100题,每题1分,共100分)1、要为 Word 2010 格式的论文添加索引,如果索引项已经以表格形式保存在另一个 Word文档中,最快捷的操作方法是:A、在 Word 格式论文中,逐一标记索引项,然后插入索引B、直接将以表格形式保存在另一个 Word 文档中的索引项复制到 Word 格式论文中C、在 Word 格式论文中,使用自动插入索引功能,从另外保存 Word 索引项的文件中插D、在 Word 格式论文中,使用自动标记功能批量标记索引项,然后插入索引正确答案:D2、下面不属于计算机软件构成要素的是A、文档B、程序C、数据D、开发方法正确答案:D3、JAVA 属于:A、操作系统B、办公软件C、数据库系统D、计算机语言正确答案:D4、在 PowerPoint 演示文稿中,不可以使用的对象是:A、图片B、超链接C、视频D、书签第 6 组正确答案:D5、下列叙述中正确的是A、软件过程是软件开发过程和软件维护过程B、软件过程是软件开发过程C、软件过程是把输入转化为输出的一组彼此相关的资源和活动D、软件过程是软件维护过程正确答案:C6、在 Word 中,不能作为文本转换为表格的分隔符的是:A、@B、制表符C、段落标记D、##正确答案:D7、某企业为了建设一个可供客户在互联网上浏览的网站,需要申请一个:A、密码B、门牌号C、域名D、邮编正确答案:C8、面向对象方法中,将数据和操作置于对象的统一体中的实现方式是A、隐藏第 42 组B、抽象C、结合D、封装正确答案:D9、下面属于整数类 I 实例的是A、-919B、0.919C、919E+3D、919D-2正确答案:A10、定义课程的关系模式如下:Course (C#, Cn, Cr,prC1#, prC2#)(其属性分别为课程号、课程名、学分、先修课程号 1和先修课程号 2),并且不同课程可以同名,则该关系最高是A、BCNFB、2NFC、1NFD、3NF正确答案:A11、循环队列的存储空间为 Q(1:100),初始状态为 front=rear=100。
数据结构与算法试题及
数据结构与算法试题及答案参考数据结构与算法试题及答案参考一、选择题1. 数据结构是研究什么的?A. 数据的结构和组织B. 数据的格式和排列C. 数据的读取和写入D. 数据的传输和存储正确答案:A2. 在数据结构中,栈(Stack)的特点是什么?A. 先进先出B. 先进后出C. 后进先出D. 后进后出正确答案:C3. 在链表中,结点的指针指向的是什么?A. 结点本身B. 结点的前一个结点C. 结点的后一个结点D. 结点的数据域正确答案:C4. 在二叉搜索树中,左子树的值都小于根节点,右子树的值都大于根节点。
这种特性被称为什么性质?A. 有序性B. 平衡性C. 完全性D. 二叉性正确答案:A二、填空题1. 算法的复杂度可以分为时间复杂度和________复杂度。
正确答案:空间2. 实现队列数据结构可以采用两个栈的方式,称为______队列。
正确答案:双栈3. 快速排序算法的时间复杂度为______。
正确答案:O(nlogn)三、编程题1. 请编写一个函数,实现对一个数组进行冒泡排序。
正确答案:```pythondef bubble_sort(arr):for i in range(len(arr) - 1):for j in range(len(arr) - 1 - i):if arr[j] > arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j]return arr```2. 请编写一个递归函数,计算斐波那契数列的第n项。
正确答案:```pythondef fibonacci(n):if n <= 1:return nelse:return fibonacci(n - 1) + fibonacci(n - 2)```四、简答题1. 请简单描述树和图的区别。
答:树是一种特殊的图,它是一个由节点和边组成的非线性数据结构,具有层级关系,且任意两个节点之间有且仅有一条路径相连。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大学《数据结构与算法分析》课程习题及参考答案模拟试卷一一、单选题(每题 2 分,共20分)1.以下数据结构中哪一个是线性结构?( )A. 有向图B. 队列C. 线索二叉树D. B树2.在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下( )语句序列。
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.以下哪一个不是队列的基本运算?()A. 在队列第i个元素之后插入一个元素B. 从队头删除一个元素C. 判断一个队列是否为空D.读取队头元素的值4.字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成( )个不同的字符串?A.14B.5C.6D.85.由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为( )。
以下6-8题基于图1。
6.该二叉树结点的前序遍历的序列为( )。
A.E、G、F、A、C、D、BB.E、A、G、C、F、B、DC.E、A、C、B、D、G、FD.E、G、A、C、D、F、B7.该二叉树结点的中序遍历的序列为( )。
A. A、B、C、D、E、G、FB. E、A、G、C、F、B、DC. E、A、C、B、D、G、FE.B、D、C、A、F、G、E8.该二叉树的按层遍历的序列为( )。
A.E、G、F、A、C、D、B B. E、A、C、B、D、G、FC. E、A、G、C、F、B、DD. E、G、A、C、D、F、B9.下面关于图的存储的叙述中正确的是( )。
A.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关B.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关C. 用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关10.设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建堆的结果?( )A. a,g,h,m,n,p,q,x,zB. a,g,m,h,q,n,p,x,zC. g,m,q,a,n,p,x,h,zD. h,g,m,p,a,n,q,x,z二、填空题(每空1分,共26分)1.数据的物理结构被分为_________、________、__________和___________四种。
2.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_________,在表尾插入元素的时间复杂度为____________。
3.向一个由HS指向的链栈中插入一个结点时p时,需要执行的操作是________________;删除一个结点时,需要执行的操作是______________________________(假设栈不空而且无需回收被删除结点)。
4.对于一棵具有n个结点的二叉树,一个结点的编号为i(1≤i≤n),若它有左孩子则左孩子结点的编号为________,若它有右孩子,则右孩子结点的编号为________,若它有双亲,则双亲结点的编号为________。
5.当向一个大根堆插入一个具有最大值的元素时,需要逐层_________调整,直到被调整到____________位置为止。
6.以二分查找方法从长度为10的有序表中查找一个元素时,平均查找长度为________。
7.表示图的三种常用的存储结构为_____________、____________和_______________。
8.对于线性表(70,34,55,23,65,41,20)进行散列存储时,若选用H(K)=K %7作为散列函数,则散列地址为0的元素有________个,散列地址为6的有_______个。
9.在归并排序中,进行每趟归并的时间复杂度为______,整个排序过程的时间复杂度为____________,空间复杂度为___________。
10.在一棵m阶B_树上,每个非树根结点的关键字数目最少为________个,最多为________个,其子树数目最少为________,最多为________。
三、运算题(每题 6 分,共24分)1.写出下列中缀表达式的后缀形式:(1)3X/(Y-2)+1(2)2+X*(Y+3)2.试对图2中的二叉树画出其:(1)顺序存储表示的示意图;(2)二叉链表存储表示的示意图。
3.判断以下序列是否是小根堆? 如果不是, 将它调图2 整为小根堆。
(1){ 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 }(2){ 05, 23, 20, 28, 40, 38, 29, 61, 35, 76, 47, 100 }4.已知一个图的顶点集V和边集E分别为:V={1,2,3,4,5,6,7};E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4, (4,7)20,(5,6)18,(6,7)25};按照普里姆算法从顶点1出发得到最小生成树,试写出在最小生成树中依次得到的各条边。
四、阅读算法(每题7分,共14分)1.void AE(Stack& S){InitStack(S);Push(S,3);Push(S,4);int x=Pop(S)+2*Pop(S);Push(S,x);int i,a[5]={1,5,8,12,15};for(i=0;i<5;i++) Push(S,2*a[i]);while(!StackEmpty(S)) cout<<Pop(S)<<' ';}该算法被调用后得到的输出结果为:2.void ABC (BTNode *BT,int &c1,int &c2) {if (BT !=NULL ) {ABC(BT->left,c1,c2);c1++;if (BT->left==NULL&&BT->right==NULL) c2++;ABC(BT->right,c1,c2);}//if}该函数执行的功能是什么?五、算法填空(共8分)向单链表的末尾添加一个元素的算法。
Void InsertRear(LNode*& HL,const ElemType& item){LNode* newptr;newptr=new LNode;If (______________________){cerr<<"Memory allocation failare!"<<endl;exit(1);}________________________=item;newptr->next=NULL;if (HL==NULL)HL=__________________________;else{LNode* P=HL;While (P->next!=NULL)____________________;p->next=newptr;}}六、编写算法(共8分)编写从类型为List的线性表L中将第i个元素删除的算法,(假定不需要对i的值进行有效性检查,也不用判别L是否为空表。
)void Delete(List& L, int i)模拟试卷一参考答案一、单选题(每题2分,共20分)1.B2.D3.A4.B5.B6.C7.A8.C9.B 10.B二、填空题(每空1分,共26分)1.顺序链表索引散列2.O(n) O(1)3.p->next=HS;HS=p HS=HS->next4.2i 2i+1 i/2(或i/2)5.向上根6.2.97.邻接矩阵邻接表边集数组8.1 49.O(n) O(nlog2n) O(n)10.m/2-1 m-1 m/2 m三、运算题(每题6分,共24分)1. (1) 3 X * Y 2 - / 1 +图3(2) 2 X Y 3 + * +2.(1)1 2 3 4 5 6 7 8 9(2)见图3所示:3. (1)不是小根堆。
调整为:{12,65,33,70,24,56,48,92,86,33}(2)是小根堆。
4.普里姆算法从顶点1出发得到最小生成树为:(1,2)3, (1,3)5, (1,4)8, (4,6)4, (2,5)10, (4,7)20四、阅读算法(每题7分,共14分)1.30 24 16 10 2 102.该函数的功能是:统计出BT所指向的二叉树的结点总数和叶子总数五、算法填空(共8分,每一空2分)newptr==NULL newptr->=data newptr p=p->next六、编写算法(8分)void Delete(List& L, int i){for(int j=i-1;j<L.size-1; j++)L.list[j]=L.list[j+1]; //第i个元素的下标为i-1 L.size--;}模拟试卷二一、单选题(每题 2 分,共20分)1.在一个带有附加表头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。
A. HL=p; p->next=HL;B. p->next=HL->next; HL->next=p;C. p->next=HL; p=HL;D. p->next=HL; HL=p;2.若顺序存储的循环队列的QueueMaxSize=n,则该队列最多可存储()个元素.A. nB.n-1C. n+1D.不确定3.下述哪一条是顺序存储方式的优点?()A.存储密度大 B.插入和删除运算方便C. 获取符合某种条件的元素方便D.查找运算速度快4.设有一个二维数组A[m][n],假设A[0][0]存放位置在600(10),A[3][3]存放位置在678(10),每个元素占一个空间,问A[2][3](10)存放在什么位置?(脚注(10)表示用10进制表示,m>3)A.658 B.648 C.633 D.6535.下列关于二叉树遍历的叙述中,正确的是( ) 。
A. 若一个树叶是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历最后一个结点B.若一个点是某二叉树的前序遍历最后一个结点,则它必是该二叉树的中序遍历的最后一个结点C.若一个结点是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序最后一个结点D.若一个树叶是某二叉树的前序最后一个结点,则它必是该二叉树的中序遍历最后一个结点6.k层二叉树的结点总数最多为( ).A.2k-1 B.2K+1 C.2K-1 D. 2k-17.对线性表进行二分法查找,其前提条件是( ).A.线性表以方式存储,并且按关键码值排好序B.线性表以顺序方式存储,并且按关键码值的检索频率排好序C.线性表以顺序方式存储,并且按关键码值排好序D.线性表以方式存储,并且按关键码值的检索频率排好序8.对n个记录进行堆排序,所需要的辅助存储空间为A. O(1og2n)B. O(n)C. O(1)D. O(n2)9.对于线性表(7,34,77,25,64,49,20,14)进行散列存储时,若选用H(K)=K %7作为散列函数,则散列地址为0的元素有()个,A.1 B.2 C.3 D.410.下列关于数据结构的叙述中,正确的是( ).A.数组是不同类型值的集合B.递归算法的程序结构比迭代算法的程序结构更为精炼C.树是一种线性结构D.用一维数组存储一棵完全二叉树是有效的存储方法二、填空题(每空1分,共26分)1.数据的逻辑结构被分为_________、________、__________和___________四种。