数据结构 习题

合集下载

数据结构习题和答案

数据结构习题和答案

习题课填空1、对于一棵二叉树,若一个结点的编号为i,则它的左孩子结点的编号为,双亲结点的编号为。

2、向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动个元素。

3、在一棵二叉树中,若双分支结点数为5个,单分支结点数为6个,则叶子结点数为个。

4、为了实现折半查找,线性表必须采用方法存储。

顺序5、一种抽象数据类型包括数据对象和。

6、在以L为表头指针的带表头附加结点的单链表和循环单链表中,判断链表为空的条件分别为__________和_______。

7、数据结构被形式地定义为(D, R),其中D是的有限集合,R是D上的有限集合。

8、队列的插入操作在进行,删除操作在进行。

9、二叉搜索树的中序遍历得到的结点序列为____ ____。

10、在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。

11、栈的特点是。

12、在单链表中,除了首元结点外,任一结点的存储位置由。

13、在一个具有n个顶点的无向图中,要连通所有顶点则至少需要条边。

14、深度为k(设根的层数为1)的完全二叉树至少有个结点,至多有个结点。

15、一棵深度为6的满二叉树有个分支结点和个叶子结点。

16、一个算法的效率可分为效率和效率。

17、队列的特点是。

18、一棵深度为5的满二叉树中的结点数为个。

19、在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。

简答题1、已知一组元素为(38,26,62,94,35,50,28,55),画出按元素排列顺序输入生成的一棵二叉搜索树。

答:2、假设有二维数组A[0..5,0..7],每个元素用相邻的6个字节存储,存储器按字节编址。

已知A的起始存储位置(基地址)为1000,计算:(1)末尾元素A57的第一个字节地址为;(2)若按列存储时,元素A47的第一个字节地址为。

(3) 数组A的体积(存储量);(4) 若按行存储时,元素A14的第一个字节地址为。

数据结构习题及标准答案

数据结构习题及标准答案

第一章1.在数据结构中,从逻辑上可以把数据结构分为(C )A.动态结构和静态结构B。

紧凑结构和非紧凑结构C.线性结构和非线性结构D。

内部结构和外部结构● 2.在数据结构中,与所使用的计算机无关的是( A )A。

逻辑结构 B. 存储结构C。

逻辑和存储结构 D. 物理结构3。

下面程序的时间复杂度为____O(mn)_______。

for (int i=1;i〈=m; i++)for (int j=1;j〈=n;j++ )S+=i第二章线性表●链表不具备的特点是(A)A 可以随机访问任一结点(顺序)B 插入删除不需要移动元素C 不必事先估计空间D 所需空间与其长度成正比2。

不带头结点的单链表head为空的判定条件为(A ),带头结点的单链表head为空的判定条件为(B )A head==nullB head—〉next==nullC head-〉next==headD head!=null●3.在线性表的下列存储结构中,读取元素花费时间最少的是(D)A 单链表B 双链表C 循环链表D 顺序表● 4.对于只在表的首、尾两端进行手稿操作的线性表,宜采用的存储结构为(C)A 顺序表B 用头指针表示的单循环链表C 用尾指针表示的单循环链表D 单链表●5。

在一个具有n 个结点的有序单链表中插入一个新的结点,并保持链表元素仍然有序,则操作的时间复杂度为( D )A O(1)B O(log2n)C O(n2)D O(n)● 6.在一个长度为n (n〉1)的单链表上,设有头和尾两个指针,执行(B)操作与链表的长度有关A 删除单链表中第一个元素B 删除单链表中最后一个元素C 在第一个元素之前插入一个新元素D 在最后一个元素之后插入一个新元素●7。

与单链表相比,双向链表的优点之一是(D)A 插入删除操作更简单B 可以进行随机访问C 可以省略表头指针或表尾指针D 顺序访问相邻结点更容易●8。

若list是某带头结点的循环链表的头结点指针,则该链表最后那个链结点的指针域(头结点的地址)中存放的是( B )A list的地址B list的内容C list指的链结点的值D 链表第一个链结点的地址●9.若list1和list2分别为一个单链表与一个双向链表的第一个结点的指针,则( B )A list2比list1占用更多的存储单元B list1与list2占用相同的存储单元C list1和list2应该是相同类型的指针变量D 双向链表比单链表占用更多的存储单元10。

