文档库 最新最全的文档下载
当前位置:文档库 › 《数据结构》习题汇编09 第九章 排序 试题

《数据结构》习题汇编09 第九章 排序 试题

《数据结构》习题汇编09 第九章 排序 试题
《数据结构》习题汇编09 第九章 排序 试题

数据结构课程(本科)第九章试题

一、单项选择题

1.若待排序对象序列在排序前已按其排序码递增顺序排列,则采用()方法比较次数最少。

A. 直接插入排序

B. 快速排序

C. 归并排序

D. 直接选择排序

2.如果只想得到1024个元素组成的序列中的前5个最小元素,那么用()方法最快。

A. 起泡排序

B. 快速排序

C. 直接选择排序

D. 堆排序

3.对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,

直到子序列为空或只剩一个元素为止。这样的排序方法是()。

A. 直接选择排序

B. 直接插入排序

C. 快速排序

D. 起泡排序

4.对5个不同的数据元素进行直接插入排序,最多需要进行()次比较?

A. 8

B. 10

C. 15

D. 25

5.如果输入序列是已经排好顺序的,则下列算法中()算法最快结束?

A. 起泡排序

B. 直接插入排序

C. 直接选择排序

D. 快速排序

6.如果输入序列是已经排好顺序的,则下列算法中()算法最慢结束?

A. 起泡排序

B. 直接插入排序

C. 直接选择排序

D. 快速排序

7.下列排序算法中()算法是不稳定的。

A. 起泡排序

B. 直接插入排序

C. 基数排序

D. 快速排序

8.假设某文件经过内部排序得到100个初始归并段,那么如果要求利用多路平衡归并在3 趟内完成排序,

则应取的归并路数至少是()。

A. 3

B. 4

C. 5

D. 6

9.采用任何基于排序码比较的算法,对5个互异的整数进行排序,至少需要()次比较。

A. 5

B. 6

C. 7

D. 8

10.下列算法中()算法不具有这样的特性:对某些输入序列,可能不需要移动数据对象即可完成

排序。

A. 起泡排序

B. 希尔排序

C. 快速排序

D. 直接选择排序

11.使用递归的归并排序算法时,为了保证排序过程的时间复杂度不超过O(nlog2n),必须做到()。

A. 每次序列的划分应该在线性时间内完成

B. 每次归并的两个子序列长度接近

C. 每次归并在线性时间内完成

D. 以上全是

12.在基于排序码比较的排序算法中,()算法的最坏情况下的时间复杂度不高于O(nlog2n)。

A. 起泡排序

B. 希尔排序

C. 归并排序

D. 快速排序

13.在下列排序算法中,()算法使用的附加空间与输入序列的长度及初始排列无关。

A. 锦标赛排序

B. 快速排序

C. 基数排序

D. 归并排序

14.一个对象序列的排序码为{ 46, 79, 56, 38, 40, 84 },采用快速排序(以位于最左位置的对象为基准而)

得到的第一次划分结果为:

A. { 38, 46, 79, 56, 40, 84 }

B. { 38, 79, 56, 46, 40, 84 }

C.{ 40, 38, 46, 79, 56, 84 }

D. { 38, 46, 56, 79, 40, 84 }

15.如果将所有中国人按照生日(不考虑年份,只考虑月、日)来排序,那么使用下列排序算法中()

算法最快。

A. 归并排序

B. 希尔排序

C. 快速排序

D. 基数排序

参考答案: 1. A 2. D 3. C 4. B 5. A

6. D

7. D

8. C

9. C 10. C

11. D 12. C 13. C 14. C 15. D

二、填空题

1.第i (i = 1, 2, …, n-1) 趟从参加排序的序列中取出第i个元素,把它插入到由第0个~第i-1个元素组

成的有序表中适当的位置,此种排序方法叫做________排序。

2.第i (i = 0, 1, …, n-2) 趟从参加排序的序列中第i个~第n-1个元素中挑选出一个最小(大)元素,把

它交换到第i个位置,此种排序方法叫做________排序。

3.每次直接或通过基准元素间接比较两个元素,若出现逆序排列,就交换它们的位置,这种排序方法叫

做________排序。

4.每次使两个相邻的有序表合并成一个有序表,这种排序方法叫做________排序。

5.在直接选择排序中,排序码比较次数的时间复杂度为O(________)。

6.在直接选择排序中,数据对象移动次数的时间复杂度为O(________)。

7.在堆排序中,对n个对象建立初始堆需要调用________次调整算法。

8.在堆排序中,如果n个对象的初始堆已经建好,那么到排序结束,还需要从堆顶结点出发调用________

次调整算法。

9.在堆排序中,对任一个分支结点进行调整运算的时间复杂度为O(________)。

10.对n个数据对象进行堆排序,总的时间复杂度为O(________)。

11.给定一组数据对象的排序码为{ 46, 79, 56, 38, 40, 84 },则利用堆排序方法建立的初始堆(最大堆)为

________。

12.快速排序在平均情况下的时间复杂度为O(________)。

13.快速排序在最坏情况下的时间复杂度为O(________)。

14.快速排序在平均情况下的空间复杂度为O(________)。

15.快速排序在最坏情况下的空间复杂度为O(________)。

16.给定一组数据对象的排序码为{46, 79, 56, 38, 40, 84},对其进行一趟快速排序,结果为________。

17.在n个数据对象的二路归并排序中,每趟归并的时间复杂度为O(________)。

18.在n个数据对象的二路归并排序中,整个归并的时间复杂度为O(________)。

参考答案:1. 插入 2. 直接选择 3. 交换

4. 两路归并

5. n2

6. n

7. ?n/2?8. n-1 9. log2n

10. nlog2n11. 84, 79, 56, 38, 40, 46 12. nlog2n

13. n214. log2n15. n

16. [40 38] 46 [79 56 84]17. n 18. nlog2n

三、判断题

1.直接选择排序是一种稳定的排序方法。

2.若将一批杂乱无章的数据按堆结构组织起来, 则堆中各数据是否必然按自小到大的顺序排列起来。

3.当输入序列已经有序时,起泡排序需要的排序码比较次数比快速排序要少。

4.在任何情况下,快速排序需要进行的排序码比较的次数都是O(nlog2n)。

5.在2048 个互不相同的排序码中选择最小的5个排序码,用堆排序比用锦标赛排序更快。

6.若用m个初始归并段参加k路平衡归并排序,则归并趟数应为?log2m?。

7.堆排序是一种稳定的排序算法。

8.对于某些输入序列,起泡排序算法可以通过线性次数的排序码比较且无需移动数据对象就可以完成排

序。

9.如果输入序列已经排好序,则快速排序算法无需移动任何数据对象就可以完成排序。

10.希尔排序的最后一趟就是起泡排序。

11.任何基于排序码比较的算法,对n个数据对象进行排序时,最坏情况下的时间复杂度不会低于

