02331数据结构课后练习题

第1章概论

练习题

一、单项选择题

1.在数据结构中,从逻辑上可以把数据结构分为(B)

A.紧凑结构与非紧凑结构

B.线性结构与非线性结构

C.内部结构与外部结构

D.动态结构与静态结构

2.若结点得存储地址与其关键字之间存在某种映射关系,则称这种存储结构为(D)

A.顺序存储结构

B.链式存储结构

C.索引存储结构

D.散列存储结构

3.算法分析得两个主要方面就是(B)

A.正确性与简明性

B.时间复杂性与空间复杂性

C.可读性与可维护性

D.数据复杂性与程序复杂性

4.线性表采用链式存储结构时,要求内存中可用存储单元地址(A)

A.不一定连续得

B.部分地址必须就是连续得

C.必须就是连续得

D.一定就是不连续得

5.算法指得就是(C)

A.计算机程序

B.解决问题得计算方法

C.解决问题得有限运算序列

D.排序算法

二、填空题

6.数据结构一般包括逻辑结构、存储结构与数据运算三个方面得内容.

7.数据得逻辑结构可分为线性结构、非线性结构两大类.

8.数据得存储结构(物理结构)一般可以用顺序存储结构、链式存储结构、索引存储结构及散列存储结构等四种存储方法表示.

9.在选用求解一个问题得算法时,除了首先考虑算法就是“正确得”之外,还主要考虑执行算法所需要得时间、执行算法所需要得存储空间及算法应易于理解、易于编程、易于调试等三点。

10.设有一批数据元素,为了最快地存取某元素,宜用顺序结构存储,为了方便得插入一个元素,宜用链式结构存储.

三、应用题

设n为正整数,利用大“O”记号,写出下列各程序段得时间复杂度.

11.for (i = 1; i <= n; i++){

y = y + 1;

for (j = 1; j <= 2 * n; j++)

x = x + 1;

}

分析:语句“y = y + 1;”执行n次,语句“x = x + 1;”各执行次,故该程序段得时间复杂度为O().

12.s = 0;

while (n >= (s + 1) * (s + 1))

s = s + 1;

分析:语句“s = s + 1;”执行次,故该程序段得时间复杂度为O().

13.x = 1;

sum = 0;

for (i = 0; i <= n; i++){

x = x * i;

sum = sum + x;

}

分析:语句“x = x * i”与“sum = sum + x;”各执行n次,故该程序段得时间复杂度为O(n).

14.for (i = 1; i <= n; i++)

if (3 * i <=n)

for (j = 3 * i; j <= n; j++){

x++;

y = 3 * x + 2;

}

分析:语句“x++”与“y = 3 * x + 2;”各执行次,故该程序段得时间复杂度为O().

15.for (i = 1; i <= n; i++)

for (j = 1; j <= i; j++){

x = x + 1;

}

分析:语句“x = x + 1;”执行次,故该程序段得时间复杂度为O().

16.sum = 0; i = 0;

while (i <= 100){

sum = sum + i;

i++;

}

分析:语句“sum = sum + i;”与“i++;”各执行100次,故该程序段得时间复杂度为O(1).

17.x = 1;

s = 0;

for (i = 1; i <= n; i++){

++x;

s += x;

}

for (j = 1; j <= n; j++)

for (k = 1; k <= n; k++){

x++;

s = s + x;

}

分析:语句“++x;”执行n次,语句“x++;”与“s = s + x;”各执行次,故该程序段得时间复杂度为O().

第2章线性表

练习题

一、单项选择题

1.在长度为n得顺序表得第i个位置上插入一个元素,元素得移动次数为(A)

A. B. C. D.

2.若一个顺序表中第一个元素得存储地址为1000,每个元素占4个地址单元,那么,第6个元素得存储地址应就是(A)

A.1020

B.1010

C.1016

D.1024

3.带头结点得单链表(以head为头指针)为空得判断条件就是(C)

A.head != NULL

B.head -> next == head

C.head -> next == NULL

D.head == NULL

4.在单循环链表中,p指向表任一结点,判断表不就是访问结束得条件就是(B)

A.p != NULL

B.p != head

C.p -> next != head

D.p -> next != NULL

5.在一个单链表中,已知q指向p所指向结点得前趋结点,若在p、q所指结点之间插入一个s所指向得新结点,则执行得操作就是(A)

A.q -> next = s; s -> next = p

B.p -> next = s; s -> next = q

C.s -> next = p -> next; p -> next = s

D.p -> next = s -> next; s -> next = p

6.在一个单链表中,若删除p指向结点得后继结点,则执行得操作就是(A)

A.q = p -> next; p -> next = p -> next -> next; free(q);

B.p = p -> next; q = p -> next; p = q -> next; free(q);

C.q = p -> next -> next; p = p -> next; free(q);

D.p = p -> next -> next; q = p -> next; free(q);

二、填空题

7.在一个长度为n得顺序表中删除第i个元素,需要向前移动n- i个元素.

8.在顺序表中插入或删除一个元素,需要平均移动表长得一半个元素,具体移动得元素个数与插入或删除得位置有关.

9.顺序表中逻辑上相邻得元素在物理存储位置上一定相邻,链表结构中逻辑上相邻得元素在物理位置上不一定相邻.

10.已知顺序表中一个元素得存储位置就是x,每个元素占c个字节,求其后继元素位置计算公式为x+ c,而已知单链表中某一结点由p指向,求此后继结点存储地址得操作为p -> next.

11.在用p指针访问单链表时,判断不就是访问结束得条件就是p != NULL;在访问单循环链表时,判断不就是访问表结束得条件就是p != head.

12.已知p指向双向链表得中间某个结点,从给定得操作语句中选择合适得填空.

(1)在p结点后插入s结点得语句序列就是I、G、A、D.

(2)在p结点前插入s结点得语句序列就是C、N、H、B.

(3)删除p结点得直接后继结点得语句序列就是J、Q、E、M.

(4)删除p结点得直接前趋结点得语句序列就是K、P、F、M.

(5)删除p结点得语句序列就是O、R、L.

A.p -> next = s

B.p -> prior = s

C.s -> next = p

D.s -> prior = p

E.p -> next = p -> next -> next

F.p -> prior = p -> prior -> prior

G.p -> next -> prior = s H.p -> prior -> next = s I.s -> next = p -> next

J.q = p -> next K.q = p -> prior L.free(p)

M.free(q) N.s -> prior = p -> prior O.p -> prior -> next = p -> next

P.p -> prior -> prior -> next = p Q.p -> next -> next -> prior = p R.p -> next -> prior = p -> prior

13.下面就是一个在带头结点得单链表head中删除所有数据域值为x得结点得算法,但不完善,请在相应得地方填上适当得语句,使之成为完整得算法.

void DeleX(LinkList head, DataType x)

{

LinkNode *p, *q, *s;

P = head;

q = p -> next;

while (q != NULL)

if (q -> data == x)

{

s = q;

q = q -> next;

free(s);

p -> next = q;

}

else

{

p = q;

q = q -> next;

}

}

三、算法设计题

14.设有两个顺序表A与B,且都递增有序。试写一算法,从A中删除与B中相同得那些元素(即计算A - B).

SeqList Subtraction(SeqList A, SeqList B)

{

int i, j, k = 0;//令匹配位置为0

for (i = 0; i < A、Length; i++) {

for (j = k; j < B、Length; j++)//从比较匹配得位置开始查起

if (A、Data[i] == B、Data[j])

{

k = j; //记录比较到得位置

for (j = i; j < A、Length - 1; j++)

A、Data[j] = A、Data[j + 1];//删除相同得元素

A、Length--;

break;

}

}

return A;

}

15.已知head就是指向一个带头结点得单链表得头指针,p指向该链表得任一结点。试写一算法,将p所指向得结点与其后继结点交换位置.

void Exchange(LinkList head, LinkNode *p)

{

LinkNode *q, *s, *r;

q = p -> next;

if (q != NULL)//判断所指结点就是否就是最后一个结点

{

if (p == head)//判断所指结点就是否就是头结点

{

head = head -> next;//头结点指针域所指结点变成新得头结点

s = head -> next;//记录第2个结点

head -> next = p;//新得头结点指针域指向原头结点

p -> next = s;//原头结点变成第1个结点后指针域指向第2个结点

}

else {

r = head;

while (r -> next != p)

r = r-> next;//查找p指向结点直接前趋

r -> next = q;//p指向结点直接前趋指针域指向p指向结点直接后继

p -> next = q -> next;//p指向结点指针域指向p指向结点直接后继得直接后继

q -> next = p;//p指向结点直接后继指针域指向p

}

}

else printf(“p指向得结点无后继节点!”)

}

16.已知两条单链表A与B分别表示两个集合,其元素值递增有序。试写一算法,求A与B得交集C,要求C 同样以元素值递增得单链表形式存储.