数据结构习题

数据结构习题

一、单项选择题1.下面程序段的时间复杂度为( C ) 。

for(int i=0; i<m; i++)for(int j=0; j<n; j++)a[i][j]=i*j;A. O(m2) B. O(n2) C. O(m*n) D. O(m+n) 2.设有一个递归算法如下int fact(int n){串的长度 B.原串的子串 C.串的模式匹配 D.串的连接3.设有一个n×n的对称矩阵A,将其上三角部分按行存放在一个一维数组B中,A[0][0]存放于B[0]中,那么第i行的对角元素A[i][i]存放于B 中( C )处。

A.(i+3)*i/2 B.(i+1)*i/2 C.(2n-i+1)*i/2 D.(2n-i-1)*i/24.在( C )运算中,使用顺序表比链表好。

5.A.插入B.删除C.根据序号查找 D.根据元素值查找6.带头结点的单链表head为空的判断条件是( C )。

7.A.head= =NULL B.head->next= =NULLC.head->next=head D.head!=NULL8.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( C )最节省时间。

A)单链表 B)循环链单表 C)带尾指针的循环链单表 D)带头结点的双循环链表9.栈的插入与删除操作在(A )进行。

A.栈顶 B.栈底 C.任意位置 D.指定位置10.设一个栈的输入序列为A、B、C、D,则借助一个栈所能得到的输出序列不可能是( D )。

11.A.ABCD B.DCBA C.ACDB D.DABC12.在一个链队中,假设F和R分别是队首和队尾指针,则删除一个结点的运算是( C )。

13.A.R=F->next; B.R=R->next; C.F=F->next; D.F=R->next;14.串是一种特殊的线性表,其特殊性体现在( B )。

15.A.可以顺序存储B.数据元素是一个字符16.C.可以链接存储D.数据元素可以是多个字符17.以下说法正确的是(C )。

数据结构习题及答案

数据结构习题及答案

数据结构习题习题一一、选择题1、数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的(B)和运算的学科。

A.结构B.关系C.运算D.算法2、在数据结构中,从逻辑上可以把数据结构分成(C)。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.逻辑结构和存储结构3、线性表的逻辑顺序和存储顺序总是一致的,这种说法(B)。

A.正确B.不正确C.无法确定D.以上答案都不对4、算法分析的目的是(C)。

A.找出算法的合理性B.研究算法的输人与输出关系C.分析算法的有效性以求改进D.分析算法的易懂性二、填空题1、数据是信息的载体,是对客观事物的符号表示,它能够被计算机识别、存储、加工和处理,数据是对能够有效的输人到计算机中并且能够被计算机处理的符号的总称。

例如,数学中所用到的整数和实数,文本编辑所用到的字符串等。

2、数据元素是数据的基本单位,有些情况下也称为元素、结点、顶点、记录等。

3、数据项是数据不可分割的最小单元,是具有独立含义的最小标识单位。

例如构成一个数据元素的字段、域、属性等都可称之为_数据项。

4、简而言之,数据结构是数据之间的相互关系,即数据的组织形式。

5、数据的逻辑结构是指数据之间的逻辑关系。

逻辑结构是从逻辑关系上描述数据,它与具体存储无关,是独立于计算机的。

因此逻辑结构可以看作是从具体问题抽象出来的数学模型。

6、数据的存储结构指数据元素及其关系在计算机存储器内的表示。

存储结构是逻辑结构在计算机里的实现,也称之为映像。

7、数据的运算是指对数据施加的操作。

它定义在数据的逻辑结构之上,每种逻辑结构都有一个数据的运算。

常用的有:查找、排序、插人、删除、更新等操作。

8、数据逻辑结构可以分为四种基本的类型,集合结构中的元素除了仅仅只是同属于一个集合_,不存在什么关系。

9、数据逻辑结构的四种基本类型中,线性结构_中的元素是一种一对一的关系,这种结构的特征是:若结构是非空集,则有且只有一个开始结点和一个终端结点,并且所有结点最多只能有一个直接前驱和一个直接后继。

数据结构习题和答案及解析

数据结构习题和答案及解析

第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。

【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。

⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。

【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。

【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。

【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。

【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。

【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。

【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。

2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。

A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。

