数据结构试卷与答案

数据结构试卷与答案
数据结构试卷与答案

1.算法与程序有何区别和联系?(6分)

1.算法是对特定问题求解步骤的一种描述,可以用自然语言、流程图、伪代码、程序代

码来表示。程序是算法的具体实现,可以用不同的语言实现。

2.树的存储方法主要有哪些?任你画一个树举例说明具体存储结构。(6分)2.(1)双亲表示法——以一组连续空间存储树的结点,在每个结点中设一个指示器指示双亲结点的位置。

(2)孩子表示法——每个结点的孩子以单链表的形式存储,n个结点有n个孩子链表,n个头指针又组成一个线性表,并以顺序存储结构存储。

(3)孩子兄弟表示法——以二叉链表作为树的存储结构,链表中的结点的两个指针分别指向该结点的第一个孩子结点和下一个兄弟结点。

3.设有序表的长度为10,用二分查找方法进行查找,试计算查找成功情况下的平均查找长度(6分)

ASL = 1/10 *(1+2*2+4*3+3*4) = 2.9

4.图的遍历方法主要有哪些?任你画一个图举例具体说明。(6分)

深度优先搜索,宽度优先搜索。例如:

深度优先搜索遍历:ABXFYDEC

宽度优先搜索遍历:ABCDXEYF

5.画出广义表D=(( ),x,(a,(b,c)))的存储结构,并写出广义表类型定义。

#define ATOM 0

#define LIST 1

typedef enum

{

ATOM, LIST

}ElemTag;

//表头表尾结构

struct GLNode

{

ElemTag tag; //区分原子结点表结点union

{

int atom;

struct

{

struct GLNode *hp; struct GLNode *tp;

}ptr;

};

};

//后继结点结构

struct GLNode

{

ElemTag tag;

union

{

int atom; //原子结点的值域struct GLNode *hp; //表结点的头指针};

struct GLNode *tp; //下一个元素结点};

采用后继结点的存储结构

6. 分别画出一个B树和B+树的例子,并指出它们之间的区别。(6分)B树与B+树的区别:

1) B树:每个结点的关键字个数等于指针个数减1。

B+树:每个结点的关键字个数等于指针个数。

2) B+树中所有叶子结点包含了全部关键字信息,以及指向关键字记录的指针,叶子节点依关键字大小自小到大链接。非终端结点作索引,结点中含有其子树根结点的最大(最小)关键字。

7.你知道有哪些排序算法?试比较各种排序算法的性能。(8分)

8.设一组关键字为(7,15,20,31,48,53,64,76,82,99),Hash函数H(key)= key % 11,Hash表表长m=11,用线性探测法解决冲突,试构造Hash表,并分别计算查找成功和查找失败情况下的平均查找长度。(8分)

7%11=7 查找1次成功15%11=4 查找1次成功20%11=9 查找1次成功31%11=9 9+1=10 查找2次成功48%11=4 4+1 =5 查找2次成功53%11=9 9+1+1-11=0 查找3次成功64%11=9 9+1+1+1-11=1 查找4次成功76%11=10 10+1+1+1-11=2 查找4次成功82%11=5 5+1=6 查找2次成功99%11=0 0+1+1+1=3 查找4次成功

查找成功时的平均查找长度:

(1+1+1+2+2+3+4+4+2+4)/10=2.4

查找失败的平均查找长度:

(1+2+3+4+5+6+7+8+9+10+11)/11=6

二、简述利用Dijkstra算法求解从某顶点到其余各顶点最短路径的步骤。Dijkstra算法思想:(1)求解顺序:按最短路径递增的顺序求解。

(2)到某个定点的最短路径找到后,考察它对其余顶点当前最短路径的影响。

算法步骤:

1)设arcs存储带权有向图的边的权值,v为出发顶点,S为已找到的从v出发的最短路径的终点集合,开始为空。从v出发到图中其余顶点vi最短路径长度初始值为D[i]=arcs[o][i] o, i为v, vi的位置

2)选择vj,使得D[j]=Min{D[i]| vi∈V-S} vj是从v出发的最短路径的终点。S=S∪{j} 3)修改从v出发到集合V-S任一顶点vk可达的最短路径长度。如果D[j]+arcs[j][k]

4)重复2,3 n-1次,由此求出从v到其它顶点的最短路径。

三、试编写归并排序算法。(12分)

#include

//将有序的SR[i...m]和SR[m+1...n]归并为有序的TR[i...n]

void Merge(int SR[], int TR[], int i, int m, int n)

{

int j,k;

j = m+1;

k = i;

while(i<=m && j<=n)

if(SR[i]<=SR[j])

TR[k++] = SR[i++];

else

TR[k++] = SR[j++];

while(i<=m)

TR[k++] = SR[i++];

while(j<=n)

TR[k++] = SR[j++];

}

//将SR[s...t]归并排序为TR1[s...t]

void MSort(int SR[], int TR1[], int s, int t) {

int m;

int TR2[10];

if(s == t) TR1[s] = SR[s];

else

{

m = (s+t)/2; //SR[s...t]平分为SR[s...m]和SR[m+1...t]

MSort(SR,TR2,s,m);//递归地将SR[s...m]归并为有序的TR2[s...m]

MSort(SR,TR2,m+1,t); //递归地将SR[m+1...t]归并为有序的TR2[m+1...t]

Merge(TR2,TR1,s,m,t); //将TR2[s...m]和

TR2[m+1...t]归并到TR1[s...t]

}

}

//主函数,调用归并排序MSort

void main()

{

int s[10] = {2,6,7,4,5,10,9,1,3,8};

MSort(s,s,0,9);

int i;

for(i=0;i<10;i++)

printf("%d ", s[i]);

}

四、试编写一个算法将线性表L中的数据建立一棵二叉排序树。(12分)

//线性表结点

typedef struct SqList {

int* elem; int length; int listsize; } SqList;

//二叉树结点

typedef struct BiTNode

{

int data;

struct BiTNode *lchild, *rchild;

} BiTNode;

//建立二叉排序树