LinkList Intersection(LinkList A, LinkList B)

{

LinkNode *p, *q, *r, *s;

LinkList C = (LinkNode *) malloc(SizeOf(LinkNode));

r = C; p = A; s = B;

while (p != null && q != null) {

if (p -> data < q -> data) p = p -> next;

else

if (p -> data > q -> data) q = q -> next;

else {

s = (LinkNode *) malloc(SizeOf(LinkNode));

s -> data = p -> data; s -> next = NULL; r -> next = s;

r = s; p= p -> next; q = q -> next;

}

}

}

17.设有一个带头结点得双向循环链表,head为链表得头指针。试写一算法,实现在值为x得结点之前插入一个值为y得结点.

void Insert(DlinkList head, DataType x, DataType y)

{

DlistNode *p, *s;

s = (DlistNode *) malloc(SizeOf(DlistNode));

s -> data = y;

p = head -> next;

while (p != head && p -> data != x)

p = p -> next;//查找结点值为x得结点

if (p == head)

printf(“没有值为x得结点!”);

else

{

s -> next = p;

s -> prior = p -> prior;

p -> prior -> next = s;

p -> prior = s;

}

}

第3章栈与队列

练习题

一、单项选择题

1.栈得操作原则就是(C)

A.顺序进出

B.后进后出

C.后进先出

D.先进先出

2.进栈序列为a,b,c,则通过入出栈操作可能得到得a,b,c得不同排列个数为(B)

A.4

B.5

C.6

D.7

3.按字母a,b,c,d,e顺序入栈,则出栈得输出序列不可能就是(B)

A.decba

B.dceab

C.abcde

D.edcba

4.判断一个顺序栈st(最多元素为StackSize)为栈满得条件表达式就是(D)

A.st、top != StackSize

B.st、top != 0

C.st、top !=-1

D.st、top == StackSize - 1

5.在向顺序栈中压入元素时(C)

A.先存入元素,后移动栈顶指针

B.谁先谁后无关紧要

C.先移动栈顶指针,后压入元素

D.同时进行

6.一个队列得入队序列就是1,3,5,7,9,则出队得输出序列只能就是(B)

A.9,7,5,3,1

B.1,3,5,7,9

C.1,5,9,3,7

D.9,5,1,7,3

7.判断一个顺序队列sq(最多元素为QueueSize)为空队列得条件表达式为(A)

A.sq、rear == sq、front

B.sq、rear == 0

C.sq、front == QueueSize

D.sq、rear == QueueSize + 1

8.判断一个循环队列cq(最多元素为QueueSize)为满队列得条件表达式为(C)

A.cq、rear == cq、front

B.cq、rear == QueueSize

C.(cq、rear + 1) % QueueSize == cq、front

D.cq、rear % QueueSize + 1 == cq、front

二、填空题

9.假设以S与X分别表示进栈与退栈操作,则对输入序列a,b,c,d,e进行一系列栈操作SSXSXSSXXX之后,得到得输出序列为b、c、e、d、a.

10.假设S、data[maxsize]为一个顺序存储得栈,变量top指示栈顶元素得位置。能做进栈操作得条件就是S、top < maxsize - 1;如果要把栈顶元素弹出到x中,需执行下列语句:x = S、data[S、top--].

11.设顺序栈存放在S、data[maxsize]中,栈底位置就是maxsize - 1,则栈空条件就是S、top == maxsize,栈

满条件就是S、top == 0.

12.若循环队列用数组data[m]存储元素值,用front与rear分别作为头尾指针,则当前元素个数为(rear - front + m) % m.

13.栈与队列都就是线性结构;对于栈,只能在栈顶插入与删除元素;对于队列,只能在队尾插入元素,在队头删除元素.

14.从循环队列中删除一个元素时,其操作就是先取出队头元素,后移动队头指针.

三、解答题

15.如果编号为1,2,3得3辆列车进入一个栈式结构得站台,那么可能得到得3辆列车得出栈序列有哪些?不可能出现得序列就是什么?

答:可能出现得出栈序列有1、2、3,1、3、2,2、1、3,2、3、1,3、2、1,不可能出现得序列就是3、1、2。

16.假设输入栈得元素为a、b、c,在栈S得输出端得到一个输出序列为a、b、c,试写出在输入端所有可能得输入序列.

答:可能得输入序列有a、b、c,a、c、b,b、a、c,c、b、a,c、a、b.

17.简述下面所给算法得功能(假设栈元素为整数类型).

(1)void ex31(SeqStack *S)

{

int A[80], i, n = 0;

while (!empty(s)) {

A[n] = pop(s);//将栈内元素依次存入数组

n++;

}

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

push(S, A[i]);//将数组元素依次压入栈内

}

答:该算法得功能就是将通过一个数组将栈内得所有元素逆序存放.

(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);

push(S, d);

}

}

答:该算法得功能就是通过一个中间栈,删除栈S中所有值为c得元素.

18.写出下列程序段得输出结果(栈结点数据域为字符型char).

SeqStack S;

char x = ‘c’, y = ‘k’;

push(S, x);//压入’c’,栈内’c’

push(S, ‘a ’);//压入’a ’,栈内’ca ’ push(S, y);//压入’k ’,栈内’cak ’ x = pop(S);//弹出’k ’到x,栈内’ca ’ push(S, ‘t ’);//压入’t ’,栈内’cat ’ push(S, x);//压入’k ’,栈内’catk ’ x = pop(S);//弹出’k ’到x,栈内’cat ’ push(S, ‘s ’);//压入’s ’,栈内’cats ’ while (!StackEmpty(S)) { y = pop(S);

putchar(y);//依次弹出并输出栈内元素 }

putchar(x);//输出/k/ …

答:程序段得输出结果就是stack.

19.在循环队列得顺序存储结构下,分别写出入队(插入元素)、出队(删除元素)时修改队尾、队头指针得操作语句以及求队列长度得公式.

答:入队时修改队尾指针得语句为cq 、rear = (cq 、rear + 1) % QueueSize,出队时修改队头指针得操作语句为cq 、front =

(cq 、front + 1) % QueueSize,求队列长度得公式为(cq 、rear - cq 、front + QueueSize) % Queue.

四、算法设计题

20.利用两个栈S1与S2模拟一个队列,如何用栈得运算来实现队列得插入与删除运算?试写出算法.

设模拟得队列如下图所示.top1为队头指针,top2为队尾指针:void

Insert(DataType x,

SeqStack *S1, SeqStack *S2)

{ if (top2 == S2、Size) printf(“Queue Full!”); top2++; if (top2 > 0)

S2、data[top2] = x; else S1、data[top2] = x;

}

DataTyp

e Delete(SeqStack

*S1, SeqStack *S2)

{ if (top1 >= top2) printf(“Queue Empty ”); if (top1 < 1) x = S1、data[top1]; else

x = S2、data[top1]; top1++; return x;

}

21.试设计一个算法,实现输入一字符串并检查字符串中就是否含有圆括号,当圆括号匹配时输出括号内得字符串,否则给出出错信息(提示:利用栈记录左括号出现后得字符).

string Match() { InitStack(S);

、//初始化栈 ch = getchar(); //读取第一个字符

while (ch != ‘\n ’) { //当前字符不为结束字符时,进入循环 if (ch == ‘(‘) {

//检测到左括号 push(S,ch);

//将左括号压入栈中 ch = getchar(); //读取下一个字符

while (ch != ‘\n ’ && ch != ‘)’) {

//字符不为结束字符与右括号时,进入循环 push(S,ch);

//将字符压入栈中

ch = getchar();

//读取下一个字符

top1 = front

top2 = rear

S2—→

}

}