则表示该遗产继承关系的最合适的数据结构应该是()。

数据结构习题及答案

数据结构习题及答案

数据结构习题及答案第1章算法一、选择题1.算法的时间复杂度是指()。

A)执行算法程序所需要的时间B)算法程序中的指令条数C)算法执行过程中所需要的基本运算次数D)算法程序的长度2.算法的空间复杂度是指()。

A)算法程序的长度B)算法程序所占的存储空间C)算法执行过程中所需要的存储空间D)算法程序中的指令条数3.下面()的时间复杂度最好(即执行时间最短)。

logn)O()O(n ) B)A2logn2 ) D)O(n)C)O(n24.下面累加求和程序段的时间复杂度为()。

int sum(int a[],int n){int i, s=0;for (i=0;i<n;i++)< p="">s+=a[i];return s;}logn ) )O(A)O(1 ) B22))O(nC)O(n ) D中的算法,c[][]相加的结果存放到b[][]n阶矩阵5.下面是将两个n阶矩阵a[][]与。

该算法的时间复杂度为()void matrixadd(int a[][],intb[][],c[][],int n){int i,j;for (i=0;i<n;i++)< p="">for(j=0;j<n;j++)< p="">c[i][j]=a[i][j]+b[i][j];}nlog) )O(1 ) B)O(A22) )O(nO( n ) DC)。

6.下面程序段的时间复杂度为() 1int i=0,s1=0,s2=0;while(i<n)< p="">{if(i%2)s1+=i;elses2+=i;i++;}nlog) O(A)O(1 ) B)22) )O(nC)O(n ) D )。

7.下面程序段的时间复杂度为(int prime(int n){int i=1;int x=(int)sqrt(n);while(i<=x){i++;if(n%i==0)break;}if(i>x)return 1;elsereturn 0;}nlog) O(O(1 ) BA))2n) O()CO(n ) D))下面程序段的时间复杂度为(8.int fun(int n){int i=1,s=1;while(s<n)< p="">{i++;s+=i;}return i;}nlog)O(n/2) BA))O(2 2n) )O(C)O(n ) D9.下面程序段的时间复杂度为()int i,j,m,n,a[][];for(i=0;i<m;i++)< p="">for(j=0;j<n;j++)< p="">a[i][j]=i*j;22) )O(nA)O(m) BO(m+n) )C)O(m*n ) D )10. 下面程序段的时间复杂度为(int sum1(int n){int i,p=1,s=0;for(i=1;i<=n;i++){p*=i;s=s+p;}return s;}nlog) )O(A)O(1 ) B22)O(n ) D)O(nC)二、填空题复杂度。

数据结构练习题及答案

数据结构练习题及答案

数据结构练习题(一)一、单选题1.栈和队列的共同特点是( )。

A.只允许在端点处插入和删除元素B.都是先进后出C.都是先进先出D.没有共同点2.用链接方式存储的队列,在进行插入运算时( )。

A. 仅修改头指针B. 头、尾指针都要修改C. 仅修改尾指针D.头、尾指针可能都要修改3.以下数据结构中( )是非线性结构。

A. 队列B. 栈C. 线性表D. 二叉树4.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在()位置。

脚注(10)表示用10进制表示。

A.688 B.678 C.692 D.6965.树最适合用来表示( )。

A.有序数据元素B.无序数据元素C.元素之间具有分支层次关系的数据D.元素之间无联系的数据6.二叉树的第k层的结点数最多为( )。

A.2k-1 +1 D. 2k-17.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( )。

A. 1,2,3B. 9,5,2,3C. 9,5,3D. 9,4,2,38.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K %9作为散列函数,则散列地址为1的元素有()个。

A.1 B.2 C.3 D.49.设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。

二、填空题1.通常从四个方面评价算法的质量:_________、_________、_________和_________。

2.一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。

3.假定一棵树的广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数为__________个,树的深度为___________,树的度为_________。

数据结构-习题