void CreateBST(SqList l, BiTNode* &root) {

int i;

BiTNode *p, *q, *r;

if(l.lenght==0)

{

root = NULL;

return;

}

root =(BiTNode*) malloc(sizeof(BiTNode)); root->data = l.elem[0];

root->lchild=root->rchild=NULL; //二叉排序树的根节点

for(i=1; i

{

p = root;

while(p != NULL) //新结点定位if(l.elem[i]data)

{

q = p;

p = p->lchild;

}

else if(l.elem[i]>p->data)

{

q = p;

p = p->rchild;

}

else//该值已在排序树中出现,不再插入break;

if(p == NULL)

{

r = (BiTNode*) malloc(sizeof(BiTNode)); r->data = l.elem[i];

r->lchild = NULL;

r->rchild = NULL;//生成新结点

if(l.elem[i]data)

q->lchild = r;

else

q->rchild = r; //新结点作q的叶子结点

}

}

}

五、设单链表L中的结点按data域数值递减排列,试设计一个算法将L中的结点按data域数值递增加排列,要求算法的时间复杂性为O(n)。(12分)

typedef struct LNode

{

int data;

struct LNode *next;

} LNode;

void TraverseList(LNode *&l) {

LNode *head = NULL;

LNode *p = l, *q;

while(p) {

q = p;

p =p->next;

q->next = head; head = q;

}

l = head;

}

一、填空题(每空2分,共20分)

1.当时,快速排序算法的时间复杂性最差。

2.对于具有300个记录的文件,采用分块索引查找法查找,其中用二分查找法查找索引表,用顺序查找法查找块内元素,假定每块长度均为30个元素,则平均查找长度为。

3.设某二叉树的前序和中序序列均为ABCDE,则它的后序序列是。

4.假设以一维数组()

[]2/1+n n S作为n阶对称矩阵A的存储空间,以行序为主序存储A的下三角,则元素A[5][6]的值存储在S[___]中。

5.若一棵树中度为1的结点有N1个,度为2结点有N2个,……度为m 的结点有Nm个,则该树的叶结点有个。

6.设循环队列的元素存放在一维数组Q[0..30]中,front指向队头元素的前一个位置,rear指向队尾元素。若front=25, rear=5,则该队列中的元素个数为。

7.图的遍历方法主要是。

8.设源串S=“bcdcdcb”,模式串P=“cdcb”,按KMP算法进行模式匹配,当“S2S3S4”=“P1P2P3”,而S5≠P4时,S5应与比较。

9. 设序列{12,34,19,23,8,56},试建立表长为7的Hash表。Hash 函数为H(key)=key % 7,用线性探测法解决冲突,则56冲突次。

10.求解图的最小生成树的算法有两个,分别是。

一、填空题

1.待排数据本身已排好序

2.18.4

3.EDCBA

4.26

5.N2+2N3+…+(m-1)Nm

6.11

7.宽度优先搜索深度优先搜索

8.P2

9. 3

10.Prim算法和Kruskal算法

二、根据要求解答下列问题。(共34分)

1.画出广义表D=(( ),x,(a,(b,c)))的存储结构。(5分)

2.根据图的邻接表画邻接矩阵。(5分)

3.请给出堆排序不稳定的例子。(6分)

堆排序不稳定

1 2 2 4 排序后结果为1 2 2 4

4.设输入下列关键字序列:12,34,56,8,5,18,15,

试建立一棵平衡的二叉排序树,写出步骤。(6分)

5.分别画出一个B树和B+树的例子,并指出它们之间的区别。(6分)

B树与B+树的区别:

1.B树:每个结点的关键字个数等于指

针个数减1。

B+树:每个结点的关键字个数等于指

针个数。2.B+树中所有叶子结点包含了全部关

键字信息,以及指向关键字记录的指针,叶子节点依关键字大小自小到大链接。非终端结点作索引,结点中含有其子树根结点的最大(最小)关键

字。

6. 举例说明栈和队列的应用。(6分)

栈是一种后进先出的数据结构,可应用于递归操作、表达式求值、括号匹配等。

队列是一种先进先出的数据结构,可应用于树的层次遍历,操作系统中的作业排队,先来先服务

三.在《数据结构》课程中,你学习了哪些算法?请至少列举20个算法名称。有序线性表的合并、KMP算法、顺序查找、二分查找、Hash查找、建立二叉排序树的算法、冒泡排序、选择排序、插入排序、堆排序、快速排序、归并排序、基数排序、Prim算法、Kruskal 算法、图的深度优先搜索算法、图的广度优先搜索算法、Dijkstra算法、拓扑排序算法、Huffman 算法、二叉树的先序遍历算法、中序线索二叉树算法。

四、试编写对顺序表L进行归并排序的算法。(12分)

#include

#include

//线性表结点

typedef struct SqList

{

int* elem;

int length;

int listsize;

} SqList;

//将有序的SR[i...m]和SR[m+1...n]归并为有序的TR[i...n]

void Merge(int SR[], int TR[], int i, int m, int n)

{

int j,k;

j = m+1;

k = i;

while(i<=m && j<=n)

if(SR[i]<=SR[j])

TR[k++] = SR[i++];

else

TR[k++] = SR[j++];

while(i<=m)

TR[k++] = SR[i++];

while(j<=n)

TR[k++] = SR[j++];

}

//将SR[s...t]归并排序为TR1[s...t]

void MSort(int SR[], int TR1[], int s, int t) {

int m;

int TR2[10];

if(s == t)

TR1[s] = SR[s];

else

{

m = (s+t)/2; //SR[s...t]平分为SR[s...m]和SR[m+1...t]

MSort(SR,TR2,s,m); //递归地将SR[s...m]归并为有序的TR2[s...m]

MSort(SR,TR2,m+1,t); //递归地将

SR[m+1...t]归并为有序的TR2[m+1...t] Merge(TR2,TR1,s,m,t); //将TR2[s...m]和TR2[m+1...t]归并到TR1[s...t]

}

}

//主程序,供测试用

void main()

{

SqList l;

int i;

l.listsize = l.length = 10;

l.elem =

(int*)malloc(sizeof(int)*l.listsize); for(i=0; i

scanf("%d",&l.elem[i]);

MSort(l.elem,l.elem,0, l.length-1);

//for(i=0; i

// printf("%d ",l.elem[i]);

}

五、已知二叉树T的结点结构为

其中,bal存储结点的平衡因子(bal=左子树高度-右子树高度),试编写算法求树T中各结点的平衡因子。(12分)

typedef struct BiTNode

{

int data;

int bal;

struct BiTNode *left, *right; } BiTNode;

int GetHeight(BiTNode* t) {

int hl, hr;

if(t==NULL)

return 0;

else {

hl = GetHeight(t->left); hr = GetHeight(t->right); t->bal = hl-hr;

if(hl

return hr+1;

else

return hl+1;

}

}

六、设采用邻接表作为有向图的存储结构,试编写算法:计算有向图中每个顶点的出度和入度。(12分)

一、typedef struct ArcNode

{

int adjvex;

struct ArcNode *nextarc;

}ArcNode;

typedef struct VNode

{

int data;

int in;

int out;

ArcNode *firstarc;

} VNode; typedef struct

{

VNode vertices[NUM];

int vexnum;

int arcnum;

}AlGraph;

//获得结点的入度和出度

void GetInAndOut(AlGraph &g) //开始时所有结点的入度出度为0

{

int i;

ArcNode *p; for(i=0; i

二、填空题(每空2分,共20分)

1.提高程序可读性的措施

是:。

2.设n>0,且有如下程序段:

int i; i = n;

while (i>0) i=i/10;

则该程序的时间复杂性为___________________。

3.稀疏矩阵的压缩存储方法是。

4. 以数组Q[0..m]存放循环队列中的元素,变量rear和

qulen分别指示循环队列中队尾元素的实际位置和当前队

列中元素的个数,则队列第一个元素的实际位置

是。

5. 将序列(50,38,66,98,77,13,28,50)建立一个堆,

该堆是。

6. 下列函数的功能是实现两个字符串的比较,试根据字符串

比较运算的定义,完善该函数:

int strcmp(char s[ ], char t[ ])

{ int i;

for (i=0; s[i]&&t[i]; i++)

if (s[i]!=t[i]) __________________;

;

}

7.下列算法的功能是求带头结点的单链表的表长,请完善。

int count(LinkList head)

{ ; length=0;

while ( p!=NULL )

{ length++ ; ; }

;

}

1.设计良好的程序结构;函数名及变量名的命名规范化;使用合理的注释

2.O(log10N)

3.只存储非零元素(三元组表,十字链表)

4.(rear+m-qulen+2)

mod (m+1)

5.(13,38,28,50,77,6

6,50,98)

6.return s[i]-t[i]

return

strlen(s)-strlen(t)

7.p=head->next

p=p->next

return length

二.简要回答下列问题(共44分)

1.分别说明Huffman算法、Dijkstra算法、Prim算法、Kruskal算法的功能。(8分)

Huffman算法:求Huffman树(带权路

径长度最短的二叉树)

Dijkstra算法:求图中从某个源

点到其余各顶点的最短路径

Prim算法:求最小生成树

Kruskal算法:求最小生成树2.举例说明选择排序是不稳定的。(6分)

选择排序不稳定举例:

{256256*512128}i=1

{128256*512256}i=2

{128256*512256}i=3

{128256*256512}

256和256*在排序前后相对位置发生变化,所以说选择排序是不稳定的。

3.设有一个广义表L = ( a , ( ) , (x , ( y , z ) ), ( a , b ) ) ,试画出它

的存储结构。(6分)

4.图的存储方法主要有哪些?试举例说明它们的具体存储结构。(8分)

5.设一组关键字为(7,15,20,31,48,53,64,76,82,99),Hash函数H(key)= key % 11,Hash表表长m=11,用线性探测法解决冲突,试构造Hash表,并计算查找成功情况下的平均查找长度。(8分)

查找成功情况下的平均查找长度为(3+4+4+4+1+2+2+1+1+2)/10=2.4 6.时间复杂性为O(n log n)的排序方法有哪些?任选其中一种方法举例说明其排序过程。(8分)

快速排序,堆排序,归并排序

以归并排序说明:假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止.

举例如下

三.编写算法:从键盘读入一组整数,以9999作为结束标志,将这些数据建立一棵二叉排序树。(12分)

typedef struct BiTNode

{

TelemType data;

struct BiTNode *lchild, *rchild;

}BiTNode,*BiTree;

Status

SearchBST(BiTree T,KeyType key,BiTree

f,BiTree &p)

{

if(!T){p=f;return

FALSE;}

else if

EQ(key,T->data.key)

{p=T;return TRUE;}

else if

LT(key,T-> data.key)

SearchBST(T->lchild

,key,T,p);

else if

SearchBST(T->rchild

,key,T,p);

}

Staus

InsertBST(BiTree

&T,ElemType e)

{

if(!SearchBST(T,e.k ey,NULL,p)

{

s=(BiTree)malloc(si zeof(BiTNode));

s->data=e;s->lchild =s->rchild=NULL;

if(!p) T=s;

else if

LT(e.key,p->data.ke y)p->lchild=s;

else p->rchild=s; return TRUE;

}

else return

FALSE;

}

从空树出发,经过一

系列的查找插入操作

之后,可生成一棵二叉

树.

main()

{

BiTree

BiT=NULL;

int elememt;

scanf(“%d”,&eleme

nt);

while(element!=9999

)

{

InsertBST(BiT,eleme

nt);

scanf(“%d”,&eleme

nt);

}

}

四.已知二叉树T的结点结构为:

其中,bal存储结点的平衡因子(bal=左子树高度-右子树高度),试编写算法求树T中各结点的平衡因子。(12分)

typedef struct BiTNode

{

TelemType data;

struct BiTNode *left, *right;

int bal; }BiTNode,*BiTree;

int computbal(BiTree bt)

{

int hl, hr, max;

if(bt==NULL) return(0);

else {

hl=computbal(bt->LChild);/* 求左子树的深度 */

hr=computbal(bt->RChild);/* 求右子树的深度 */

bt->bal=hl-hr;/*求出平衡因子*/

max=hl>hr?hl:hr;/* 得到左、右子树深度较大者*/

return(max+1);/* 返回树的深度 */

}

}

五、试编写图的广度优先搜索(遍历)算法。(12分)void BFSTraverse(Graph G,Status

(*visit)(int v))

{

for (v=0;v

InitQueue(Q);

for(v=0;v

if(!visited[v])

{

visited[v]=TRUE;Visit(v);

EnQueue(Q,v); while(!QueueEmpty(Q))

{

DeQueue(Q,u); for(w=FirstAdjVex(G,u);w;w=NextAdjVex( G,u,w))

if(!Visited[w])

{

visited[w]=TRUE;Visit(w);

EnQueue(Q,w);

}

}

}

}

数据结构试题及答案10套

一、单选题(每题 2 分,共20分) 1. 1.对一个算法的评价,不包括如下(B )方面的内容。 A.健壮性和可读性B.并行性C。正确性D.时空复杂度 2.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.3.对线性表,在下列哪种情况下应当采用链表表示?( B ) A.经常需要随机地存取元素 B。经常需要进行插入和删除操作 C。表中元素需要占据一片连续的存储空间D.表中元素的个数不变 4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序 列的是( C ) A. 2 3 1 ??? B. 3 2 1 C。 3 1 2 ??? D. 1 23 5. 5.AOV网是一种(D )。 A.有向图B.无向图C.无向无环图D.有向无环图 6.6。采用开放定址法处理散列表的冲突时,其平均查找长度(B)。 A.低于链接法处理冲突B.高于链接法处理冲突C.与链接法处理冲突相同 D。高于二分查找 7.7。若需要利用形参直接访问实参时,应将形参变量说明为(D ) 参数. A。值B。函数 C.指针 D。引用 8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结 点都具有相同的( A )。 A。行号 B.列号 C.元素值 D.非零元素个数 9.9.快速排序在最坏情况下的时间复杂度为( D )。 A。O(log 2n) B.O(nlog 2 n) C。0(n) D.0 (n2) 10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( C ). A.O(n) B. O(1) C。 O(log 2 n) D. O(n2)二、运算题(每题 6 分,共24分)

数据结构试卷带答案

数据结构试卷(一) 一、选择题(20分) 1.组成数据的基本单位是( 1.C )。 (A) 数据项(B) 数据类型(C) 数据元素(D) 数据变量 2.设数据结构A=(D,R),其中D={1,2,3,4},R={r},r={<1,2>,<2,3>,<3,4>,<4,1>},则数据结构A是( C )。 (A) 线性结构(B) 树型结构(C) 图型结构(D) 集合 3.数组的逻辑结构不同于下列(D)的逻辑结构。 (A) 线性表(B) 栈(C) 队列(D) 树 4.二叉树中第i(i≥1)层上的结点数最多有(C)个。 (A) 2i (B) 2i(C) 2i-1(D) 2i-1 5.设指针变量p指向单链表结点A,则删除结点A的后继结点B需要的操作为(.A )。 (A) p->next=p->next->next (B) p=p->next (C) p=p->next->next (D) p->next=p 6.设栈S和队列Q的初始状态为空,元素E1、E2、E3、E4、E5和E6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出列的顺序为E2、E4、E3、E6、E5和E1,则栈S的容量至少应该是(.C )。 (A) 6 (B) 4 (C) 3 (D) 2 7.将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为(C )。 (A) 100 (B) 40 (C) 55 (D) 80 8.设结点A有3个兄弟结点且结点B为结点A的双亲结点,则结点B的度数数为(8.B (A) 3 (B) 4 (C) 5 (D) 1 9.根据二叉树的定义可知二叉树共有(B)种不同的形态。 (A) 4 (B) 5 (C) 6 (D) 7 10.设有以下四种排序方法,则(B )的空间复杂度最大。 (A) 冒泡排序(B) 快速排序(C) 堆排序(D) 希尔排序 二、填空题(30分) 1.设顺序循环队列Q[0:m-1]的队头指针和队尾指针分别为F和R,其中队头指针F指向当前队头元 素的前一个位置,队尾指针R指向当前队尾元素所在的位置,则出队列的语句为F =____________;。 2.设线性表中有n个数据元素,则在顺序存储结构上实现顺序查找的平均时间复杂度为___________, 在链式存储结构上实现顺序查找的平均时间复杂度为___________。 3.设一棵二叉树中有n个结点,则当用二叉链表作为其存储结构时,该二叉链表中共有________个指 针域,__________个空指针域。 4.设指针变量p指向单链表中结点A,指针变量s指向被插入的结点B,则在结点A的后面插入结点 B的操作序列为______________________________________。 5.设无向图G中有n个顶点和e条边,则其对应的邻接表中有_________个表头结点和_________个表 结点。 6.设无向图G中有n个顶点e条边,所有顶点的度数之和为m,则e和m有______关系。 7.设一棵二叉树的前序遍历序列和中序遍历序列均为ABC,则该二叉树的后序遍历序列为__________。 8.设一棵完全二叉树中有21个结点,如果按照从上到下、从左到右的顺序从1开始顺序编号,则编 号为8的双亲结点的编号是___________,编号为8的左孩子结点的编号是_____________。 9.下列程序段的功能实现子串t在主串s中位置的算法,要求在下划线处填上正确语句。 int index(char s[ ], char t[ ]) { i=j=0; while(i

数据结构期末考试试题及答案

《数据结构》期末考试试题及答案 (2003-2004学年第2学期) 单项选择题1、C 2、D 3、A 4、D 5、C 6、D 7、A 8、B 9、C 10、C 、 1. 对于一个算法,当输入非法数据时,也要能作出相应的处理,这种要求称为 (c )。 (A)、正确性但).可行性(C).健壮性 2 ?设S为C语言的语句,计算机执行下面算法时, for(i=n-1 ; i>=0; i--) for(j=0 ; jvi; j++) (A)、n2(B). O(nlgn) 3?折半查找法适用于( a (D). 输入性 算法的时间复杂度为(d S; (C). O(n) (D). )。 O(n2) (A)、有序顺序表(B)、有序单链表 (C)、有序顺序表和有序单链表都可以 4 .顺序存储结构的优势是( d )。 (A)、利于插入操作(B)、利于删除操作 (C)、利于顺序访问(D)、利于随机访问 5. 深度为k的完全二叉树,其叶子结点必在第 (A)、k-1 ( B)、k (C)、k-1 和 6. 具有60个结点的二叉树,其叶子结点有 (A)、11 ( B)、13 ( C)、48 (D)、无限制 c )层上。 (D)、1 至 k 12个,则度过1 (D)、37 k 的结点数为( 7 .图的Depth-First Search(DFS) 遍历思想实际上是二叉树( 法的推广。 (A)、先序(B)、中序(C)、后序(D)、层序 8.在下列链队列Q中,元素a出队的操作序列为( a )遍历方 front (A )、 (B )、 (C)、 (D )、p=Q.front->next; p->next= Q.front->next; p=Q.front->next; Q.front->next=p->next; p=Q.rear->next; p->next= Q.rear->next; p=Q->next; Q->next=p->next; 9. Huffman树的带权路径长度WPL等于( (A)、除根结点之外的所有结点权值之和(C)、各叶子结点的带权路径长度之和(B) 、 ) 所有结点权值之和 根结点的值 b ■

数据结构试题及答案

数据结构试题? 一、?单选题(每题 2 分,共20分) 1.1.???? 对一个算法的评价,不包括如下( B )方面的内容。 A.健壮性和可读性B.并行性 C.正确性 D.时空复杂度 2.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.3.???? 对线性表,在下列哪种情况下应当采用链表表示?( B ) A.经常需要随机地存取元素 B.经常需要进行插入和删除操作 C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变 4.4.???? 一个栈的输入序列为 1 2 3,则下列序列中不可能是栈的输出序列的是 ( C ) A. 2 3 1 B. 3 2 1 C. 3 1 2 D. 1 2 3 5.5.???? AOV网是一种( D )。 A.有向图 B.无向图 C.无向无环图D.有向无环图 6.6.???? 采用开放定址法处理散列表的冲突时,其平均查找长度( B )。 A.低于链接法处理冲突 B. 高于链接法处理冲突 C.与链接法处理冲突相同 D.高于二分查找 7.7.???? 若需要利用形参直接访问实参时,应将形参变量说明为( D )参数。 A.值 B.函数 C.指针 D.引用 8.8.???? 在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有 相同的( A )。 A.行号B.列号 C.元素值 D.非零元素个数 9.9.???? 快速排序在最坏情况下的时间复杂度为( D )。 A.O(log 2n) B.O(nlog 2 n) C.O(n) D.O(n2) 10.10. 从二叉搜索树中查找一个元素时,其时间复杂度大致为( C )。 A. O(n) B. O(1) C. O(log 2 n) D. O(n2) 二、运算题(每题 6 分,共24分) 1. 1.?数据结构是指数据及其相互之间的_对应关系(联系)。当结点之间存在M对N(M: N)的联系时,称这种结构为图(或图结构)。 2. 2.队列的插入操作是在队列的__队尾___进行,删除操作是在队列的_对头_进行。 3. 3.??当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈 满的条件是_top==0__。 4. 4.???对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为

数据结构试卷带答案

数据结构试卷带答案 问题说明 部分题目或答案有问题,现将已经发现的公布如下,同学在作这些模拟题的时候应着重做题方法的理解,遇到问题以教材或课件为准,不确定的地方可找同学商量或问我 (1)试卷1第一套填空题第1题,试卷1第2套选择题第3题关于循环队列队头指针和队尾指针的约定与教材不一致,以教材或课件为准,实际上front指向的是队头元素,rear指向当前尚未被占用的第一个队列空间,队慢或队空的判定条件及入队/出队等操作具体可参考课件或教材 (2)试卷1第一套应用题第5题,不声明邻接点顺序时默认编号最小的邻接点为第一邻接点,该图的深度优先遍历序列为123465,答案错。此外,当给定邻接表时则邻接点顺序按照邻接表中的前后顺序确定,如试卷1第二套填空题第8题 (3)试卷1第五套应用题第4题,两种方法处理冲突的方法下所求ASL值相等都为7/6 (4)试卷1第五套填空题第8题答案给出的是小顶堆需满足的条件,大顶堆满足ki>=k2i p->rlink->llink=p->llink;此外,注意课堂中讲的指针名和操作方法 (12)第4套填空题第6题答案错,设哈夫曼树中共有99个结点,则该树中有____50_____个叶子结点;若采用二叉链表作为存储结构,则该树中有__100___个空指针域。

(13)第5套选择第8题答案应为A:设连通图G中的边集E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},则从顶点a出发可以得到一种深度优先遍历的顶点序列为(A) abedfc (14)第5套应用题第3题题目未指明查找方法,没法作 (15)第6套选择第5题应选B,实际是任意结点至多只有一个孩子:设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是(B) 高度等于其结点数 (16)第7套填空1题问题本身错,设指针变量p指向双向链表中的结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X的操作序列为____s->left_____=p;s->right=p->right;___p->right_______=s;s->right->left=s;(设结点中的两个指针域分别为left和right)。(17)第8套填空题第8题答案错 (18)第7套选择第3题题目错,应以60为基准关键字,答案为C.设一组初始记录关键字序列为(60,80,55,40,42,85),则以第一个关键字60为基准而得到的一趟快速排序结果是()。 (C) 42,40,55,60,80,85 (17)第6套填空9题.快速排序算法的空间复杂度平均情况下为_O(logn)_,最坏的情况下为_O(n)_。(18)第9套填空第3题,题目说循环队列有m个元素实际指循环队列总长为m,此外,该题关于队头和队尾指针的约定不同于教材 (19)第9套填空第4题答案错,9个元素冒泡排序,第一趟比较次数为8,最多8趟

数据结构试卷和答案

《数据结构》试题参考答案 (开卷) (电信系本科2001级 2002年12月) 一、回答下列问题 (每题4分,共36分) 1. 某完全二叉树共有15381个结点,请问其树叶有多少个? 答:n2=?n/2?=?15381/2?=7691(个) 2. 假设有二维数组A 7×9,每个元素用相邻的6个字节存储,存储器按字节编址。已知A 的起始存储位置(基地址)为1000,末尾元素A[6][8]的第一个字节地址为多少?若按列存储时,元素A[4][7]的第一个字节地址为多少? 答:① 末尾元素A[6][8]的第一个字节地址=1000+(7行×9列—1)×6B =1000+62×6=1372 ②按列存储时,元素A[4][7]的第一个字节地址=1000+(7列×7行+4)×6B =1000+53×6=1318 3. 在KMP 算法中,已知模式串为ADABBADADA ,请写出模式串的next[j]函数值。 答:根据 0 当j =1时 next[ j ]= max { k |1

数据结构习题与答案

第 1 章绪论 课后习题讲解 1. 填空 ⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 【解答】数据元素 ⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。 【解答】数据项,数据元素 【分析】数据结构指的是数据元素以及数据元素之间的关系。 ⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。 【解答】集合,线性结构,树结构,图结构 ⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。 【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系 ⑸算法具有五个特性,分别是()、()、()、()、()。 【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性 ⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。 【解答】自然语言,程序设计语言,流程图,伪代码,伪代码 ⑺在一般情况下,一个算法的时间复杂度是()的函数。 【解答】问题规模 ⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。 【解答】Ο(1),Ο(nlog2n) 【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。 2. 选择题 ⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 【解答】C,D 【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

数据结构试题及答案

第一章概论 一、选择题 1、研究数据结构就是研究(D)。 A. 数据的逻辑结构?B。数据的存储结构 C。数据的逻辑结构和存储结构?D.数据的逻辑结构、存储结构及其基本操作(研究非数值计算的程序设计问题中,计算机操作对象以及他们之间的关系和操作) 2、算法分析的两个主要方面是(A)。 A.空间复杂度和时间复杂度???B。正确性和简单性 C。可读性和文档性D.数据复杂性和程序复杂性 3、具有线性结构的数据结构是( D )。(线性结构就是:在非空有限集合中,存在为一个被称为第一个的数据元素和最后一个元素,有除了第一个元素,集合中每一个元素均只有一个前驱,除了最后一个元素有唯一后继)(链表、栈、队列、数组、串) A. 图B. 树??C.广义表(线性表的推广) D.栈 4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、( B )等5个特性。 A.可执行性、可移植性和可扩充性? B. 可执行性、有穷性和确定性 C。确定性、有穷性和稳定性??? D. 易读性、稳定性和确定性 5、下面程序段的时间复杂度是( C )。 for(i=0;i

数据结构试题(含答案)

一.是非题 (正确的打“√”,错误的打“×”。) 1. 数据结构可用三元式表示(D,S,P)。其中:D是数据对象,S是D上的关系, P是对D的基本操作集。× 2. 线性表的链式存储结构具有可直接存取表中任一元素的优点。× 3. 字符串是数据对象特定的线性表。 4. 二叉树是一棵结点的度最大为二的树。× 5.邻接多重表可以用以表示无向图,也可用以表示有向图。× 6.可从任意有向图中得到关于所有顶点的拓扑次序。× 7.一棵无向连通图的生成树是其极大的连通子图。× 8.二叉排序树的查找长度至多为log2n。× 9.对于一棵m阶的B-树.树中每个结点至多有m 个关键字。除根之外的所有非终端结点至少有┌m/2┐个关键字。× 10.对于目前所知的排序方法,快速排序具有最好的平均性能。 11. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。× 12. 二维数组是其数据元素为线性表的线性表。 13. 连通图G的生成树是一个包含G的所有n个顶点和n-1条边的子图。× 14. 折半查找不适用于有序链表的查找。 15. 完全二叉树必定是平衡二叉树。 16. 中序线索二叉树的优点是便于在中序下查找直接前驱结点和直接后继结点。 17. 队列是与线性表完全不同的一种数据结构。× 18. 平均查找长度与记录的查找概率有关。 19. 二叉树中每个结点有两个子结点,而对一般的树,则无此限制,所以,二叉树是树的特殊情形。× 20. 算法的时间复杂性越好,可读性就越差;反之,算法的可读性越好,则时间复杂性就越差。× 二.选择题 1. 若对编号为1,2,3的列车车厢依次通过扳道栈进行调度,不能得到 ( e ) 的序列。 a:1,2,3 b:1,3,2 c:2,1,3 d:2,3,1 e:3,1,2 f:3,2,1 2. 递归程序可借助于( b )转化为非递归程序。 a:线性表 b: 栈 c:队列 d:数组 3. 在下列数据结构中( c )具有先进先出(FIFO)特性, ( b )具有先进后出(FILO)特性。 a:线性表 b:栈 c:队列 d:广义表 4. 对字符串s=’data-structure’ 执行操作replace(s,substring(s,6,8),’bas’)

数据结构试卷B卷(含答案)

《数据结构》试卷B 一、填空题(每空1分,共15分) 1. 向量、栈和队列都是结构,可以在向量的位置插入和删除元素;对于栈 只能在插入和删除元素;对于队列只能在插入和删除元素。 2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为。不允许插入和删除 运算的一端称为。 3. 数据结构是一门研究非数值计算的程序设计问题中计算机的以及它们之间 的和运算等的学科。 4. 在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。 5. 在具有n个单元的循环队列中,队满时共有个元素。 6. 假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查 找成功的结点数为;比较四次查找成功的结点数为;平均查找长度为。 二、判断正误(判断下列概念的正确性,并作出简要的说明。)(每小题1分,共10分) ()1. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。()2. 在表结构中最常用的是线性表,栈和队列不太常用。 ()3. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。 ()4. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。()5.线性表的逻辑顺序与存储顺序总是一致的 ()6. 栈和队列是一种非线性数据结构。 ()7. 栈和队列的存储方式既可是顺序方式,也可是链接方式。 ()8. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。 ()9. 队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。

数据结构试题(含答案)

数据结构试题(含答案) 1.数据逻辑结构包括线性结构、树形结构和图状结构三种类型,树形结构和图状结构合称非线性结构 2.数据的逻辑结构分为集合、线性结构、树形结构和图状结构 4种。 3.在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有 1 个前驱结点;最后一个结点没有后续结点,其余每个结点有且只有 1 个后续结点。 4.线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。 5.在树形结构中,树根结点没有前驱结点,其余每个结点有且只有 1 个前驱结点;叶子结点没. 6.数据结构的基本存储方法是顺序、链式、索引和散列存储。有后续结点,其余每个结点的后续结点可以任意多个。 7.衡量一个算法的优劣主要考虑正确性、可读性、健壮性和时间复杂度与空间复杂度。8.评估一个算法的优劣,通常从时间复杂度和空间复杂度两个方面考察。 9.算法的5个重要特性是有穷性、确定性、可行性、输入和输出。 10.在单链表中,要删除某一指定的结点,必须找到该结点的前驱结点。 11.在单链表中,要删除某一指定的结点,必须找到该结点的前驱结点。 12.在双链表中,每个结点有两个指针域,一个指向前驱结点,另一个指向后继结点。13.在顺序表中插入或删除一个数据元素,需要平均移动 n 个数据元素,移动数据元素的个数与位置有关 14.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表的元素是,应采用顺序存储结构 15.根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成单链表和双链表。 16.顺序存储结构是通过下标表示元素之间的关系的;链式存储结构是通过指针表示元素之间的关系的 17.带头结点的循环链表L中只有一个元素结点的条件是 L->next->next=L 18.栈是限定仅在表尾进行插入或删除操作的线性表,其运算遵循后进先出的原则。19.空串是零个字符的串,其长度等于零。空白串是由一个或多个空格字符组成的串,其长度等于其包含的空格个数。 20.组成串的数据元素只能是单个字符。 21.一个子串”str”在主串”datastructure”中的位置是 5 。 22.字符串中任意个连续字符构成的部分称为该串的子串。 23.二维数组M的每个元素是6个字符组成的串,行下标i的范围从0到8,列下标j的范围从1到10,则存放M至少需要 540个字节;M的第8列和第5行共占108个字节24.稀疏矩阵一般的压缩存储方法有两种,即三元组表和十字链表。 25.广义表((a),((b),c),(((d))))的长度是 3 ,深度是 4 。 26.在一棵二叉树中,度为零的结点的个数为n0,度为2 的结点的个数为n2,则有n0= n2+1 。 27.在有n个结点的二叉链表中,空链域的个数为__n+1__。 28.一棵有n个叶子结点的哈夫曼树共有__2n-1_个结点 29.深度为5的二叉树至多有 31 个结点。 30.若某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点个数为69 。

十套数据结构试题与答案

数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 (一) (二) (三) (四) (五) (六) (七 )(八 ) (九 ) (十 ) 9 12 15 17 19 21 24 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 (一) (二) (三 ) (四 ) (五 ) (六) (七) (八) (九) (十 ) 27 28 29 31 33 35 37 38 39 40 数据结构试卷(一) 、单选题(每题 栈和队列的共同特点是(A ) 。 A. 只允许在端点处插入和删除元素 B. 都是先进后出 C. 都是先进先出 D. 没有共同点 用链接方式存储的队列,在进行插入运算时 (C ). 头、尾指针都要修改 头、尾指针可能都要修改 (D ) 线性表 2分,共20分) 1. 2. A. C. 3. A. 4. 仅修改头指针 B. 仅修改尾指针 D. 以下数据结构中哪一个是非线性结构? 队列 B.栈 C. 设有一个二维数组 A[m][ n],假设 个空间,问 676(10),每个元素占 制表示。 .688 D. 二叉树 A[2][2]存放位置在 (10)存放在什么位置?脚注(10)表示用10进 A[0][0] 存放位置在644(10), A[3][3] .678 C C ) 。 B. A 5.树最适合用来表示( A.有序数据元素 C.元素之间具有分支层次关系的数据 二叉树的第k 层的结点数最多为(D ). k .2 -1 B.2K+1 C.2K-1 若有18个元素的有序表存放在一维数组 6. A 7. 692 D . 696 D. 无序数据元素 乙间无联系的数 据 元素之 f k-1 D. 2 A[19]中,第一个元素放 A[1]中,现进行二 分查找,则查找 A : 3 ]的比较序列的下标依次为 (C ) A. 1 , 2, 3 B. 9 , 5, 2, 3 C. 9 , 5, 3 D. 9 , 4, 2, 3 对n 个记录的文件进行快速排序,所需要的辅助存储空间大致为 D. O 8. A. O (1) B. O (n ) C. O (1og 2n ) D. O (n2) 9. 对于线性表(7, 34, 55, 25, 64, 46, 20, 10)进行散列存储时,若选用 H (K ) =K %9作为散列函数,则散列地址为 1的元素有(D )个, A . 1 B . 2 C . 3 10. 设有6个结点的无向图,该图至少应有 ( A.5 B.6 C.7 D.8 二、填空题(每空 1分,共26分) 1.通常从四个方面评价算法的质量: _ 高效率 _______ 和―强壮性 _______ 。 1. 一个算法的时间复杂度为(n 3 +nlog 2n+14n)/ n 2 ,其数量级表示为 —o(n) ____________________ 。 2. 假定一棵树的广义表表示为 A (C, D (E , F , G , H( I , J )),则树中所含的结点数为 __________ 个,树的深度为 ____________ ,树的度为 ___________ 。 .4 条边才能确保是一个连通图。 正确性 易读性

数据结构试题及答案

一、判断题: 1、线性表的逻辑顺序与物理顺序总是一致的。( ) 2、线性表的顺序存储表示优于链式存储表示。( ) 3、线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。( ) 4、二维数组是其数组元素为线性表的线性表。( ) 5、每种数据结构都应具备三种基本运算:插入、删除和搜索。( ) 6、数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运算三个 方面。( ) 7、线性表中的每个结点最多只有一个前驱和一个后继。() 8、线性的数据结构可以顺序存储,也可以链接存储。非线性的数据结构只能链接存储。() 9、栈和队列逻辑上都是线性表。() 10、单链表从任何一个结点出发,都能访问到所有结点() 11、删除二叉排序树中一个结点,再重新插入上去,一定能得到原来的二叉排序树。() 12、快速排序是排序算法中最快的一种。() 13、多维数组是向量的推广。() 14、一般树和二叉树的结点数目都可以为0。() 15、直接选择排序是一种不稳定的排序方法。() 16、98、对一个堆按层次遍历,不一定能得到一个有序序列。() 17、在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。() 18、折半搜索只适用与有序表,包括有序的顺序表和有序的链表。() 19、堆栈在数据中的存储原则是先进先出。() 20、队列在数据中的存储原则是后进先出。() 21、用相邻矩阵表示图所用的存储空间大小与图的边数成正比。() 22、哈夫曼树一定是满二叉树。() 23、程序是用计算机语言表述的算法。() 24、线性表的顺序存储结构是通过数据元素的存储地址直接反映数据元素的逻辑关系。() 25、用一组地址连续的存储单元存放的元素一定构成线性表。() 26、堆栈、队列和数组的逻辑结构都是线性表结构。() 27、给定一组权值,可以唯一构造出一棵哈夫曼树。() 28、只有在初始数据为逆序时,冒泡排序所执行的比较次数最多。()

数据结构试卷及答案压缩版

《数据结构》试卷及答案 1.算法分析的目的是( )。 A.找出数据结构的合理性 B.研究算法中输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2.()是具有相同特性数据元素的集合,是数据的子集。 A.数据符号 B.数据对象 C.数据 D.数据结构 3.用链表表示线性表的优点是( )。 A.便于随机存取 B.花费的存储空间比顺序表少 C.便于插入与删除 D.数据元素的物理顺序与逻辑顺序相同 4.输入序列为(A,B,C,D)不可能的输出有()。 A.(A,B,C,D) B. (D,C,B,A) C. (A,C,D,B) D . (C,A,B,D) 5.在数组表示的循环队列中,front、rear分别为队列的头、尾指针,maxSize为数组的最大长度,队满的条件是( )。 A. front=maxSize B. (rear+1)%maxSize=front C. rear=maxSize D. rear=front 6.设有串t='I am a good student ',那么Substr(t,6,6)=()。 A. student B. a good s C. good D. a good 7.设有一个对称矩阵A,采用压缩存储方式,以行序为主序存储a11为第一个元素,其存储地址为1,每个元素占一个地址空间,则a85地址为()。 A.23 B.33 C.18 D. 40 8.已知广义表LS=(A,(B,C,D),E)运用head和tail函数,取出LS中原子b的运算()。 A. Gethead(Gethead(LS)) B. Gettail(Gethead(LS)) C. Gethead(Gethead(Gettail(LS))) D. Gethead(Gettail(LS)) 9.若已知一棵二叉树先序序列为ABCDEFG,中序序列为CBDAEGF,则其后序序列为( ) A. CDBGFEA B. CDBFGEA C. CDBAGFE D. BCDAGFE 10.下列存储形式中,( ) 不是树的存储形式。 A.双亲表示法 B.左子女右兄弟表示法 C.广义表表示法 D.顺序表示法 11.对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。这样的排序方法是( )。 A.直接选择排序 B.直接插入排序 C.快速排序 D.起泡排序 12.采用折半查找方法进行查找,数据文件应为(),且限于()。

数据结构习题及答案

第一章 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==null B head->next==null C head->next==head D 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.链表中的每个链结点占用的存储空间不必连续,这句话正确吗? (不正确) 11. 某线性表采用顺序存储结构,元素长度为4,首地址为100,则下标为12的(第13个)元素的存储地址为148。V 100+4*12=148 11.在顺序表的(最后一个结点之后)插入一个新的数据元素不必移动任何元素。 12.若对线性表进行的操作主要不是插入删除,则该线性表宜采用(顺序)存储结构,若频繁地对线性表进行插入和删除操作,则该线性表宜采用( 链 )存储结构。

数据结构试题及答案.docx

数据结构试题及答案 一、选择题(每小题2分,共20分),每个题的备选答案中,只有一个是正确的,请将答案填写在试题的括号中。 1、对顺序存储的线性表,设其长度为20,在任何位置上插入或删除操作都是 等概率的。插入一个元素时平均要移动表中的( A )个元素。 A.10 B.9 C.11 D.12 2、若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。 A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表 3、当利用大小为n的数组顺序存储一个栈时,假定用top==n表示栈空,则向这个栈插入一个元素时,首先应执行( B )语句修改top指针。 A.top++ B.top-- C.top = 0 D.top 4、设入栈顺序为A,B,C,D,E,则出栈序列不可能是( C )。A.EDCBA B.ABCDE C.ADEBC D.ABDEC 5、已知关键字序列(46, 79, 56, 38, 40, 84),采用快速排序(以位于最左位 置的关键字为基准)得到的第一次划分结果为:( A ) A.{ 40, 38, 46, 56, 79, 84 } B.{ 38, 46, 79, 56, 40, 84 } C.{ 38, 46, 56, 79, 40, 84 } D.{ 40, 38, 46, 79, 56, 84 } 6、一个有n个顶点和n条边的无向图一定是( C )。 A.不连通的 B.连通的 C.有环的 D.无环的 7、在一棵具有n个结点的二叉树的第i层上,最多具有( B )个结点。 A.2i B.2i-1 C.2i+1 D.2n 8、对线性表采用折半查找法,该线性表必须( B )。 A.采用顺序存储结构B.采用顺序存储结构,且元素按值有序 C.采用链式存储结构 D.采用链式存储结构,且元素按值有序 9、在一棵具有n个结点的完全二叉树中,分支结点的最大编号为( C )。A.?(n-1)/2? B.?n/2? C.?n/2? D.?n/2? -1 10、在一个无向图中,所有顶点的度数之和等于所有边数的 ( D ) 倍。 A.3 B.1/2 C.1 D.2 二、填空题(每小题2分,共20分),请将正确的结果,填写在试题的横线上。 1、带头结点的循环链表L为空的条件是。 2、序列A={12, 70, 33, 65, 24, 56}给出对应于序列A的大顶堆HA(以线性数 组表示)。 3、每次使两个相邻的有序表合并成一个有序表,这种排序方法叫做________ 排序。 4、设循环队列Q的队头和队尾指针分别为front和rear,队列的最大容量为MaxSize,且规定判断队空的条件为Q.front = = Q.rear,则队列的长度 为。 5、已知数组A[0..11][0..8]按行优先存储,每个元素占有5个存储单元,且 A[0][0]的地址为1000(十进制),则A[6][7]的地址为________________。 6、已知广义表A=(a,(),(b,(c))),则其深度为。 7、在一棵二叉树中,假定度为2的结点个数为5个,度为1的结点个数为6 个,则叶子结点数为__ ____个。

数据结构试卷1(含答案)

数据结构试卷 一、单项选择题(本大题共15小题,每小题2分,共30分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.下列选项中与数据存储结构无关的术语是() A.顺序表 B.链表 C.链队列 D.栈 2.将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是() A.n-1 B.n C.2n-1 D.2n 3.已知循环队列的存储空间大小为m,队头指针front指向队头元素,队尾指针rear指向队尾元素的下一个位置,则向队列中插入新元素时,修改指针的操作是() A.rear=(rear-1)%m; B.front=(front+1)%m; C.front=(front-1)%m; D.rear=(rear+1)%m; 4.递归实现或函数调用时,处理参数及返回地址,应采用的数据结构是() A.堆栈 B.多维数组 C.队列 D.线性表 5.设有两个串p和q,其中q是p的子串,则求q在p中首次出现位置的算法称为() A.求子串 B.串联接 C.串匹配 D.求串长 6.对于广义表A,若head(A)等于tail(A),则表A为() A.( ) B.(( )) C.(( ),( )) D.(( ),( ),( )) 7.若一棵具有n(n>0)个结点的二叉树的先序序列与后序序列正好相反,则该二叉树一定是() A.结点均无左孩子的二叉树 B.结点均无右孩子的二叉树 C.高度为n的二叉树 D.存在度为2的结点的二叉树 8.若一棵二叉树中度为l的结点个数是3,度为2的结点个数是4,则该二叉树叶子结点的个数是() A.4 B.5 C.7 D.8 9. 某算法有3个程序段,第一程序段的执行次数为错误!未找到引用源。,第二个程序段执行次数为4n,第三个程序段的执行次数为0.06错误!未找到引用源。,则该算法的时间复杂度为()。 A.O(n) B.O(错误!未找到引用源。) C.O(错误!未找到引用源。) D.O (错误!未找到引用源。) 10.已知有向图G=(V,E),其中V={V1,V2,V3,V4},E={},图G的拓扑序列是() A.V1,V2,V3,V4 B.V1,V3,V2,V4 C.V1,V3,V4,V2 D.V1,V2,V4,V3 11.平均时间复杂度为O(n log n)的稳定排序算法是() A.快速排序 B.堆排序 C.归并排序 D.冒泡排序 12.已知关键字序列为(51,22,83,46,75,18,68,30),对其进行快速排序,第一趟划分完成后的关键字序列是() A.(18,22,30,46,51,68,75,83) B.(30,18,22,46,51,75,83,68) C.(46,30,22,18,51,75,68,83) D.(30,22,18,46,51,75,68,83) 13.某索引顺序表共有元素395个,平均分成5块。若先对索引表采用顺序查找,再对块中元素进行顺序查找,则在等概率情况下,分块查找成功的平均查找长度是()

相关文档
最新文档