else if (ch ==’)’) { //读取到得字符为右括号时,进入循环

while ((!StackEmpty(S)) && GetTop(S) != ‘(‘) //栈不空且栈顶元素不为左括号,进入循环

putchar(pop(S)); //退栈并输出退栈得字符

if (StackEmpty) //如果栈为空,表示输入字符串仅包含右括

printf (“No Match”); //号,输出“无匹配”信息

}

else ch = getchar(); //读取到得字符不就是括号,继续读取}

if (StackEmpty(S)) printf (“No Match”); //如果栈为空,表示输入字符串不包含括号} //输出“无匹配”信息

22.试利用循环队列(长度为k)存储,编写求斐波那契序列得前n()项(,,…,)得算法,其函数定义如下:.

int Fibonacci(int i)

{

if (i == 0) return 0;

else if (i == 1) return 1;

else return (Fibonacci(i - 2) + Fibonacci(i - 1));

}

void FibCirQueue(CirQueue *Q, int k, int n)

{

Q -> rear = 0;

for (int i = 0; i < n; i++) {

Q -> rear = i;

if (i >= k) Q -> rear = Q -> rear % k;

Q -> data[Q -> rear] = Fibonacci(i);

}

第4章多维数组与广义表

练习题

一、单项选择题

1.对矩阵得压缩存储就是为了(B)

A.方便运算

B.节省空间

C.方便存储

D.提高运算速度

2.二维数组M得元素就是4个字符(字符占一个存储单元)组成得串,行下标i得范围就是0~7,列下标j得范围就是0~9,则存放M需要存储单元数为(D)

A.360

B.480

C.240

D.320

3.N就是一个5×8得二维数组,当N按行优先方式存储时,表示该数组得第10个元素得就是(C)

A.N[2][2]

B.N[2][1]

C.N[1][1]

D.N[1][2]

4.二维数组M[i][j]得元素就是4个字符(字符占一个存储单元)组成得串,行下标i得范围就是0~4,列下标j得范围就是0~5,M按行存储时元素M[3][5]得起始地址与M按列存储时起始地址相同得就是(B)

A.M[2][4]

B.M[3][4]

C.M[3][5]

D.M[4][4]

5.稀疏矩阵一般得压缩存储方法有两种,即(D)

A.二维数组与三维数组

B.三元组与散列

C.顺序表与十字链表

D.三元组与十字链表

6.设矩阵A就是一个对称矩阵,为了节省存储空间,将其下三角部分按行序存放在一位数组中,对任一下三角部分元素,在一维数组得下标位置k得值就是(B)

A. B.

C. D.

二、填空题

7.将三角矩阵得下三角部分逐行地存储在起始地址为1000得内存单元中,已知每个元素占4个单元,则得地址为1208.

8.已知数组表示对称矩阵,其中每个元素占5个单元,现将其下三角部分按行优先次序存储在起始地址为1000得连续存储单元中,则对应得地址为1225.

9.广义表((a),a)得表头就是(a),表尾就是a.

10.广义表((a))得表头就是(a),表尾就是( ).

11.广义表(((a)))得表头就是((a)),表尾就是( ).

12.取出广义表A =((x,y,z),(a,b,c,d))中原子b得函数就是head(tail(head(tail(A)))).

13.取出广义表A =((x,(a,b,c,d)))中原子c得函数就是head(tail(tail(head(tail(head(A)))))).

14.A =(x,((a,b),c,d)),函数(head(head(tail(A)))得运算结果就是(a,b).

三、解答题

15.已知二维数组按“行优先顺序”存储在内存中,假设每个元素占d个存储单元,第一个元素得存储地址表示为LOC(A[0][0]),写出计算数组A得任一个元素LOC(A [i][j])得存储地址公式.

LOC(A [i][j])得存储地址公式为LOC(A [i][j]) = LOC(A[0][0]) + d *(n*i + j).

16.已知二维数组A[5][10]按“行优先顺序”存储在内存中,假设每个元素占3个存储单元,第一个元素得存储地址LOC(A[0][0]) =1000,计算出LOC(A[3][4])得值.

LOC(A[3][4])得值为LOC(A[3][4]) = LOC(A[0][0]) + d *(n*i + j) = 1000 + 3×(3×10 + 4) = 1102.

17.已知有一个10阶对称矩阵A,采用压缩存储方式存储(以行序为主,每个元素占1个单元),其起始地址为1100,写出得地址.

A[4][5]得地址为1100 + d * (j * (j + 1) / 2 + i) = 1100 + 1 × (5 × (5 + 1) / 2 + 4) = 1119.

18.求下列各广义表得表头与表尾:

(1)((a,b),c,d)

(2)(a,b,c)

(3)((a,b,c))

(4)(a,(b,c),d)

(5)((a,b),(c,(d,( ))))

令题中广义表皆为A,则有:

①head(A)=(a,b),tail(A)=(c,d)

②head(A)= a,tail(A)=(b,c)

③head(A)=(a,b,c),tail(A)=( )

④head(A)= a,tail(A)=((b,c),d)

⑤head(A)=(a,b),tail(A)=((c,(d,( ))))

19.求下列广义表得长度与深度:

(1)((a),((b),c),(((d))))

(2)(a,(a,b),d,e,((i,j),k))

(3)((a,b),(c,(d,e)))

令题中广义表皆为A,则有:

①length(A)= 3,depth(A)= 4

②length(A)=5,depth(A)=3

③length(A)=2,depth(A)= 3

20.写出下列稀疏矩阵对应得三元组表:

.

三元表如下:

第5章树与二叉树

练习题

一、单项选择题

1.将一棵有100个结点得完全二叉树从根开始,每一层从左到右依次对结点进行编号,根节点得编号为1,则编号为49得结点得左孩子编号为(B)

A.99

B.98

C.50

D.48

2.设深度为k得二叉树上只有度为0与度为2得结点,则此类二叉树所包含得结点数至少为(C)

A. B. C. D.

3.已知某二叉树得后序遍历序列就是dabec,中序遍历序列就是debac,则它得前序遍历序列就是

(B)

A.acbed

B.cedba

C.deabc

D.decab

4.若某二叉树得前序遍历序列就是abdgcefh,中序遍历序列就是dgbaechf,则它得后序遍历序列就是

(D)

A.bdgcefha

B.gdbecfha

C.bdgaechf

D.gdbehfca

5.如果某二叉树得前序遍历序列就是stuwv,中序遍历序列就是uwtvs,则它得后序遍历序列就是

(C)

A.uwvts

B.vwuts

C.wuvts

D.wutsv

6.按照二叉树得定义,具有3个结点得二叉树有

(A)

A.5种

B.4种

C.3种

D.6种

7.深度为4得二叉树至多可以有得结点数为(D)

A.17

B.13

C.18

D.15

8.一棵二叉树如图5、31所示,其后序遍历序列为(C)

A.abdgcefh

B.bgdaechf

C.gdbehfca

D.abcdefgh

9.以二叉链表作为二叉树得存储结构,在具有n个结点得二叉链表中(n > 0),空链域得个数为(B)

A. B. C. D.

10.一棵左子树为空得二叉树在前序线索化后,其空指针域数为(C)

A.0

B.1

C.2

D.不确定

二、填空题

11.由二叉树得前序遍历与中序遍历或中序遍历与后序遍历可以唯一确定一棵二叉树.

12.已知二叉树得前序遍历序列为ABDCEFG,中序遍历序列为DBCAFEG,则后序遍历序列为DCBFGEA.

13.深度为k得完全二叉树至多有个结点,至少有个结点.

14.在任意一棵二叉树中,若度数为0得结点个数为,度数为2得结点个数为,则等于.

15.一棵二叉树得第i()层最多有个结点.

三、解答题

如图

列:

孩子.

组成,

0、19、0、23、0、12、0、08.试为这8个字母设计哈夫曼编码.

构造哈夫曼树如图所示:

a 得编码为1101,

b 得编码为0011,

c 得编码为111,

d 得编码为0010,

e 得编码为01,

f 得编码为10,

g 得编码为000,

h 得编码为1100.

四、算法设计题

22.以二叉链表作为存储结构,试利用指针数组实现编写非递归得前序遍历二叉树得算法.

void Preorder(BinTree bt) { BinNode *s[n]; top = -1; do { while (bt != null) { printf(“%c ”,bt -> data);

//访问根结点与子树根结点

top = top + 1; s[top] = bt;

//存父结点指针 bt = bt -> lchild;

//访问左子树

}

if (top != -1) {

bt = s[top];

//取父结点指针 top = top -1; bt = bt -> rchild;

//访问右子树

}

}

while (top !=-1 && bt != null);

}

23.以二叉链表作为存储结构,其根结点指针为bt,试写从根开始按层遍历二叉树得算法.

typedef struct {

int hp, tp;

BinTNode *dt[maxlen]; }lqueue;

void Layar(BinTree bt) {

lqueue lq; if (bt != null){ lq 、hp = 0; lq 、rp = 0; lq 、dt[1] = bt; do { lq 、hp = (lq 、hp % maxlen) + 1; bt = lq 、dt[lq 、hp]; printf(“%6d ”,bt -> data); if (bt -> lchild != null) { lq 、rp = (lq 、rp % maxlen) + 1;

lq 、dt[rp] = bt 、lchild;

}

if (bt -> rchild != null) {

lq 、rp = (lq 、rp % maxlen) + 1;

lq 、dt[rp] = bt 、rchild;

5 7

12

8 10 18 12 16

24 34 19

43 100 23 57

}

} while (lq、hp != lq、rp);

printf(“\n”);

}

}

24.以中序线索二叉链表为存储结构,试写查找某结点*p得中序前趋结点得算法.

BinThrNode *InorderPred(BinThrNode *p)

{

BinThrNode *q;

if (p -> ltag == 1) //若p左子树为空

return p -> lchild; //返回左线索所指得中序前趋

else {

q = p -> lchild; //左子树非空,从p得左子树开始查找

while (q -> ltag == 0)

q = q -> rchild; //右子树非空,延右链查找

return p;

}

}

第6章图

练习题

一、单项选择题

1.在一个具有n个顶点得无向图中,要连通全部顶点至少需要多少条边(C)

A. B. C. D.

2.无向图得邻接矩阵就是一个(B)

A.对角矩阵

B.对称矩阵

C.上三角矩阵

D.零矩阵

3.采用邻接表存储得图得深度优先遍历算法类似于二叉树得(B)

A.按层遍历

B.前序遍历

C.中序遍历

D.中序遍历

4.采用邻接表存储得图得宽度优先便利算法类似于二叉树得(A)

A.按层遍历

B.前序遍历

C.中序遍历

D.中序遍历

5.设无向连通图G中顶点数为n,则图G中最少有多少条边(B)

A. B. C. D.

6.若图G为n个顶点得有向图,则图G中最多有多少条边(A)

A. B. C. D.

7.在一个图G中所有顶点度数之与等于边数得(D)

A.3倍

B.倍

C.4倍

D.2倍

8.在具有n个顶点得无向完全图G中边得总数为(B)

A. B. C. D.

9.在具有6个顶点得无向图G中至少应有多少条边才能确保就是一个连通图(D)

A.8

B.7

C.6

D.5

10.一个具有n个顶点得无向图,若采用邻接矩阵表示,则该矩阵得大小就是(C)

A. B. C. D.

二、填空题

11.邻接表就是图得链式存储结构.

12.一个无向连通图得生成树就是含有该连通图得全部顶点得极小连通子图.

13.一个带权得无相连通图得最小生成树有一棵或多棵.

14.n个顶点得连通图最多有条边.

15.设图G有n个顶点与e条边,进行深度优先搜索得时间复杂度至多为,进行广度优先搜索得时间复杂度至多为.

16.在无向图G得邻接矩阵A中,若A[i,j]等于1,则A[j,i]等于1.

17.已知图G得邻接表如图6、25所示,其从顶点v1出发得深度优先搜索序列为,其从顶点v1出发得广度优先搜索序列为.

18.已知一个有向图G得邻接矩阵表示,计算第i个结点得入度

得方法就是计算第i列非零元素得个数.

19.图得生成树不就是唯一得,一个连通图得生成树就是一个

极小

连通子图,n个顶点得生成树有n 1条边.

20.对于一个具有n个顶点与e条边得无向图,若采用邻接表表

示,则表头向量得大小为n,所有邻接表中得结点总数就是2e.

三、应用题

21.已知一个图得邻接矩阵为,假设顶点就是v0,v1,…,画出对应

得图.

对应得图如下图所示:

22.对于如图6、27所示得有向图,

(1)图得邻接矩阵;

(2)邻接表与逆邻接表;

(3)强联通分量.

图得邻接矩阵为,

23.按顺序输入顶点对(边

邻接表;若从顶点V3出发,

顶点序列.

邻接表如图所示:

按深度优先搜索遍历得顶点序列为:V3

按广度优先搜索遍历得定点序列为V3、V4、V1、V5、V2.

24.已知一个如图6、28所示得带权网络图,使用普里姆算法构造该图得最小生成树.

构造最小生成树得过程图如下所示:

图6、25 一个图得邻接表

1

2

3

4

1

2

3

6

5

6

7

5

12

34

56

2

2

3

4

5

6

7

5

1

3

(a)

2

1

34

(b)

2

3

25.已知一个如图6、29所示得带权网络图,使用克鲁斯卡尔算法构造该图得最小生成树.

构造最

小生成树得过程图如下所示:

26.设有一

个有向图G 如图6、30所示.写出图G 得两个拓扑排序序列.

排序顺序如图所示,故拓扑排序序列为:①1、2、3、6、5、4;②1、3、2、6、5、4.

第7章 排序

练习题

一、单项选择题

1.在下列排序方法中,时间复杂度不受数据初始状态影响,恒为得就是 (C )

A.堆排序

B.冒泡排序

C.直接选择排序

D.快速排序 2.在待排序得记录关键字序列基本有序得前提下,效率最高得排序方法就是 (B )

A.直接选择排序

B.直接插入排序

C.快速排序

D.归并排序 3.在下列排序方法中,记录关键字比较得次数与记录得初始排列次序无关得方法就是 (D )

A.直接插入排序

B.冒泡排序

C.希尔排序

D.直接选择排序

4.在下列排序方法中,从待排序序列中依次取出记录关键字与已排序序列(初始时为空)中得记录关键字进行比较,将其放入已排序序列得正确位置上得方法,称为 (C )

A.直接选择排序

B.冒泡排序

C.直接插入排序

D.希尔排序

5.在下列排序方法中,从待排序序列中挑选记录(关键字值大得或小得),并将其一次放入已排序序列(初始时为空)得一端得方法,称为 (B )

A.希尔排序

B.直接选择排序

C.插入排序

D.归并排序 6.在下面得几种排序方法中,需求内存空间最大得方法就是 (A )

5 1

2

3

4

5

(d) 2

2

3 4 1

2

3

4

5

6

(e) 2

2

3

4 4

1 2

(a) 1

1

2

3

4

1

2

(b) 1

2

3

4 (c)

1 2 3

1

2

3

4 5

1

2 3

5

(d)

1

2

3

4

5

6

1

2 3

5

5

(d)

4

(e)

4

(e)

A.归并排序

B.直接选择排序

C.快速排序

D.插入排序

7.在下列排序方法中,平均查找长度最小得排序方法就是(D)

A.归并排序

B.直接插入排序

C.直接选择排序

D.快速排序

8.有一组记录得关键字序列为(46,79,56,38,40,84),利用快速排序得方法,以第一个记录为基准得到得一趟排序结果为(A)

A.40、38、46、56、79、84

B.40、38、46、84、56、79

C.38、40、46、56、79、84

D.40、38、46、79、56、84

9.有一组记录得关键字序列,经过一次归并后为[25 48][16 35][79 82][23 40][36 72],按归并排序得方法对该序列再进行一趟归并排序后得结果为(C)

A.16、25、48、35、79、82、23、36、40、72

B.16、25、35、48、79、82、23、36、40、72

C.16、25、35、48、23、40、79、82、36、72

D.16、25、35、48、79、23、36、40、72、82

10.已知一组记录得关键字序列为(46,79,56,38,40,84),则利用堆排序得方法建立得初始堆(大根堆)就是

(A)

A.84、79、56、38、40、46

B.79、46、56、38、40、84

C.84、79、56、46、38、40

D.84、56、79、40、46、38

11.若一组记录得关键字序列为(46,79,56,38,40,84),则;利用箱排序排序方法,按每个关键字个位数依次装箱后得到得结果为(C)

A.38、40、46、56、79、84

B.40、38、46、79、56、84

C.40、84、46、56、38、79

D.40、38、46、84、56、79

12.用快速排序方法对包含n个记录得文件进行排序,最坏情况下执行得时间复杂度为(D)

A. B. C. D.

二、填空题

13.在选择排序、堆排序、快速排序与直接插入排序方法中,稳定得排序方法就是直接插入排序.

14.分别采用堆排序、快速排序、直接插入排序与归并排序方法对初始状态为基本递增有序得序列,按递增顺序排序,最省时间得排序方法就是直接插入排序,最费时间得就是归并排序.

15.在直接插入排序、希尔排序、直接选择排序、快速排序、堆排序、归并排序与基数排序中,不稳定得排序有直接选择排序、希尔排序、快速排序、堆排序,平均比较次数最少得排序就是快速排序,需要内存空间最多得就是基数排序.

16.在对一组关键字序列为(51,38,96,23,45,15,72,62,87)得记录进行直接插入排序时,当把第5个记录(关键字值45)插入到有序表时,为寻找插入位置需要比较3次.

17.对n个记录得排序文件进行起泡排序时,最少得比较次数就是次.

18. 在所有得排序算法中,若记录关键字基本正序(升序)或反序(降序),则选用堆排序;若记录按关键字无序,则最好选用快速排序.

19.在所有得排序算法中,若记录关键字基本正需(升序),则选用直接插入排序;若初始记录关键字基本反序(降序),则选用堆排序.

20.在快速排序、归并排序与堆排序等几种排序算法中,若仅从存储空间考虑,它们得优先顺序就是堆排序、快速排序、归并排序.

21.对n个记录采用直接选择排序方法所执行得记录交换次数最多为次.

22.对n个记录进行堆排序,最坏情况下得执行时间为.

三、解答题

23.对于给定得一组关键字(46,32,55,81,65,11,25,43),进行直接插入排序,写出其排序得每一趟结果.

直接插入排序得每一趟结果为:

第一趟:[32,46],[55,81,65,11,25,43]

第二趟:[32,46,55],[81,65,11,25,43]

第三趟:[32,46,55,81],[65,11,25,43]

第四趟:[32,46,55,65,81],[11,25,43]

第五趟:[11,32,46,55,65,81],[25,43]

第六趟:[11,25,32,46,55,65,81],[43]

第七趟:[11,25,32,43,46,55,65,81]

24.对于给定得一组关键字(26,18,60,14,7,45,13,32),进行直接选择排序,写出其排序得每一趟结果.

直接选择排序得每一趟结果为:

第一趟:7,[18,60,14,26,45,13,32]

第二趟:7,13,[60,14,26,45,18,32]

第三趟:7,13,14,[60,26,45,18,32]

第四趟:7,13,14,18,[26,45,60,32]

第五趟:7,13,14,18,26,[45,60,32]

第六趟:7,13,14,18,26,32,[60,45]

第七趟:7,13,14,18,26,32,45,[60]

最后得到排序结果:7,13,14,18,26,32,45,60.

25.对于给定得一组关键字(41,62,13,84,35,96,57,39,79,61,15,83),分别写出执行以下各排序算法得每一趟排序结果.

(1)希尔排序(5,2,1);(2)快速排序;(3)基数排序.

①希尔排序得每一趟结果为:

d= 5:15,57,13,79,35,41,62,39,84,61,96,83

d= 2:13,39,15,41,35,57,62,61,84,79,96,83

d= 1:13,15,35,39,41,57,61,62,79,83,84,96

②快速排序得每一趟结果为:

第一趟:[15,39,13,35],41,[96,57,84,79,61,62,83]

第二趟:[13],15,[39,35],41,[83,57,84,79,61,62],96

第三趟:[13],15,[35],39,41,[62,57,61,79],83,[84],96

第四趟:13,15,35,39,41,[61,57],62,[79],83,84,96

第五趟:13,15,35,39,41,[57],61,62,79,83,84,96

第六趟:13,15,35,39,41,57,61,62,79,83,84,96

③基数排序得每一趟排序结果为:

第一趟:41,61,62,13,83,84,35,15,96,57,39,79

第二趟:13,15,35,39,41,57,61,62,79,83,84,96

26.对于给定得一组关键字(26,18,60,14,7,45,13,32),写出执行堆排序算法得每一趟排序结果.

初始关键字:[26,18,60,14,7,45,13,32] 初始堆:[60,32,45,18,7,26,13,14]

第一趟排序:[32,45,18,7,26,13,14],60 重建堆:[45,32,18,26,7,14,13],60

第二趟排序:[32,18,7,26,13,14],45,60 重建堆:[32,26,14,18,13,7],45,60

第三趟排序:[26,14,18,13,7],32,45,60

第四趟排序:[14,18,13,7],26,32,45,60 重建堆:[18,14,13,7],26,32,45,60

第五趟排序:[14,13,7],18,26,32,45,60

第六趟排序:[13,7],14,18,26,32,45,60

第七趟排序:[7],13,14,18,26,32,45,60

27.对待排序记录关键字序列,在以下几种情况下,进行直接插入排序时(按升序)至多需要进行多少次关键

字得比较?

(1)关键字从小到大顺序有序(正序);

(2)关键字从大到小顺序有序(反序).

(3)前一半关键字序列从小到大顺序有序,后一般关键字序列从大到小顺序有序.

①次;②次;③次.

28.判断下列序列就是否为堆(大根堆或小根堆),如果不就是,则将其调整为堆.

(1)(17,18,60,40,7,32,73,65);

(2)(96,83,72,45,28,54,60,23,38,15);

(3)(25,48,16,35,79,82,23,40,36,72);

(4)(12,24,18,65,33,56,33,92,86,70);

①不就是堆,调整为小根堆7,17,32,40,18,60,73,65.

②就是大根堆.

③不就是堆,调整为大根堆82,79,25,40,72,23,16,36,35,48

④就是小根堆

四、算法设计题

29.已知一个按结点数值递增有序得单链表,试写一算法,插入一个新纪录,使得链表仍按关键字从小到大得次序排列.

void Insert(LinkList head, DataType x)

{

LinkNode *s, *p, *q;

s = (LinkNode *)malloc(SizeOf(LinkNode));

s -> data = x; s -> next = null;

if (head == null) { //单链表为空

head = s; return;

}

p = head; q = null;

while (p != null && x > p -> data) { //寻找插入位置

q = p; p = p -> next; //q -> data小于x且p -> data大于等于x

}

if (q == null) {

s -> next = head; head = s; return; //x最小

}

if (p == null) { //x最大

p -> next = s; return;

}

s -> next = p; q -> next = s; //插入x

}

30.已知两个有序表A[0、、m-1]与B[0、、n-1],试写一算法,将它们归并为一个有序表C[0、、m+n-1].

SeqList Merge(SeqList A, SeqList B)

{

SeqList C = InitSeq(A、Length + B、Length);

int i = 0, j = 0, k = 0;

while (i < A、Length && j < B、Length) {

if (A[i] <= B[j]) {

C[k] = A[i]; i++; A[i]数值小于B[j],插入A[i]并将i加1

}

else {

C[k] = B[j]; j++; B[j]数值小于A[i],插入B[j]并将j+1

}

k++; 待插位置后移

}

if (i < A、Length) {

C[k] = A[i]; i++; k++; A表数据未插完,继续插入

}

if (j < B、Length) {

C[k] = B[j]; j++; k++; B表数据未插完,继续插入

}

}

第8章查找

练习题

一、单项选择题

1.若对含有18个元素得有序表R进行二分查找,查找R[3]得比较序列得下标为(D)

A.1,2,3

B.9,5,2,3

C.10,5,3

D.9.4.2.3

2.查找运算主要就是对关键字得(C)

A.移位

B.交换

C.比较

D.定位

3.对一个表长为n得线性表采用顺序查找,在等概率情况下,查找成功得平均查找长度就是(B)

A. B. C. D.

4.线性表适合于顺序查找得存储结构就是(C)

A.索引存储

B.压缩存储

C.顺序存储或链接存储

D.索引存储

5.假设有一个关键字序列为{05,13,19,21,37,56,64,75,80,88,92},当二分查找关键字值为64得结点时,查找成功得比较次数就是(B)

A.1

B.3

C.4

D.6

6.假设散列表长m=11,散列函数H(key)= key % 11.表中已有4个结点:h(39)=6,h(41)=8,h(53)=9,h(76)=10占了4个地址位置,其余地址为空,如果采用线性探测法处理冲突,存储关键字为85需要探查得次数为

(C)

A.2

B.3

C.4

D.5

7.已知一个长度为13得有序表,按二分查找对该表进行查找,在表内各元素等概率情况下,查找成功得平均查找长度为(A)

A. B. C. D.

8.采用二分查找方法查找长度n得线性表时,其平均查找长度为(D)

A. B. C. D.

9.若构造一棵具有n个结点得二叉排序树,在最坏情况下,其深度不超过(B)

A. B. C. D.

10.设散列表长m=13,散列函数H(key)= key % 11.表中已有4个结点:h(15)=4,h(27)=5,h(39)=6,h(51)=7,其余

数据结构试题及答案(免费)

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

自考《数据结构》真题和答案

2016年10月高等教育自学考试全国统一命题考试 数据结构试卷 (课程代码02331) 本试卷共7页,满分l00分,考试时间l50分钟。 考生答题注意事项: 1.本卷所有试题必须在答题卡上作答。答在试卷上无效,试卷空白处和背面均可作草稿纸。2.第一部分为选择题。必须对应试卷上的题号使用2B铅笔将“答题卡”的相应代码涂黑。3.第二部分为非选择题。毖须注明大、小题号,使用0.5毫米黑色字迹签字笔作答。4.合理安排答题空间,超出答题区域无效。 第一部分选择题(共30分) 一、单项选择题(本大题共l5小题,每小题2分,共30分> 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题 卡”的相应代码涂黑。错涂、多涂或未涂均无分。 1.下列选项中,不属于线性结构特征的是 A.数据元素之间存在线性关系 B.结构中只有一个开始结点 C.结构中只有一个终端结点 D.每个结点都仅有一个直接前趋 2.设l7个元素的顺序表中,若将第个元素e移动到第个位置,

不改变除e外其他元素之间的相对次序,则需移动的表中元素个数是 3.若用一个大小为7的数组作为循环队列的存储结构,且当前rew和盘0nt的值分别 为2和4,在此之前的操作是从队列中删除了一个元素及加入两个元素,请问这3 个操作之前rear和矗0nt的值分别是 A.0和l B.0和3 C.3和6 D.4和5 4.已知广义表LS=(((a)),((b,(c)),(d,(e,f))),0),LS的长度是 A.2 B.3 C.4 D. 5 5.一棵完全二叉树T的全部k个叶结点都在同一层中且每个分支结点都有两个孩子结点。于中包含的结点数是 A.k B. 2k-1 C.k2 D.2k-1 6.如果某二叉树的前序遍历序列为abced,中序遍历序列为cebda,则该二叉树的后序 遍历序列是 A.cedba B.decba C.ecdba D.ecbad 7.一个森林有m棵树,顶点总数为n,则森林中含有的总边数是 A.m B. n-l C.n-m D.n+m 8.设图的邻接矩阵A如下所示。各顶点的度依次是

数据结构与算法复习题库含答案

数据结构复习题 第一章概论 一、选择题 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 )。 fori0;im;i++ forj0;jn;j++ a[i][j]i*j; A. Om2 B. On2 C. Om*n D. Om+n 6、算法是( D )。

A. 计算机程序 B. 解决问题的计算方法 C. 排序算法 D. 解决问题的有限运算序列 7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示( C )。 A. On B. Onlog2n C. On2 D. Olog2n 8、下面程序段的时间复杂度为( C )。 i1; whilein ii*3; A. On B. O3n C. Olog3n D. On3 9、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的( B )和运算等的学科。 A. 结构 B. 关系 C. 运算 D. 算法 10、下面程序段的时间复杂度是( A )。 is0; whilesn i++;s+i; A. On B. On2 C. Olog2n D. On3 11、抽象数据类型的三个组成部分分别为( A )。 A. 数据对象、数据关系和基本操作 B. 数据元素、逻辑结构和存储结构 C. 数据项、数据元素和数据类型 D. 数据元素、数据结构和数据类型 12、通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量,以下解释错误的是(D)。

数据结构-数据结构历年考题及答案2

中国矿业大学2011-2012学年 《数据结构》试卷(A卷)(考试时间:100分钟) 一. 填空(每空2分,共40分) 1. 数据结构式具有相同性质的数据元素的(1)。 2. 通常程序在调用另一个程序时,都需要使用一个(2)来保存被调用程序内分配的局部变量、形式参数的存储空间以及返回地址。 3. 有6行8列的二维数组A,每个元素用相邻的6个字节存储,存储器按字节编址,已知A的起始存储地址(基址)为1000,在行优先存储和列优先存贮情况下A[5,5]的存储地址分别为__(3)_____,_____(4)____。 4. 完全二叉树第4 个节点的父节点是第 (5) 节点,左孩子是第 (6) 个节点。如果该二叉树有10层,则共有 (7) 个节点。 5. 请描述在循环队列Q中,队头和队尾指针分别由front和rear表示,该队列有10个存储空间,判断队空和队满的条件分别分:_____(8)________,_______(9)_________。 6. 字符串t=”child”,s=”cake”,请写出下列函数的结果:StrLength(t) =(10)__;Concat(SubString(s,3,1),SubString(t,2,2))=____(11)___。 7. 一棵二叉树为 则后序序列为(12),中序序列为(13),先序序列为__(14)____。 8. 请用数据序列{53,17,12,66,58,70,87,25,56,60 }构造一棵二叉排序树_(15)_。 9.。一个栈输入的序列式1,2,3,则可能的且以2为开头的输出序列是 (16) ,不可能的序列是____(17)____。 10. 有n个结点的无向完全图的边数分别为_______(18)_______。 11. 要从数据:2,3,4,8,9,11,13查找11,若采用折半查找法,则在(19)次比较后,才找到该数据。 12. 在直接插入排序、希尔排序、冒泡排序和快速排序中,平均情况下(20)_____最快。 二简答题: 1给定{15,3,14,2,6,9,16,17},试为这8个数设计哈夫曼编码,并计算其带权路径长度。 2请对下图的无向带权图按克鲁斯卡尔算法求其最小生成树。(要求使用图画出每一步过程)。 C G E D F B H A

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

《数据结构》期末考试试题及答案 (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 ■

02331数据结构200710

2007年10月高等教育自学考试全国统一命题考试 数据结构试卷 (课程代码2331) 本试卷共12页,满分100分;考试时间150分钟。 一、单项选择题(本大题共15小题,每小题2分,共30分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.下面程序段的时间复杂度为 A.O(1) B.O(log n) C.O(n) D.O(n2) 2.已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在8所指结点之后插入上述链表应执行的语句为【】 3.在计算机内实现递归算法时所需的辅助数据结构是【】 A.栈B.队列 C.树D.图 4.假设以数组A[m]存放循环A[m]的元素。已知队列的长度为length,指针rear指向队尾元素的下一个存储位置。则队头元素所在的存储位置为【】 5.通常将链串的结点大小设置为大于l是为了【】 A.提高串匹配效率B.提高存储密度 C.便于插入操作D.便于删除操作 6.带行表的三元组表是稀疏矩阵的一种【】 A.顺序存储结构B.链式存储结构 C.索引存储结构D.散列存储结构 7.表头和表尾均为空表的广义表是【】 A.( ) B.( ( ) ) C.( ( ( ) ) ) D.( ( ),( ) ) 8.用二叉链表表示具有n个结点的二叉树时,值为空的指针域的个数为【】A.n-1 B.n C.n+l D.2n 9.为便于判别有向图中是否存在回路,可借助于【】

A.广度优先搜索算法B.最小生成树算法 C.最短路径算法D.拓扑排序算法 10.连通网的最小生成树是其所有生成树中【】 A.顶点集最小的生成树B.边集最小的生成树 C.顶点权值之和最小的生成树D.边的权值之和最小的生成树 11.按排序过程中依据的原则分类,快速排序属于【】 A.插入类的排序方法B.选择类的排序方法 C.交换类的排序方法D.归并类的排序方法 12.下列关键字序列中。构成小根堆的是【】 A.{84,46,62,41,28,58,15,37} B.{84,62,58,46,4l,37,28,15} C.{15,28,46,37,84,41,58,62} D.{15,28,46,37,84,58,62,41} 13.在长度为32的有序表中进行二分查找时,所需进行的关键字比较次数最多为【】A.4 B.5 C.6 D.7 14.假设在构建散列表时,采用线性探测解决冲突。若连续插入的n个关键字都是同义词,则查找其中最后插入的关键字时,所需进行的比较次数为【】 A.n-1 B.n C.n+l D.n+2 15.散列文件也称为【】 A.顺序文件B.索引文件 C.直接存取文件D.间接存取文件 二、填空题(本大题共10小题,每小题2分,共20分) 请在每小题的空格中填上正确答案。错填、不填均无分。 16.数据的逻辑结构描述数据元素之间的________________________,与存储方式无关。17.在一个长度为100的顺序表中删除第10个元素时,需移动________________________个元素。 18.队列的队尾位置通常是随着________________________操作而变化的。 19.两个空串联接得到的串的长度为________________________。 20.设对称矩阵A压缩存储在一维数组B中,其中矩阵的第一个元素a11存储在B[0],元素a52存储在B[11],则矩阵元素a36存储在B[________________________]中。 21.已知一棵哈夫曼树含有60个叶子结点,则该树中共有________________________个非叶子结点。 22.如图所示的有向图中含有________________________个强连通分量。 23.已知一组关键字为{15,36,28,97,24,78,47,52,13,86},其中每相邻两个关键字构成一个有序子序列。对这些子序列进行一趟两两归并的结果是

数据结构与算法复习题10(C语言版)

习 9解答 判断题: 1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。 答:FALSE (错。链表表示的有序表不能用折半查找法。) 2.有n 个数据放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无序其平均查找长度不同。 答:FALSE (错。因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL 相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL 要比有序表的ASL 小。) 3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。( ) 答:TRUE 4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。 答:TRUE 5.查找表是由同一类型的数据元素(或记录)构成的集合。 答:TRUE 单选题: 6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。 A. 1、2、3 B. 9、5、2、3 C. 9、5、3 D.9、4、2、3 答:D (第一次??2/)181(+ = 9,第二次??2/)81(+ = 4,第三次??2/)31(+ = 2, (第四次??2/)33(+ = 3,故选D. 7. 顺序查找法适合于存储结构为____________的线性表。 A.散列存储 B.顺序存储或链式存储 C.压缩存储 D.索引存储 答:B 8.对线性表进行二分查找时,要求线性表必须( )。 A .以顺序方式存储 B. 以链接方式存储 C .以顺序方式存储,且结点按关键字有序排序 D. 以链接方式存储,且结点按关键字有序排序 答:C 9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。表中已有4个记录(如下图

计算机专业基础综合数据结构(栈和队列)历年真题试卷汇编6

计算机专业基础综合数据结构(栈和队列)历年真题试卷汇编6 (总分:60.00,做题时间:90分钟) 一、单项选择题(总题数:14,分数:28.00) 1.为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。【2009年 全国试题1(2)分】 A.栈 B.队列√ C.树 D.图 2.设栈S和队列Q的初始状态均为空,元素a,b,c,d,e,j,g=g依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b,d,c,f,e,a,g,则栈S的容量至少是( )。【2009年全国试题2(2)分】 A.1 B.2 C.3 √ D.4 按元素出队顺序计算栈的容量。b进栈时栈中有a,b出栈,cd进栈,栈中有acd,dc出栈,ef进栈,栈 中有aef,fea出栈,栈空,g进栈后出栈。所以栈S的容量至少是3。 3.若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈操作,则不可能得到的出栈序列是( )。【2010年全国试题1(2)分】 A.d,c,e,b,f,a B.c,b,d,a,e,f C.b,c,a,e,f,d D.a,f,e,d,c,b √ 4.某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作。若元素a,b,c,d,e依次入此队列后再进行出队操作,则不可能得到的出队序列是( )。【2010年全国试题2(2)分】 A.b,a,c,d, e B.d,b,a,c,e C.d,b,c,a,e √ D.e,c,b,a,d a先入队,b和c可在a的任一端入队,选项A、B、D都符合要求,只有选项C不可能出现。双端队列出队结果的分析可参见四、36。 5.元素a,b,c,d,e依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素d开头的序列个数是( )。【2011年全国试题2(2)分】 A.3 B.4 √ C.5 D.6 元素d进栈时,元素a,b,c已在栈中,d出栈后,P可以在a,b,c任一元素的前面进栈并出栈,也可以在元素a后出栈,c,b,a必须依次出栈,所以元素d开头的序列个数是4。 6.已知循环队列存储在一维数组A[0.n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第1个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是( )。[2011年全国试题3(2)分】 A.0,0 B.0,n—1 √ C.n一1,0

02331数据结构课后练习题

第1章概论 练习题 一、单项选择题 1.在数据结构中,从逻辑上可以把数据结构分为(B)A.紧凑结构和非紧凑结构B.线性结构和非线性结构 C.内部结构和外部结构D.动态结构和静态结构2.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为(D)A.顺序存储结构B.链式存储结构 C.索引存储结构D.散列存储结构 3.算法分析的两个主要方面是(B)A.正确性和简明性B.时间复杂性和空间复杂性 C.可读性和可维护性D.数据复杂性和程序复杂性4.线性表采用链式存储结构时,要求内存中可用存储单元地址(A)A.不一定连续的B.部分地址必须是连续的 C.必须是连续的D.一定是不连续的 5.算法指的是(C)A.计算机程序B.解决问题的计算方法 C.解决问题的有限运算序列D.排序算法 二、填空题 6.数据结构一般包括逻辑结构、存储结构和数据运算三个方面的内容. 7.数据的逻辑结构可分为线性结构、非线性结构两大类. 8.数据的存储结构(物理结构)一般可以用顺序存储结构、链式存储结构、索引存储结构及散列存储结构等四种存储方法表示. 9.在选用求解一个问题的算法时,除了首先考虑算法是“正确的”之外,还主要考虑执行算法所需要的时间、执行算法所需要的存储空间及算法应易于理解、易于编程、易于调试等三点。 10.设有一批数据元素,为了最快地存取某元素,宜用顺序结构存储,为了方便的插入一个元素,宜用链式结构存储. 三、应用题 设n为正整数,利用大“O”记号,写出下列各程序段的时间复杂度. 11.for (i = 1; i <= n; i++){ y = y + 1; for (j = 1; j <= 2 * n; j++) x = x + 1; } 分析:语句“y = y + 1;”执行n次,语句“x = x + 1;”各执行2 2n次,故该程序段的时间复杂度为O(2n).12.s = 0; while (n >= (s + 1) * (s + 1)) s = s + 1; 分析:语句“s = s + 1;.

计算机学院数据结构与算法分析期末试题(2007级B)_无答案

四川大学期末考试试题 (2008-2009学年第1学期) 课程号:课程名称:数据结构与算法分析(B卷)任课教师: 1.数据类型为()。 A)数据项的集合B)值的集合及定义在其上的一组操作的总称 C)数据元素的集合D)关键字的集合 2.链表不具有的特点是()。 A)可随机直接访问任一元素B)插入删除不需要移动元素 C)不必事先估计元素个数D)所需空间与线性表长度成正比 3.设一个栈的入栈序列是ABCD,则借助于一个栈所得到的出栈序列不可能是()。 A)ABCD B)DCBA C)ABCD D)DABC 4.将对称矩阵A nxn压缩存储在一维数组B[m]中,则m的值至少为()。 A)n(n+1)/2 B)n(n-1)/2 C)n(n+1) D)n2 5.设二叉树中有n2个度为2的结点,n1个度为1的结点,n0个叶子结点,则此二叉树中空指针域个数为()。 A)n0+n1+n2 B)n2+n1+2n0 C)2n2+n1D)2n0+n1 6.对于具有n个顶点的强连图,其弧条数的最小值为()。 A)n+1 B)n C)n-1 D)n-2 7.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有()个结点。 A)2k-1-1 B)2k-1C)2k-1+1 D)2k-1 8.归并排序的时间复杂度是()。 A)O(1) B)O(n) C)O(n2) D)O(nlogn) 9.每一趟都能选出一个元素放在其最终位置上,并且不稳定的排序算法是()。 A)冒泡排序B)简单选择排序C)希尔排序D)直接插入排序10.按照二叉树的定义,具有3个结点的不同形态(相似)的二叉树有()种。 A)3 B)4 C)5 D)6 二、(本题10分) 利用两个栈S1、S2模拟一个队列(如客户队列)时,如何用栈的运算实现队列的插入、删除运算,请简述算法思想。 三、(本题10分) 已知一棵二叉树的先序序列与中序序列分别如下,试画出此二叉树。 先序序列:ABCDEFGH IJ 中序序列:CBEDAGHFJI 注:试题字迹务必清晰,书写工整。本题2页,本页为第1页 教务处试题编号:

计算机专业基础综合数据结构(树和二叉树)历年真题试卷汇编6

计算机专业基础综合数据结构(树和二叉树)历年真题试卷汇编 6 (总分:88.00,做题时间:90分钟) 一、单项选择题(总题数:33,分数:66.00) 1.一棵完全二叉树又是一棵( )。【华中科技大学2006一、7(2分)】 A.平衡二叉树 B.堆√ C.二叉排序树 D.哈夫曼(Huffman)树 完全二叉树的叶子至多在下面两层上,且一个结点若无左子树,绝不能有右子树。平衡二叉树任何结点的左右子树的高度差的绝对值不超过1,但其结点的值符合二叉排序树的定义。平衡二叉树(包括二叉排序树)的树形不一定是完全二叉树。堆是一个序列,有大堆和小堆,编号为i的结点,其父结点、左右子女结点之间位置的关系,符合完全二叉树父结点、左右子女结点之间的关系,从这点上说,可以把堆看成完全二叉树。哈夫曼树是二叉树,但树形不一定满足完全二叉树的定义。 2.一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是( )。【合肥工业大学1999一、5(2分)】 A.不确定 B.0 C.1 D.2 √ 左子树为空的二叉树的根结点的左线索为空(无前驱),先序序列的最后结点的右线索为空(无后继),共2个空链域。 3.一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是( )。【合肥工业大学2000一、5(2分)】 A.0 B.1 √ C.2 D.不确定 4.若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为( )。【南京理工大学1996 一、6(2分)】 A.X的双亲 B.X的右子树中最左的结点 C.X的左子树中最右结点√ D.X的左子树中最右叶结点 5.引入二叉线索树的目的是( )。【南京理工大学1998一、5(2分)】 A.加快查找结点的前驱或后继的速度√ B.为了能在二叉树中方便地进行插入与删除 C.为了能方便地找到双亲 D.使二叉树的遍历结果唯一 6.线素二叉树是一种( )结构。【西安电子科技大学1996一、9(2分)】 A.逻辑 B.逻辑和存储 C.物理√ D.线性 7.甩个结点的线索二叉树上含有的线索数为( )。【中山大学1998二、8(2分)】