数据结构-习题
答:编码:A:00
B:101
C:11
D:100
E:01
4.依次输入以下元素序列:56,78,34,45,85,45,36,91,84,78,试构造一棵二叉排序树。要在这棵二叉排序树中查找55,需要比较多少次?
答:比较4次
5.对于右图,从上到下,从左到右从0开始编号,写出:
(1)图的邻接表;
(2)图的广度优先搜索序列和深度优先搜索序列。
10.有向图的一个顶点的度为该顶点的(C)。
A.入度 B.出度 C.入度与出度之和 D.(入度+出度)/2
11.对于顺序存储的有序表(5,12,26,30,37,42,46,50,64),若采用二分查找,则查找元素30的查找长度为(C)。
A.2 B.3 C.4 D.5
12.在一棵深度为h的具有n个元素的二叉搜索树中,搜索一个元素的最大搜索长度(即经过比较的结点数)为(D)。
3.线性表的链接存储比顺序存储最有利于进行(D)。
A.查找 B.表尾插入或删除 C.按值插入或删除 D.表头插入或删除
4.在一个带头节点的循环双向链表中,若要在指针p所指向的节点之前插入一个q指针所指向的节点,则需要对p→left→right赋值为(A)。
A. q B. p C. p→right D. p→left
三、计算题
1.对于下图,试写出一种拓扑排序序列。
参考答案:ABCHIDGEF
2.已知一棵二叉树的前序和中序遍历序列,求该二叉树的后序遍历序列。
先根序列:F,C,A,D,B,E,G,H,P
中根序列:A,C,B,D,F,E,H,G,P
后根序列:A,B ,D, C,H,P,G,E,F
3.假设电文中出现5个字符A、B、C、D、E,已知它们在电文中出现的频率是5、4、7、2、5,构造出用{5,4,7,2,5}为权值生成的一棵哈夫曼树,并写出这5个字符的哈夫曼编码。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2) void ex32(SeqStack *s,int c)
{
SeqStack T;
int d;
while(!StackEmpty(S))
{ d=pop(S);
if(d!=c) push(T,d);
}
while(!StackEmpty(T))
{ d=pop(T);
if(d!=c) push(S,d);
5、_在单链表第一个结点之前增设的一个类型相同的结点_______;__表结点中的第一个结点______。
6、p->next->next=head。
7、__向前移动__
四、算法阅读题
1、阅读下面的算法
LinkList mynote(LinkListL)
{//L是不带头结点的单链表的头指针
if(L&&L->next){
#define m maxlen
typedef struct{
int rear;
int data[m];
}CirQueue;
int Fibonacci(int i) //求序列的前n项算法
{ if(i == 0)
return 0;
else if(i= = 1)
return 1;
else return (Fibonacci(i-2) +Fibonacci(i-1));
(1)查询表的尾节点
(2)将第一个节点链接到表的尾部成为新的尾节点
(3)(a2,a3,….an,a1)
2、以下函数中,h是带头结点的双向循环链表的头指针。
(1)说明程序的功能;
(2)当链表中结点数分别为1和6(不包括头结点)时,请写出程序中while循环体的执行次数。
int f(DListNode *h)
LinkList * p, * q, * s;
p=head;
do{
q= p->next;
if(p->data = = q->data)
{s=q; free(s);q= q->next; }
else
p=q;
}while(p->next != head);
}
2、线性表逆置
void Convers(LinkList *head)
(1) void ex31(SeqStack *S)
{
int A[80],i,n;
n=0;
while(!empty(S))
{ A[n]=pop[S];
n++;
}
for(i=0;i<n;i++)
push(S,A[i]);
}
答案:此算法功能是通过一个数组将一个栈中的所有元素逆置存放。例如原来栈S中存放5个元素abcde,经过算法执行后,变为edcba。
D、在链表中,每个结点只有一个链域
7.带头结点head的单链表为空的判断条件是( )
A. head=NUILB、head->next=NUIL
C. head->next=head D. head!=NUIL
8.线性表通常采用两种存储结构是( )
A、顺序存储结构和链式存储结构
B.散列方式和索引方式
C.链表存储结构和数组
4、在如图所示的链表中,若在指针p所指的结点之后插入数据域值相继为a和b的两个结点,则可用下列两个语句实现该操作,它们依次是_ ______和_______。
5、.通常单链表的头结点指的是_ _______;单链表的首结点指的是________。
6、在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为。
return1;
}
①(i+1)%2(或1-i)
②Q->rear[i]
③(Q->rear[i]+1)%Maxsize
4、假定在一个链队列中只设置队列为指针,不设置对首指针,并且让队尾节点的指针域指向队首节点(称此微循环队列),试分别写出在循环链队上进行插入和删除操作的算法。
插入算法:
void QInsert(LNode * &Rear , const Elemtype & item)
2、所谓数据的逻辑结构指的是数据元素之间的逻辑关系。(√)
3、在线性结构中,每个结点都有一个直接前驱和一个直接后继。(╳)
三、填空题
1、在单链表中设置头结点的作用_。
2、.设head为带有头结点的单链表的头指针,则判断单链表为空的条件是:_________。
3、.带头结点的循环链表L为空表的条件是____。带头结点的双循环链表L为空表的条件是_。
int EnQueue (Queue2 *Q,int i,DateType x)
{//若第 i个队列不满,则元素x入队列,并返回1;否则返回0
if(i<0||i>1)return 0;
if(Q->rear[i]==Q->front[①]return 0;
Q->data[②]=x;
Q->rear[i]=[③];
(7,10,10,21,30,42,42,42,51,70)
经算法操作后变为
(7,10,21,30,42,51,70)
参考答案:
typedef struct node {
int data;
struct node * next;
}LinkList;
Delete_Eq(LinkList * head)
{
A.p=p->next;B、p->next=p->next->next;
C.p->next=p;D.p=p->next->next;
12.在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p->next->next=head,则()
A.p指向头结点B.p指向尾结点
C.*p的直接后继是头结点D、*P的直接后继是尾
}
void Fibonacci( CirQueue * Q, int k)
{
inti, n;
Q->rear = 0;
scanf(“%d”,&n);
for(i=0; i<n ; i++)
{ Q->rear =i;
if ( i> =k) Q->rear = Q->rear% k;
Q->data [Q->rear] = Fibonacci(i);
7、从顺序表中删除一个元素时,表中所有在被删元素之后的元素均需____________一个位置。
1、简化插入删除算法.
2、head->next= =NULL_____。
3、L->next=L___。L->next=L->prior=L
4、__s->next->next=p->next______和_p->next=s_______。
D. 串中所含字符的个数
2、如下陈述中正确的式( )。
A、串是一种特殊的线性表 B、串的长度必须大于0
C、串中元素只能是字母 D、空串就是空白串
3、设字符串s1=”abcdefg”,s2=”pqrst”,则运算s=strcat(substr(s1,2,length(s2)),substr(s1,length(s2),2))后串值为( )。
{
LinkList * p, *q, *r;
p = head;
q = p->next;
p->next = NULL;
while ( q!= NULL)
{
r=q->next;
q->next=p;
p=q;
q=r;
}
head = p;
}
栈和队列习题
1.简述下面所给算法的功能是什么?(假设栈元素为整数类型)
if( p = = Rear)
Rear =NULL;
else
Rear ->next = p->next;
ElemType temp = p->data;
free(p);
return temp;
}
第四章 串习题
练习:
1、串长度的定义是( )
A.串中不同字母的个数 B.串中不同字符的个数
C.串中所含字符的个数,且大于0
13.为了最快地对线性结构的数据进行某数据元素的读取操作,则其数据存储结构宜采用( )方式。
A、顺序存储B.链式存储
C.索引存储D.散列存储
答案:1-5 BDACB 6-10 DBABC 11-13 BDA
二、判断题(判断下列各小题,正确的在题后括号内打“√”,错的打“╳”。)
1、单链表中的头结点就是单链表的第一个结点。(╳)
}
}
3.算法阅读
假设两个队列共享一个循环向量空间(参见右下图),
其类型Queue2定义如下:
typedef struct{
DateType data[MaxSize];
int front[2],rear[2];
}Queue2;
对于i=0或1,front[i]和rear[i]分别为第i个队列的头指针和尾指针。请对以下算法填空,实现第i个队列的入队操作。
A.顺序表B.用头指针表示的单循环链表
C、用尾指针表示的单循环链表D.单链表
5.在需要经常查找结点的前驱与后继的场合中,使用( )比较合适。
A.单链表B、双链表C.顺序表D.循环链表
6.下面关于线性表的叙述中,错误的为( )
A.顺序表使用一维数组实现的线性表
B.顺序表必须占用一片连续的存储单元
C.顺序表的空间利用率高于链表
相关文档
最新文档