O(nlog2n)。

12.不存在这样一个基于排序码比较的算法:它只通过不超过9次排序码的比较,就可以对任何6个排序

码互异的数据对象实现排序。

参考答案: 1. 否 2. 否 3. 是 4. 否 5. 否

6. 否

7. 否

8. 是

9. 否10. 是

11. 是12. 是

四、运算题

1.判断以下序列是否是最小堆?如果不是, 将它调整为最小堆。

(1) { 100, 86, 48, 73, 35, 39, 42, 57, 66, 21 }

(2) { 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 }。

2.在不要求完全排序时,堆排序是一种高效的算法。这种算法的过程是:

(Heapification)把待排序序列看作一棵完全二叉树,通过反复筛选将其调整为堆;

(Re-heapification)依次取出堆顶,然后将剩余的记录重新调整为堆。

现考虑序列A = { 23,41,7,5,56 }:

(1)给出对应于序列A的最小堆H A(以线性数组表示);

(2)给出第一次取出堆顶后,重新调整H A后的结果(以线性数组表示);

(3)给出第二次取出堆顶后,重新调整H A后的结果(以线性数组表示)。

3.希尔排序、直接选择排序、快速排序和堆排序是不稳定的排序方法, 试举例说明。

4.给出12个初始归并段,其长度分别为19, 22, 17, 16, 11, 10, 12, 32, 26, 20, 28, 07。现要做4路外归并排序,

试画出表示归并过程的最佳归并树,并计算该归并树的带权路径长度WPL。

5.设输入文件包含以下数据对象的排序码:14, 22, 7, 16, 11, 10, 12, 90, 26, 30, 28, 110。现采用置换—选择

方法生成初始归并段,并假设内存工作区可同时容纳5个数据对象,请画出生成初始归并段的过程。

6.在利用置换—选择方法生成初始归并段时,可另开辟一个与工作区容量相同的辅助存储区(称为储备

储备库中,接着输入下一对象的排序码,依次类推,直到储备库满时不再进行输入,而只是从工作区中选择对象输出直至工作区空为止,由此得到一个初始归并段。然后再将储备库中的对象传送至工作区,重新开始置换—选择。

若设输入文件包含对象的排序码为19, 22, 17, 16, 11, 10, 12, 32, 26, 20, 28, 07。采用上述方法生成初始归并段,并设工作区可容纳5个对象,请画出生成初始归并段的过程。

7.假设文件有4500个记录,在磁盘上每个页块可放75个记录。计算机中用于排序的内存区可容纳450

个记录。试问:

(1) 可建立多少个初始归并段?每个初始归并段有多少记录?存放于多少个页块中?

(2) 应采用几路归并?请写出归并过程及每趟需要读写磁盘的页块数。

8.如果某个文件经内排序得到80个初始归并段,试问

(1) 若使用多路归并执行3趟完成排序,那么应取的归并路数至少应为多少?

(2) 如果操作系统要求一个程序同时可用的输入/输出文件的总数不超过15个,则按多路归并至少需

要几趟可以完成排序?如果限定这个趟数,可取的最低路数是多少?

参考答案:

1.(1) { 100, 86, 48, 73, 35, 39, 42, 57, 66, 21 }为最大堆。

调整为最小堆后为{ 21, 35, 39, 57, 86, 48, 42, 73, 66, 100 }

(2){ 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 }不是最小堆。

调整为最小堆后为{ 12, 24, 33, 65, 33, 56, 48, 92, 86, 70 }

2.(1) 建堆结果

H A = 5 23 7 41 56

(2) 第一次取出堆顶,并重新调整后

H A = 7 23 56 41

(3) 第二次取出堆顶,并重新调整后

H A = 23 41 56

3.(1) 希尔排序{ 512 275 275* 061 }增量为2

{ 275* 061 512 275 }增量为1

{ 061 275* 275 512 }

(2) 直接选择排序{ 275 275* 512 061 }i = 1

{061275* 512 275 }i = 2

{061 275* 512 275 }i = 3

{061 275* 275512 }

(3) 快速排序{ 512 275 275* }

{ 275* 275 512}

(4) 堆排序{ 275 275* 061 170 }已经是最大堆,交换275与170

{ 170 275* 061 275}对前3个调整

{ 061 170 275* 275 } 对前2个调整

{ 170 061 275* 275 } 前2个最大堆,交换170与061 { 061 170 275* 275 }

4. 设初始归并段个数n = 12,外归并路数k = 4,计算(n-1) % (k-1) = 11 % 3 = 2 ≠ 0,必须补k-2-1 = 1个长度为0的空归并段,才能构造k 路归并树。此时,归并树的内结点应有(n-1+1)/(k-1) = 12/3 = 4个。

WPL = (3+6+8)*3+(9+18+20+30+44+60+62)*2+(68+85)*1 = 51+ 486+153 = 690

5. 生成初始归并段的过程

6.生成初始归并段的过程

7.(1) 文件有4500个记录,计算机中用于排序的内存区可容纳450个记录,可建立的初始归并段有4500

(2) 内存区可容纳6个页块,可建立6个缓冲区,其中5个缓冲区用于输入,1个缓冲区用于输出,因

此,可采用5路归并。归并过程如下:

共做了2趟归并,每趟需要读60个磁盘页块,写出60个磁盘页块。

8.(1) 设归并路数为k,初始归并段个数m = 80,根据归并趟数计算公式S = ?log k m? = ?log k80? = 3得:

k3≥80。由此解得k≥5,即应取的归并路数至少为5。

(2) 设多路归并的归并路数为k,需要k个输入缓冲区和1个输出缓冲区。1个缓冲区对应1个文件,

有k +1 = 15,因此k = 14,可做14路归并。由S = ?log k m? = ?log1480?= 2。即至少需2趟归并可完成排序。

若限定这个趟数,由S = ?log k80? = 2,有80≤k2,可取的最低路数为9。即要在2趟内完成排序,进行9路排序即可。

五、算法分析题

1.给出下面main () 函数的执行结果:

//------------------------------------------------------------

// Sorry, no comments available:

// Try to read & understand following lines by yourself

//------------------------------------------------------------

#include

void Exchange ( int s[ ], int i, int j ) {

int temp = s[i]; s[i] = s[j]; s[j] = temp;

}

int Partition ( int seq[ ], int low, int high ) {

int pivotpos = low;

int pivot = seq[low];

for ( int i = low+1; i <= high; i++ )

if ( seq[i] < pivot ) {

pivotpos++;

if ( pivotpos != i ) Exchange ( seq, pivotpos, i);

}

for ( i = 0; i < low; i++ ) printf ( "\t" );

for ( i = low; i < pivotpos; i++ ) printf ( "\t%d", seq[i] );

printf ( "\t[%d]", seq[pivotpos] );

for ( i = pivotpos+1; i <= high; i++ ) printf ( "\t%d", seq[i] );

printf ( "\n" );

return pivotpos;

}

void main ( ) {

int testSeq[12] = { 57, 37, 17, 42, 61, 27, 84, 06, 19, 59, 93, 23 };

Partition ( testSeq, 0, 11);

Partition ( testSeq, 0, 6);

Partition ( testSeq, 8, 11);

}

2.本题给出一个施加于链表的选择排序的算法。算法中用到一个临时的表头结点head,作为结果链表的

表头结点,每次从first链上摘下值最大的结点current链入head之后。算法结束前,将head删除。

template

void LinkList :: ListSelectSort ( ) {

LinkNode * head = new ListNode, * current, * pre, * p, * q;

int i = 0;

while ( ①) {

p = current = first; q = NULL;

while ( p != NULL ) {

if ( p->data > ②)

{ pre = q; current = p; }

q = p; p = p->link;

}

if (current == first ) ③;

else pre->link = current->link;

if ( !i ) last = current;

i++;

current->link = head->link;④;

}

first = head->link; delete head;

}

(1)请将缺失的语句部分补上;

根据上述算法,画出每一趟排序时各结点指针的变化。

3.下面给出一个排序算法,它属于数据表类的成员函数,其中currentSize是数据表实例的当前长度,

Vector[ ] 是存放数据表元素的一维数组。

template

void dataList :: unknown ( ) {

T temp; int i, j, n = currentSize;

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

if ( Vector[i] .key < Vector[i-1].key ) {

temp = Vector[i];Vector[i] = Vector[i-1];

for ( j = i-2; j >= 0; j-- )

if ( temp.key < Vector[j].key ) Vector[j+1] = V ector[j];

else break;

Vector[j+1] = temp;

}

}

(1)该算法执行什么功能?

(2)针对有n个数据对象的待排序的数据表,算法的排序码比较次数和对象移动次数最好是多少?最

坏是多少?

4.下面给出一个排序算法,它属于数据表类的成员函数,其中currentSize是数据表实例的当前长度,

Vector[ ] 是存放数据表元素的一维数组。

template

void dataList :: unknown ( ) {

T temp; int i, j, d, n = currentSize;

for ( d = n/2; d >= 1; d /= 2 ) //按不同增量划分子序列

for ( i = d; i < n; i++ ) {//对子序列执行直接插入排序

temp = Vector[i];

for ( j = i-d; j >= 0; j -= d )

if ( temp.key < Vector[j].key ) Vector[j+d] = Vector[j];

else break;

Vector[j+d] = temp;

}

}

(1)该算法执行什么功能?

(2)针对一组输入实例{35, 67, 18, 29, 53, 44, 09, 21},画出每一趟排序过程。

5.下面给出一个排序算法,它属于数据表类的成员函数,其中currentSize是数据表实例的当前长度,

Vector[ ] 是存放数据表元素的一维数组。

template

//对当前排序区间[left, right] 进行排序

int i = left, j = right +1;

T pivot = Vector[left]; //把基准元素的值暂存于temp中

do {

do { i++; } while ( Vector[i].key < pivot.key );

do { j--; } while ( Vector[j].key > pivot.key );

if ( i < j ) {//交换Vector[i]和Vector[j]的值

T temp = Vector[i];Vector[i] = Vector[j];Vector[j] = temp;

}

} while ( i < j );

Vector[left] = Vector[j]; Vector[j] = pivot;

if ( left < j-1 ) unknown ( left, j-1 );//递归处理左区间

if ( j+1 < right ) unknown ( j+1, right ); //递归处理右区间

}