数据结构试卷和答案

《数据结构》试题参考答案 (开卷) (电信系本科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

全国2012年10月自考数据结构(02331)试题及答案

全国2012年10月高等教育自学考试 数据结构试题 课程代码:02331 请考生按规定用笔将所有试题的答案涂、写在答题纸上。 选择题部分 注意事项: 1. 答题前,考生务必将自己的考试课程名称、姓名、准考证号用黑色字迹的签字笔或钢笔填写在答题纸规定的位置上。 2. 每小题选出答案后,用2B铅笔把答题纸上对应题目的答案标号涂黑。如需改动,用橡皮擦干净后,再选涂其他答案标号。不能答在试题卷上。 一、单项选择题(本大题共l5小题,每小题2分,共30分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题 纸”的相应代码涂黑。错涂、多涂或未涂均无分。 1.一个算法的时间耗费的数量级称为该算法的 A.效率B.难度 C.可实现性D.时间复杂度 2.顺序表便于 A.插入结点B.删除结点 C.按值查找结点D.按序号查找结点 3.设带头结点的单循环链表的头指针为head,指针变量P指向尾结点的条件是 A.p->next->next==head B.p->next==head C.p->next->next==NULL D.p->next==NULL 4.设以数组A[0..m-1]存放循环队列,front指向队头元素,rear指向队尾元素的下一个位置,则当前队列中的元素个数为 A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m 5.下列关于顺序栈的叙述中,正确的是 A.入栈操作需要判断栈满,出栈操作需要判断栈空 B.入栈操作不需要判断栈满,出栈操作需要判断栈空 C.入栈操作需要判断栈满,出栈操作不需要判断栈空

数据结构历年真题收集第1章 绪论(含答案)

第1章绪论 一、选择题 1. 算法的计算量的大小称为计算的()。【北京邮电大学2000 二、3 (20/8分)】 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于()【中科院计算所 1998 二、1 (2分)】 A.问题的规模 B. 待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2)这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 【南京理工大学 1999 一、1(2分)【武汉交通科技大学 1996 一、1( 4分)】4.一个算法应该是()。【中山大学 1998 二、1(2分)】 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 5. 下面关于算法说法错误的是()【南京理工大学 2000 一、1(1.5分)】 A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是()【南京理工大学 2000 一、2 (1.5分)】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为()两大类。【武汉交通科技大学 1996 一、4(2分)】A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 8.以下与数据的存储结构无关的术语是()。【北方交通大学 2000 二、1(2分)】A.循环队列 B. 链表 C. 哈希表 D. 栈 9.以下数据结构中,哪一个是线性结构()?【北方交通大学 2001 一、1(2分)】A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 10.以下那一个术语与数据的存储结构无关?()【北方交通大学 2001 一、2(2分)】A.栈 B. 哈希表 C. 线索树 D. 双向链表 11.在下面的程序段中,对x的赋值语句的频度为()【北京工商大学 2001 一、10(3分)】 FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 12.程序段 FOR i:=n-1 DOWNTO 1 DO FOR j:=1 TO i DO IF A[j]>A[j+1]

数据结构试卷及答案

数据结构试卷(一) 一、选择题(20分) 1.组成数据的基本单位是()。 (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是()。 (A) 线性结构(B) 树型结构(C) 图型结构(D) 集合 3.数组的逻辑结构不同于下列()的逻辑结构。 (A) 线性表(B) 栈(C) 队列(D) 树 4.二叉树中第i(i≥1)层上的结点数最多有()个。 (A) 2i (B) 2i(C) 2i-1(D) 2i-1 5.设指针变量p指向单链表结点A,则删除结点A的后继结点B需要的操作为()。 (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的容量至少应该是()。 (A) 6 (B) 4 (C) 3 (D) 2 7.将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为()。 (A) 100 (B) 40 (C) 55 (D) 80 8.设结点A有3个兄弟结点且结点B为结点A的双亲结点,则结点B的度数数为()。 (A) 3 (B) 4 (C) 5 (D) 1 9.根据二叉树的定义可知二叉树共有()种不同的形态。 (A) 4 (B) 5 (C) 6 (D) 7 10.设有以下四种排序方法,则()的空间复杂度最大。 (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有______关系。

最新自考02331数据结构试题及答案含评分标准资料

2018年10月高等教育自学考试全国统一命题考试 数据结构试卷 (课程代码02331) 本试卷共7页,满分l00分,考试时间l50分钟。 考生答题注意事项: 1.本卷所有试题必须在答题卡上作答。答在试卷上无效,试卷空白处和背面均可作草稿纸。2.第一部分为选择题。必须对应试卷上的题号使用2B铅笔将“答题卡”的相应代码涂黑。3.第二部分为非选择题。必须注明大、小题号,使用0.5毫米黑色字迹签字笔作答。 4.合理安排答题空间,超出答题区域无效。 第一部分选择题 一、单项选择题:本大题共l5小题,每小题2分,共30分。在每小题列出的备选项中 只有一项是最符合题目要求的。请将其选出。 1.下列数据结构中,逻辑结构不同的是 A.线性表 B.栈 C.队列 D.二叉树 2.将l6个数据元素的线性表按顺序存储方式存储在数组中,若第一个元素的存储地址是l000,第6个元素的存储地址是1040,则最后一个元素的存储地址是 A.1112 B.1120 C.1124 D.1128 3.设栈的初始状态为空,元素1,2,3,4,5依次入栈,不能得到的出栈序列是 A.1,2,3,4,5 B.4,5,3,2,1 C.1,2,5,4,3 D.1,2,5,3,4 4.设指针变量P指向非空单链表中的结点,next是结点的指针域,则判断P所指结点为尾结点前一个结点的逻辑表达式中,正确的是 A. p->next!=NULL&&p->next一>next->next == NULL B.p->next!=NULL&&p->next->next—NULL C.p->next->next==NULL D.p->next—NULL 5.已知广义表LS=(((a,b,c),d),(e,(fg,(h i))),LS的深度是 A.2 B.3 C.4 D.5 6.已知一棵完全二叉树T的第5层上共有5个叶结点,则T中叶结点个数最少是 A.5 8.8 C.10 D.27 7.已知二叉树T的前序遍历序列为a,b,c,e,d,中序遍历序列为C,e,b,d,a,则T 的后序遍历序列为 A.c,e,d,b,a B.d,e,c,b,a C.e,c,d,b,a D.e,c,b,a,d 8.有向图G有玎个顶点和e条边,G保存在邻接矩阵M中,M中0与1的个数差是 A.n(n+1)/2-e B.n(n+1)/2-2e C.n×n-e D.n×n-2e 9.有向图G中所有顶点的度数之和是24,则G中弧的数量是 A.10 B.12 C.14 D.16 10.设有向图G含有n个顶点、e条边,使用邻接表存储。对G进行深度优先搜索遍历算法的时间复杂度是 A.O(n) B.O(口) C.O(n+e) D.O(n×e) 11.对数据序列(26,14,17,12,7,4,3)采用二路归并排序进行升序排序,两趟排序后,得到的排序结果为 A.14,26,17,l2,4,7,3 B.12,l4,l7,26,3,4,7 C.14,26,12,l7,3,4,7 D.14,26,l2,l7,3,7,4

算法与数据结构试题及答案

数据结构模拟试题... 一、简答题(15分,每小题3分) 1.简要说明算法与程序的区别。 2.在哈希表中,发生冲突的可能性与哪些因素有关?为什么? 3.说明在图的遍历中,设置访问标志数组的作用。 4.说明以下三个概念的关系:头指针,头结点,首元素结点。 5.在一般的顺序队列中,什么是假溢出?怎样解决假溢出问题? 二、判断题(10分,每小题1分) 正确在括号内打√,错误打× ( )(1)广义表((( a ), b), c ) 的表头是(( a ), b),表尾是( c )。 ( )(2)在哈夫曼树中,权值最小的结点离根结点最近。 ( )(3)基数排序是高位优先排序法。 ( )(4)在平衡二叉树中,任意结点左右子树的高度差(绝对值)不超过1。 ( )(5)在单链表中,给定任一结点的地址p,则可用下述语句将新结点s插入结点p的后面:p->next = s; s->next = p->next; ( )(6)抽象数据类型(ADT)包括定义和实现两方面,其中定义是独立于实现的,定义仅给出一个ADT的逻辑特性,不必考虑如何在计算机中实现。 ( )(7)数组元素的下标值越大,存取时间越长。 ( )(8)用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。 ( )(9)拓扑排序是按AOE网中每个结点事件的最早发生时间对结点进行排序。 ( )(10)长度为1的串等价于一个字符型常量。 三、单项选择题(10分, 每小题1分) 1.排序时扫描待排序记录序列,顺次比较相邻的两个元素的大小,逆序时就交换位置。这是哪种排序方法的基本思想? A、堆排序 B、直接插入排序 C、快速排序 D、冒泡排序 2.已知一个有向图的邻接矩阵表示,要删除所有从第i个结点发出的边,应该: A)将邻接矩阵的第i行删除B)将邻接矩阵的第i行元素全部置为0 C)将邻接矩阵的第i列删除D)将邻接矩阵的第i列元素全部置为0 3.有一个含头结点的双向循环链表,头指针为head, 则其为空的条件是: A.head->priro==NULL B. head->next==NULL C. head->next==head D. head->next-> priro==NULL 4. 在顺序表( 3, 6, 8, 10, 12, 15, 16, 18, 21, 25, 30 ) 中,用折半法查找关键码值11,所需的关键码比

数据结构试题及答案

第一章概论 一、选择题 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

相关文档
最新文档