(1)该算法的功能是什么?

(2)以下面给出的待排序的数据序列为例,画出每次递归执行时的结果序列。

{ 45 48 18 36 72 30 53 15 29 }

6.下面给出一个排序算法,它属于数据表类的成员函数,其中currentSize是数据表实例的当前长度,

Vector[ ] 是存放数据表元素的一维数组。

template

void dataList :: unknown ( ) {

int low = 0, high = CurrentSize-1, i, j;int exchange;

while ( low < high ) { //当比较范围多于一个对象时排序

j = low; //记忆元素交换位置

for ( i = low; i < high; i++ )

if ( Vector[i].key > Vector[i+1].key ) {

T temp = Vector[i];

Vector[i] = Vector[i+1];

Vector[i+1] = temp;

j = i; //记忆右边最后发生交换的位置j

}

high = j;//比较范围上界缩小到j

}

}

(0)该算法的功能是什么?

(1)给出待排序数据序列为{10, 20, 30, 40, 50, 60}和{60, 50,40, 30, 20, 10},画出每次执行时的结果

序列。

7.下面的程序是一个的两路归并算法merge,只需要一个附加存储。设算法中参加归并的两个归并段是

A[left]~A[mid] 和A[mid]~A[right],归并后结果归并段放在原地。

template

void dataList :: merge ( int left, int mid, int right ) {

int i, j; T temp;

for ( i = left; i <= mid; i++ ) {

if ( A[i] > A[mid+1] ) {

temp = A[mid];

for ( j = mid-1; j >= i; j-- ) A[j+1] = A[j];

A[i] = A[mid+1];

for ( j = mid+2; j <= right; j++ )

if ( temp > A[j] ) A[j-1] = A[j];

else break;

A[j-1] = temp;

}

}

}

若 A = { 12, 28, 35, 42, 67, 9, 31, 70 }, left = 0, mid = 4, right = 7。写出每次执行算法最外层循环后数组的变化,并给出每次执行算法最外层循环时的数据记录移动次数。

参考答案:

1.输出结果:

23 37 17 42 27 6 19 [57] 84 59 93 61

19 17 6 [23] 27 37 42

61 59 [84] 93

2.链接表上的直接选择排序方法

(1) 缺失语句

①first != NULL

②current->data

③first = first->link

④head->link = current

(2) 变化过程

↑↑

pre cureent

↑ ↑

pre cureent

↑ ↑ pre cureent

↑ ↑

pre cureent

↑ ↑

pre cureent

↑ ↑

pre cureent

↑ ↑

pre cureent

3. 算法功能及执行效率

(1) 该算法的功能是直接插入排序。

(2) 在最好情况下,即所有待排序数据对象已经有序排序时,排序码比较次数为n -1,数据移动次数为

0。在最坏情况下,即所有待排序数据对象全部逆序排序,排序码比较次数和数据移动次数分别为

()()()()2142211

111-+=

+=-==∑∑-=-=n n i n n i n i n i ,数据移动次数排序码比较次数

4. 算法功能及执行实例的结果

(0) 该算法的功能是希尔排序。

(2) 输入实例为 {35, 67, 18, 29, 53, 44, 09, 21} 时,每一趟排序过程如下:

初始排列 35 67 18 29 53 44 09 21 增量 i = 1 35 44 09 21 53 67 18 29 4 i = 2 09 21 18 29 35 44 53 67 2 i = 3

09 18 21 29 35 44 53 67

1

5. 算法功能及执行实例的结果

(1) 该算法的功能是递归的快速排序。

初始排列[ 45 48 18 36 72 30 53 15 29 ]

i = 1 [ 29 15 18 36 30 ] 45 [ 53 72 48 ]

i = 2 [ 18 15 ] 29 [ 36 30 ] 45 [ 53 72 48 ]

i = 3 15 [18] 29 [ 36 30 ] 45 [ 53 72 48 ]

i = 4 15 18 29 30 [36] 45 [ 53 72 48 ]

i = 5 15 18 29 30 36 45 [48] 53 [72]

6.算法功能及执行实例的结果

(1)该算法的功能是起泡排序。

(2)给出待排序数据序列为{10, 20, 30, 40, 50, 60}时的执行结果

初始排列10 20 30 40 50 60 low high

i = 1 ↑j0 5

0 0

对于给定待排序数据序列{60, 50,40, 30, 20, 10} 时每次执行时的结果

初始排列60 50 40 30 20 10 low high

↑j0 5

i = 1 50 40 30 20 10 60

↑j↑j0 4

i = 2 40 30 20 10 50 60

↑j↑j0 3

i = 3 30 20 10 40 50 60

↑j↑j0 2

i = 4 20 10 30 40 50 60

↑j↑j0 1

i = 5 10 20 30 40 50 60 0 0

↑j

数组A每次执行最外层循环后数组的变化如下:

六、算法设计题

1.有一种简单的排序算法,叫做计数排序(count Sorting)。这种排序算法对一个待排序的表(用数组表

示)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键码互不相同。计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小。假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c。

(1)给出适用于计数排序的数据表定义;

(2)使用C++ 语言编写实现计数排序的算法;

2.试设计一个算法, 使得在O(n)的时间内重排待排序表(用数组表示)中的数据对象, 将所有取负值的

排序码排在所有取正值(非负值)的排序码之前。(在写算法之前首先用C++类定义数据表的结构)。参考答案:

1.计数排序

(1) 数据表定义

const int DefaultSize = 100;

template class datalist;

template class Element {

private:

T Key;

Field otherdata;

Public:

T getKey() { return key; }

void setKey ( const T x ) { key = x; }

}

template class datalist {

public:

datalist ( int MaxSz = DefaultSize ): MaxSize (MaxSz), CurrentSize(0)

{ Vector = new Element [MaxSz]; }

int Length ( ) { return CurrentSize; }

void SetLength ( int n ) { CurrentSize = n; }

Element&operator [ ] ( int i ) { return Vector[i]; }

void SetObject ( Element & x, int i ) { V ector[i] = x; }

private:

Element * Vector;

int MaxSize, CurrentSize;

}

(2) 计数排序算法

template

void countsort ( datalist& iniList, datalist& resultList ) {

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

c = 0;

refer = initList[i].getKey( );

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

if ( initList[j].getKey( ) < refer ) c++;

resultList.SetObject ( initList[i], c );

}

resultList.SetLength (n);

}

2.(1) 数据表定义

const int DefaultSize = 100;

template class datalist;

template class Element {

private:

T Key;

Field otherdata;

Public:

T getKey() { return key; }

void setKey ( const T x ) { key = x; }

}

template class datalist {

public:

datalist ( int MaxSz = DefaultSize ): MaxSize (MaxSz), CurrentSize(0) { Vector = new Element [MaxSz]; }

int Length ( ) { return CurrentSize; }

void SetLength ( int n ) { CurrentSize = n; }

Element&operator [ ] ( int i ) { return Vector[i]; }

void SetObject ( Element & x, int i ) { V ector[i] = x; } private:

Element * Vector;

int MaxSize, CurrentSize;

}

(2) 重排算法

template

void reArrange ( dataList& L ) {

int i = 0, j = L.length ( ) – 1;

while ( i < j ) {

while ( L[i].getKey( ) < 0 ) i++;

while ( L[j].getKey( ) >= 0 ) j--;

swap ( L[i], L[j] );

i++; j--;

}

数据结构习题及参考答案

习题1 一、单项选择题 A1.数据结构是指()。 A.数据元素的组织形式 B.数据类型 C.数据存储结构 D.数据定义 C2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。 A.存储结构 B.逻辑结构 C.链式存储结构 D.顺序存储结构 D3.树形结构是数据元素之间存在一种()。 A.一对一关系 B.多对多关系 C.多对一关系 D.一对多关系 B4.设语句x++的时间是单位时间,则以下语句的时间复杂度为()。 for(i=1; i<=n; i++) for(j=i; j<=n; j++) x++; A.O(1) B.O(2n) C.O(n) D.O(3n) CA5.算法分析的目的是(1),算法分析的两个主要方面是(2)。 (1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 (2) A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。 (1) A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 (2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性 7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。 A.低 B.高 C.相同 D.不好说 8.数据结构作为一门独立的课程出现是在()年。 A.1946 B.1953 C.1964 D.1968 9.数据结构只是研究数据的逻辑结构和物理结构,这种观点()。 A.正确 B.错误 C.前半句对,后半句错 D.前半句错,后半句对

数据结构书面作业练习题

习题六树和二叉树6.1 单项选择题 (A) (B) (C) (D) 图8.7 4棵二叉树 1. 如图8.7所示的4棵二叉树,_ _不是完全二叉树。 图8.8 4棵二叉树 2. 如图8.8所示的4棵二叉树,__B_是平衡二叉树。 3. 在线索化二叉树中,t所指结点没有左子树的充要条件是B__o A. t —> left二NULL B. t —> ltag=1 C. t —> ltag=1 且t —> left=NULL D. 以上都不对 4. 二叉树按某种顺序线索化后,任一结点均有指向其前驱和后续的线索,这种说 法_B__ o

A.正确 B. 错误 5. 二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法 _A__。 A.正确 B. 错误 6. 由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法 _B_o A.正确 B. 错误 7. 设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为—B__o A. 2h B. 2h-1 C. 2h+1 D. h+1 a 8. 如图8.9所示二叉树的中序遍历序列 B o 图8.9 一棵二叉树 A. abcdgef B. dfebagc C. dbaefcg D. defbagc 9. 已知某二叉树的后序遍历序列是d abec,中序遍历序

列是debac,它的前序遍历 序列是D ___ 。 A. acbed B. decab C. deabc D. cedba 10. 设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前的条件是 B 。 A. a在b的右方 B. a在b的左方 C. a是b的祖先 D. a是b的子孙 11?假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结 点数为个。B A. 15 B. 16 C. 17 D. 47 12. 某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是 dgbaechf,则其后序遍历的结点访问顺序是D _____ 。 A. bdgcefha B. gdbecfha C. bdgaechf D. gdbehfca 13. 二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、 小于其右孩子的值。这种说法__B__ o A.正确 B. 错误 14. 按照二叉树的定义,具有3个结点的二叉树有_。__种。 A. 3 B. 4 C. 5 D. 6 15. 一棵二叉树如图8.10所示,其中序遍历的序列为

数据结构书面作业练习题

书面作业练习题 李英龙 湖南科技大学数学与计算科学学院

内容简介 在习题部分,既有选择题、判断题,也有用图表解答的练习题、算法设计题或综合解答分析题。并且配有部分练习题的答案供学生自学、练习、参考。 目录 书面作业练习题 习题一绪论 -------------------------------------------------------------3 习题二顺序表示(线性表、栈和队列)-----------------------------------------6 习题三链表(线性表、栈和队列)---------------------------------------------9 习题四串-----------------------------------------------------------------12 习题五数组 --------------------------------------------------------------13 习题六树与二叉树 -------------------------------------------------------15 习题七图-----------------------------------------------------------------24 习题八查找---------------------------------------------------------------30 习题九排序---------------------------------------------------------------33

数据结构试题库答案

数据结构试题及答案 一、单项选择题 (1)一个算法应该就是()。 A)程序???B)问题求解步骤得描述 C)要满足五个基本属性??D) A与C (2)算法指得就是()。 A)计算机程序???B)解决问题得计算方法 C)排序算法???D)解决问题得有限运算序列。 (3)与数据元素本身得形式、内容、相对位置、个数无关得就是数据得()。 A) 存储结构B) 逻辑结构C)算法D)操作 (4)从逻辑上可以把数据结构分为( )两大类。 A)动态结构、静态结构??B) 顺序结构、链式结构 C)线性结构、非线性结构???D)初等结构、构造型结构 (5)下列叙述中正确得就是()。 A)一个逻辑数据结构只能有一种存储结构 B)数据得逻辑结构属于线性结构,存储结构属于非线性结构 C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理得效率 D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理得效率 (6)数据得基本单位就是() ?A) 数据项??B) 数据类型C)数据元素??D)数据变量 (7)下列程序得时间复杂度为() i=0;s=0; while(s

数据结构作业题及参考答案

东北农业大学网络教育学院 数据结构作业题(一) 一、选择题(每题2分,共20分) 1.在一个长度为n的顺序表的任一位置插入一个新元素的渐进时间复杂度为()。 A、O(n) B、O (n/2) C、O (1) D、O (n2) 2.带头结点的单链表first为空的判定条件是()。 A、first == NULL; B、first->link == NULL; C、first->link == first; D、first != NULL; 3.在一棵树中,()没有前驱结点。 A、分支结点 B、叶结点 C、树根结点 D、空结点 4.在有向图中每个顶点的度等于该顶点的()。 A、入度 B、出度 C、入度与出度之和 D、入度与出度之差 5.对于长度为9的有序顺序表,若采用折半搜索,在等概率情况下搜索成功的平均搜索长度为()的值除以9。 A、20 B、18 C、25 D、22 6.下列程序段的时间复杂度为()。 s=0; for(i=1;i

数据结构作业

作业1.线性表 (1) 在有序单链表中设计一高效算法删除所有值大于mink 且小于maxk 的元 素;思考题:你能将上述算法改为双向循环链表吗? (2) 将带表头结点的单链表就地逆置 (3) 将顺序表逆置,要求用最少的附加空间 (4) 在有序顺序表中插入x ,插入后仍为有序的。 作业2. 栈、队列、数组 1.若进栈序列为abcd ,请给出全部可能的出栈序列和不可能的出栈序列。 2.循环队列如何判断队满和队空? 3.写出下面稀疏矩阵的三元组顺序表和十字链表表示。 4.设A 为n 阶对称阵,采用压缩存储存放于一维数组F[n(n+1)/2]中(从F[0] 开始存放),请分别给出存放上三角阵时任一矩阵元素aij (1≤i,j ≤n )的地址 计算公式和存放下三角阵时任一矩阵元素aij (1≤i,j ≤n )的地址计算公式。 作业3.树与二叉树 一、问答题 1、请分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。 2、已知二叉树的先序遍历序列是EABDCFHGIKJ ,中序遍历序列是 ABCDEFGHIJK ,请构造二叉树,并写出其层次遍历序列和后序遍历序列。 3、将图1所示的森林转换成一棵二叉树。 A B C D G H I J K E F L 图1 4、将如图2所示的二叉树还原成树或森林 400000503008000000000700200000A ?????? ??=????????

A B C D G H I J K E F L L L 图2 5、假设用于通信的电文由7个字母组成,字母在电文中出现的频率分别为 0.17、0.09、0.12、0.06、0.32、0.03、0.21。试为这7个字母设计哈夫曼编码,并计算其带权路径长度。 二、二叉树采用二叉链表存储,试设计算法实现: (1)设计递归算法实现二叉树中所有结点的左右孩子交换。 (2)统计以值为X 的结点为根的子树中叶子结点的数目。 (3)设计算法求二叉树的高 作业4 图 一、简答题: 1. 已知带权无向图如图所示: (1). 根据普里姆(Prim )算法,求它的从顶点a 出发的最小生成树(写出过程,即添加顶点、边次序); (2). 根据克鲁斯卡尔(Kruskal )算法,求该图的最小生成树(写出过程,即添加边次序)。 2.已知带权有向图如图所示: (1). 画出该图的邻接矩阵存储结构; (2). 请写出该图的一个拓扑有序序列; (3). 求从顶点a 到其余各顶点之间的最短路经及最短路经长度,并给出计算过程。 二、编程题: 用类C 语言设计算法判断有向图中是否存在由顶点v s 到v t 的路径(t s ),要求说明有向图的存储方式。 作业5 查找与排序 一、简答题: 1. 设有关键字序列{25,40,33,47,12,66,72,87,94,22,5,58},散列 表长12,散列函数为h(key)=key%11,用线性探查再散列、链地址法处理冲突,请分别画出散列表,并计算在等概率情况下的查找成功的平均查找长度。

《数据结构》填空作业题(答案)

《数据结构》填空作业题答案 第 1 章绪论(已校对无误) 1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。 2.程序包括两个内容:数据结构和算法。 3.数据结构的形式定义为:数据结构是一个二元组:Data Structure =( D, S)。 4.数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。 5.数据的逻辑结构可以分类为线性结构和非线性结构两大类。 6.在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。 7.在树形结构中,数据元素之间存在一对多的关系。 8.数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。 9.数据的逻辑结构包括线性结构、树形结构和图形结构 3 种类型,树型结构和有向 图结构合称为非线性结构。 10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑 关系由存储单元位置的邻接关系来体现。 11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑 关系由附加的指针域来体现。 12.数据的存储结构可用 4 种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。 13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。 14.数据结构在物理上可分为顺序存储结构和链式存储结构。 15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数 据的实现方法。 16.数据元素可由若干个数据项组成。 17.算法分析的两个主要方面是时间复杂度和空间复杂度。 18.一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂 度是用该算法在运行过程中所占用的存储空间的大小来度量的。 19.算法具有如下特点:有穷性、确定性、可行性、输入、输出。 20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切 的定义,并在有穷时间内计算出结果。 21. 下面程序段的时间复杂度为㏒ 3n 。 1

数据结构(本)形考作业答案

形考作业一 题目1 把数据存储到计算机中,并具体体现数据元素间的逻辑结构称为()。 选择一项: A. 逻辑结构 B. 给相关变量分配存储单元 C. 算法的具体实现 D. 物理结构 题目2 下列说法中,不正确的是()。 选择一项: A. 数据可有若干个数据元素构成 B. 数据元素是数据的基本单位 诃C.数据项是数据中不可分割的最小可标识单位 产_D.数据项可由若干个数据元素构成 题目3 一个存储结点存储一个()。 选择一项: A. 数据结构 B. 数据类型 C. 数据项 i_D.数据元素 题目4 数据结构中,与所使用的计算机无关的是数据的()。 选择一项: 题目5

下列的叙述中,不属于算法特性的是(选 )°择一项: A. 有穷性 B. 可行性

* C.可读性 D. 输入性 题目6 正确 获得2.00分中的2.00分 ◎ A.研究算法中的输入和输出的关系 B. 分析算法的易懂性和文档性 I 圏 C.分析算法的效率以求改进 D.找出数据结构的合理性 题目7 算法指的是( )。 选择一项: A. 排序方法 B. 解决问题的计算方法 C. 计算机程序 * D.解决问题的有限运算序列 题目8 算法的时间复杂度与( 选择一项: A. 所使用的计算机 因B.数据结构 D. i 题目10 设有一个长度为n 的顺序表,要删除第i 个元素移动元素的个数为( )。 选择一项: )有关。 D. 计算机的操作系统 题目9 设有一个长度为n 的顺序表,要在第i 个元素之前(也就是插入元素作为新表的第 i 个元 素),插入一个元素,则移动元素个数为( )。 选择一项: A. n-i+1 3 B. n-i-1 rj C. n-i C.算法本身

数据结构课后习题答案

数据结构习题集答案 第1章绪论 1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。存储结构是数据结构在计算机中的表示。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据

类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。 1.3 设有数据结构(D,R),其中 {}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r = 试按图论中图的画法惯例画出其逻辑结构图。 解: 1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。 解:ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={} 基本操作: InitComplex(&C,re,im) 操作结果:构造一个复数C ,其实部和虚部分别为re 和im DestroyCmoplex(&C) 操作结果:销毁复数C Get(C,k,&e) 操作结果:用e 返回复数C 的第k 元的值

数据结构题库教材

2013-2014学年二学期数据结构期末考试模拟试卷(1~6卷) 一、应用题(3小题,共24分) 1已知某字符串S中共有8种字符,各种字符分别出现2次、1次、4次、5次、7次、3 次、4次和9次,对该字符串用[0,1]进行前缀编码,问该字符串的编码至少有多少位。 【解答】以各字符出现的次数作为叶子结点的权值构造的哈夫曼编码树如图所示。其带权路 径长度=2X 5+1X 5+3X 4+5X 3+9X 2+4X 3+4X 3+7X 2=98,所以,该字符串的编码长度至少为98位。 2.已知关键码序列为(Ja n, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec), 散列表的地址空间为0~16,设散列函数为H(x)= [i/2」(取下整数),其中i为关键码 中第一个字母在字母表中的序号,采用链地址法处理冲突构造散列表,并求等概率情况下查找成功的平均查找长度。 【解答】H(Ja n)=10/2=5, H(Feb)=6/2=3, H(Mar)=13/2=6, H(Apr)=1/2=0 H(May)=13/2=6, H(Ju n)=10/25, H(Jul)=10/25, H(Aug)=1/2=0 H(Sep)=19/2=8, H(Oct) =15/2=7, H(Nov) =14/2=7, H(Dec) =4/2=2 采用链地址法处理冲突,得到的开散列表如下: 平均查找长度=(1 X 7+2X 4+3X 1)/12=18/12

3.分析下面各程序段的时间复杂度 (1)s1(int n) { int p=1,s=0; for (i=1;iv=n;i++) { p*=i;s+=p; } return(s); } ——0(n) (2)s2(int n) x=0;y=0; For (k=1;kv=n;k++) x++; For (i=1;iv=n;i++) For (j=1;jv=n;j++) y++; ——0(n) 1?下述算法的功能是什么? ListNode *Demo l(LinkList L P ListNode *p) ("L是有头结蛊的单链表 ListNodc *q=L->rLCxt P (1) V ‘V … 」(1 )返回结点*p的直接前趋结点地址。 q=q->nest; if (q) return q, else ?ro< #*p not in L"); I ⑵ i/oid Demo2(LisINode *p ,ListNode +q) 〔//p t*q*8S 表中的 两个结点 (2)交换结点*p和结点*q (p和q的值不变)。 DataTypetemp; temp=p->data, p->data=q->data; q-x^ata^emp, 1.对给定的一组权值W=( 5, 2, 9, 11, 8, 3, 7),试构造相应的哈夫曼树,并计算它的带权路径长度。【解答】构造的哈夫曼树如图所示。

数据结构习题及参考答案 .

习题1 一、单项选择题 1.数据结构是指()。 A.数据元素的组织形式 B.数据类型 C.数据存储结构 D.数据定义 2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。 A.存储结构 B.逻辑结构 C.链式存储结构 D.顺序存储结构 3.树形结构是数据元素之间存在一种()。 A.一对一关系 B.多对多关系 C.多对一关系 D.一对多关系 4.设语句x++的时间是单位时间,则以下语句的时间复杂度为()。 for(i=1; i<=n; i++) for(j=i; j<=n; j++) x++; A.O(1) B.O(2n) C.O(n) D.O(3n) 5.算法分析的目的是(1),算法分析的两个主要方面是(2)。 (1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 (2) A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。 (1) A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 (2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性 7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。 A.低 B.高 C.相同 D.不好说 8.数据结构作为一门独立的课程出现是在()年。 A.1946 B.1953 C.1964 D.1968 9.数据结构只是研究数据的逻辑结构和物理结构,这种观点()。 A.正确 B.错误 C.前半句对,后半句错 D.前半句错,后半句对

数据结构相关题库及答案

第三章栈和队列 一、判断题: 1、栈和队列都是限制存取点的线性结构(易) 2、栈和队列是两种重要的线性结构。(易) 3、带头结点的单链表形式的队列,头指针F指向队列的头结点,尾指针R指向队列的最后一个结点(易) 4、在对不带头结点的链队列作出队操作时,不会改变头指针的值。(易) 答案:1-4 √√×× 二、选择题: 1、一个栈的入栈序列a,b,c,d,e,则栈的不可能的输出序列是C____。 A、 edcba B、 decba C、 dceab D、 abcde 2、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi 为_C___。 A、 i B、 n=i C、 n-i+1 D、不确定 3、栈结构通常采用的两种存储结构是_A___。 A、顺序存储结构和链式存储结构 B、散列方式和索引方式 C、链表存储结构和数组 D、线性存储结构和非线性存储结构 4、判定一个顺序栈ST(最多元素为m0)为空的条件是_B___。A、top !=0 B、top= =0 C、top !=m0 D、top= =m0-1 5、判定一个顺序栈ST(最多元素为m0)为栈满的条件是D。A、top!=0 B、top= =0 C、top!=m0 D、top= =m0-1 6、队列操作的原则是( A ) A、先进先出 B、后进先出 C、只能进行插入 D、只能进行删 除 7、向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行__ _C_。(不带空的头结点) (易) A、HS—>next=s;9 B、s—>next= HS—>next; HS—>next=s; C、s—>next= HS; HS=s; D、s—>next= HS; HS= HS—>next

数据结构作业(附答案)

1.数据的最小单位是( A )。 (A) 数据项(B) 数据类型(C) 数据元素(D) 数据变量 2.下面关于线性表的叙述错误的是(D)。 (A) 线性表采用顺序存储必须占用一片连续的存储空间 (B) 线性表采用链式存储不必占用一片连续的存储空间 (C) 线性表采用链式存储便于插入和删除操作的实现 (D) 线性表采用顺序存储便于插入和删除操作的实现 3.设顺序循环队列Q[0:M-1]的头指针和尾指针分别为F和R,头指针F总是指向队头元素的前一位置,尾指针R总是指向队尾元素的当前位置,则该循环队列中的元素个数为(C)。 (A) R-F (B) F-R (C) (R-F+M)%M (D) (F-R+M)%M 4.设某棵二叉树的中序遍历序列为ABCD,前序遍历序列为CABD,则后序遍历该二叉树得到序列为(A)。 (A) BADC(B)BCDA (C) CDAB (D) CBDA 5.设某棵二叉树中有2000个结点,则该二叉树的最小高度为(C)。 (A) 9 (B) 10 (C) 11(D) 12 6.下面程序的时间复杂为(B) for(i=1,s=0;i<=n;i++){t=1;for(j=1;j<=i;j++) t=t*j;s=s+t;} (A) O(n) (B) O(n2)(C) O(n3) (D) O(n4) 7.设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为(C)。 (A) q=p->next;p->data=q->data;p->next=q->next;free(q); (B) q=p->next;q->data=p->data;p->next=q->next;free(q); (C) q=p->next;p->next=q->next;free(q); (D) q=p->next;p->data=q->data;free(q); 8.设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为(C )。 (A)O(n) (B) O(nlog2n) (C) O(1)(D) O(n2) 9.设一棵二叉树的深度为k,则该二叉树中最多有(D )个结点。 (A) 2k-1 (B) 2k(C) 2k-1(D) 2k-1 10.设用链表作为栈的存储结构则退栈操作( B )。 (A) 必须判别栈是否为满(B) 必须判别栈是否为空 (C) 判别栈元素的类型(D) 对栈不作任何判别 11.函数substr(“DATASTRUCTURE”,5,9)的返回值为(A )。 (A) “STRUCTURE”(B) “DATA” (C) “ASTRUCTUR”(D) “DATASTRUCTURE” 12.设某二叉树中度数为0的结点数为N0,度数为1的结点数为N l,度数为2的结点数为N2,则下列等式成立的是( C)。 (A) N0=N1+1 (B) N0=N l+N2(C) N0=N2+1(D) N0=2N1+l 13.设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是(B )。 (A) 空或只有一个结点(B) 高度等于其结点数 (C) 任一结点无左孩子(D) 任一结点无右孩子 14. 深度为k的完全二叉树中最少有( B )个结点。 (A) 2k-1-1 (B) 2k-1(C) 2k-1+1(D) 2k-1

数据结构课后习题及答案

填空题(10 * 1’ = 10’) 一、概念题 .当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。 .当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。 .带头结点的单链表L中只有一个元素结点的条件是L->Next->Next==Null。 .循环队列的引入,目的是为了克服假溢出。 .长度为0的字符串称为空串。 .组成串的数据元素只能是字符。 .设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。 .为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。 .广义表的深度是广义表中括号的重数 .有向图G可拓扑排序的判别条件是有无回路。 .若要求一个稠密图的最小生成树,最好用Prim算法求解。 . 直接定址法法构造的哈希函数肯定不会发生冲突。 .排序算法所花费的时间,通常用在数据的比较和交换两大操作。 .通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。 .对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。 .存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。 .抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。 .一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。 .在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s->prior= p->prior; s->next= p; p->prior- next= s; p->prior= s;。 .在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。 .队列是限制在表的一端进行插入和在另一端进行删除的线性表,其运算遵循先进先出原则。 .栈是限定尽在表位进行插入或删除操作的线性表。 .在链式队列中,判定只有一个结点的条件是(Q->rear==Q->front)&&(Q->rear!=NULL)。 .已知链队列的头尾指针分别是f和r,则将x入队的操作序列是node *p=(node *)malloc(node); p->next=x; p->next=NULL; if(r) {r->next=p; r=p;} else {r=p; f=p;}。 .循环队列的满与空的条件是(rear+1)%MAXSIZE==fornt和(front=-1&&rear+1==MAXSIZE)。 .串是一种特殊的线性表,其特殊性表现在数据元素都是由字符组成。 .字符串存储密度是串值所占存储位和实际分配位的比值,在字符串的链式存储结构中其结点大小是可变的。 .所谓稀疏矩阵指的是矩阵中非零元素远远小于元素总数,则称该矩阵为矩阵中非零元素远远小于元素总数,则称该矩阵为稀疏矩阵。 .一维数组的逻辑结构是线性结构,存储结构是顺序存储结构;对二维或多维数组,分别按行优先和列优先两种不同的存储方式。 .在有向图的邻接矩阵表示中,计算第i个顶点入度的方法是求邻接矩阵中第i列非0元素的个数。 网中,结点表示活动,边表示活动之间的优先关系,AOE网中,结点表示事件,边表示活动。 .按排序过程中依据不同原则对内部排序方法进行分类,主要有选择排序﹑交换排序﹑插入排序归并排序等4类。 .在堆排序、快速排序和归并排序中若只从排序结果的稳定性考虑,则应选择归并排序方法;若只从平均情况下排序最快考虑,则应选择快速排序方法;若只从最坏情况下排序最快且要节省类存考虑,则应选择堆排序方法。 .直接插入排序用监视哨的作用是存当前要的插入记录,可又省去查找插入位置时对是否出界的判断。 .设表中元素的初始状态是按键值递增的,则直接插入排序最省时间,快速排序最费时间。 .下列程序判断字符串s是否对称,对称则返回1,否则返回0;如?(“abba”)返回1,?(”abab”)返回0. Int f (char*s) { Int i=0,j=0; 求串长*/

数据结构习题与答案

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

《数据结构》填空作业题(答案)

《数据结构》填空作业题答案 第1章绪论(已校对无误) 1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。 2.程序包括两个内容:数据结构和算法。 3. 数据结构的形式定义为:数据结构是一个二元组:Data Structure =(D,S)。 4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。 5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。 6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。 7. 在树形结构中,数据元素之间存在一对多的关系。 8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。 9. 数据的逻辑结构包括线性结构、树形结构和图形结构 3 种类型,树型结构和有向图结构合称为非线性结构。 10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。 11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。 12. 数据的存储结构可用 4 种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。 13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。 14. 数据结构在物理上可分为顺序存储结构和链式存储结构。 15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。 16. 数据元素可由若干个数据项组成。 17. 算法分析的两个主要方面是时间复杂度和空间复杂度。 18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂 度是用该算法在运行过程中所占用的存储空间的大小来度量的。 19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。 20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切 的定义,并在有穷时间内计算出结果。 21. 下面程序段的时间复杂度为㏒3n 。

数据结构课后习题及解析第二章

第二章习题 1. 描述以下三个概念的区别:头指针,头结点,首元素结点。 2. 填空: (1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。 (2)在顺序表中,逻辑上相邻的元素,其物理位置相邻。在单链表中,逻辑上相邻的元素,其物理位置相邻。 (3)在带头结点的非空单链表中,头结点的存储位置由指示,首元素结点的存储位置由指示,除首元素结点外,其它任一元素结点的存储位置由指示。3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。按要求从下列语句中选择合适的语句序列。 a. 在P结点后插入S结点的语句序列是:。 b. 在P结点前插入S结点的语句序列是:。 c. 在表首插入S结点的语句序列是:。 d. 在表尾插入S结点的语句序列是:。 供选择的语句有: (1)P->next=S; (2)P->next= P->next->next; (3)P->next= S->next; (4)S->next= P->next; (5)S->next= L; (6)S->next= NULL; (7)Q= P; (8)while(P->next!=Q) P=P->next; (9)while(P->next!=NULL) P=P->next; (10)P= Q; (11)P= L; (12)L= S; (13)L= P; 4. 设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。 5. 写一算法,从顺序表中删除自第i个元素开始的k个元素。 6. 已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。 7. 试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1, a2..., an)逆置为(an, an-1,..., a1)。 (1)以一维数组作存储结构,设线性表存于a(1:arrsize)的前elenum个分量中。 (2)以单链表作存储结构。 8. 假设两个按元素值递增有序排列的线性表A和B,均以单链表作为存储结构,请编写算法,将A表和B表归并成一个按元素值递减有序排列的线性表C,并要求利用原表(即A 表和B表的)结点空间存放表C。

数据结构题库汇总

数据结构习题 习题一 一、选择题 1、算法分析的两个主要方面是:() A.正确性和简明性B.时间复杂度和空间复杂度 C.数据复杂性和程序复杂性D.可读性和文档性 2、在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.逻辑结构和存储结构 3、计算机算法具备输入、输出和()等5个特性: A.有穷性、确定性和稳定性B.可行性、可移植性和可扩充性 C.有穷性、确定性和可行性D.易读性、稳定性和安全性 4、算法分析的目的是()。 A.找出算法的合理性 B.研究算法的输人与输出关系 C.分析算法的有效性以求改进 D.分析算法的易懂性 二、填空题 1、数据结构是一门研究非数值计算的程序设计问题中计算机的以及它们之间的和运算等的学科。 2、线性结构中元素之间存在的关系,树形结构中元素之间存在的关系, 图形结构中元素之间存在的关系。 3、________是数据不可分割的最小单元,是具有独立含义的最小标识单位。例如构成一个数据元素的字段、域、属性等都可称之为________。 4、数据的________指数据元素及其关系在计算机存储器内的表示。_________是逻辑结构在计算机里的实现,也称之为映像。 5、所谓算法(Algorithm)是对特定问题求解方法和步骤的一种描述,它是指令的一组__________,其中每个指令表示一个或多个操作。 三、问答题 1、用大O形式写出下面算法的时间复杂度: i=0; s=0; while(s<n) { i++; s+=i; } 2、写出以下算法的时间复杂度: for(i=0; i<m; i++) for(j=0 ; j<t; j++) c[i][j]=0; for(i=0;i<m;i++) for(j=o; j

数据结构作业及答案

第一章绪论 一、选择题 1.数据结构是一门研究非数值计算的程序设计问题中计算机的1以及它们之间的2和运算等的学科。1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像 2 A.结构 B.关系 C.运算 D.算法 2.数据结构被形式地定义为(K, R),其中K是1的有限集,R是K上的2有限集。 1 A.算法 B.数据元素 C.数据操作 D.逻辑结构 2 A.操作 B.映像 C.存储 D.关系 3.在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 4.线性结构的顺序存储结构是一种1的存储结构,线性表的链式存储结构是一种2的存储结构。A.随机存取 B.顺序存取 C.索引存取 D.散列存取 5.算法分析的目的是1,算法分析的两个主要方面其一是指2,其二是指正确性和简单性。1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2 A.空间复杂度和时间复杂度 B.研究算法中的输入和输出的关系 C.可读性和文档性 D.数据复杂性和程序复杂性k 6.计算机算法指的是1,它必须具备输入、输出和2等5个特性。 1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性 D.易读性、稳定性和安全性 7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。A.正确 B.不正确 8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。 A.必须连续的 B.部分地址必须连续的 C.一定是不续的D连续不连续都可以 9.以下的叙述中,正确的是。A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。A.正确B.不正确 二、填空题1.数据逻辑结构包括三种类型、和,树形结构和图形结构合称为。2.在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。3.算法的五个重要特性是、、、、。 4.下面程序段的时间复杂度是。 for( i = 0; i < n; i++) for( j = 0; j < m; j++) A[i][j] = 0; 5.下面程序段的时间复杂度是。 i = s = 0; while ( s < n) { i ++; /* i = i +1*/ s += i; /* s = s + i*/ } 6.下面程序段的时间复杂度是。 s = 0; for( i = 0; i < n; i++) for( j = 0; j < n; j++) s += B[i][j]; sum = s; 7.下面程序段的时间复杂度是。 i = 1; while ( i <= n ) i = i * 3;

相关文档