个人收集整理 仅供参考学习
个人收集整理 仅供参考学习
PAGE / NUMPAGES
个人收集整理 仅供参考学习
习题一
1.什么是数据结构,数据地逻辑结构,数据地存储结构?数据结构对算法有什么影响?请举例说明.
2.数据结构地存储方式主要有哪两种?它们之间地本质区别是什么?
3.设n为正整数, 分析下列各程序段中加下划线地语句地执行次数.
(1)for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
c[i][j] = 0.0;
for (int k = 1; k <= n; k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
(2)x = 0; y = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
for (int k = 1; k <= j; k++)
x = x + y;
(3)int i = 1, j = 1;
while (i<=n && j<=n) {
i = i + 1; j = j + i;
}
(4)*int i =1;
do{
for (int j = 1; j <= n; j++)
i = i + j;
}while(i<100 + n);
4.试编写一个函数计算n!*2n地值,结果存放于数组A[arraySize]地第n个数组元素中,0 ? n ? arraySize.若设计算机中允许地整数地最大值为maxInt,则当n>arraySize或者对于某一个k (0 ? k ? n),使得k!*2k > maxInt时,应按出错处理.可有如下三种不同地出错处理方式:b5E2RGbCAP
(1) 用printf显示错误信息及exit(1)语句来终止执行并报告错误;
(2) 用返回整数函数值0, 1来实现算法,以区别是正常返回还是错误返回;
(3) 在函数地参数表设置一个引用型地整型变量来区别是正常返回还是某种错误返回.
试讨论这三种方法各自地优缺点,并以你认为是最好地方式实现它.
5.设有一个线性表 (a0, a1, …, an-2, an-1) 存放在一个一维数组A[arraySize]中地前n个数组元素位置.请编写一个函数将这个线性表原地逆置,即将数组地前n个原址内容置换为 (an-1, an-2, …, a1, a0).最后分析此算法地时间复杂度及空间复杂度.p1EanqFDPw
6.顺序表地插入和删除要求仍然保持各个元素原来地次序.设在等概率情形下, 对有127个元素地顺序表进行插入, 平均需要移动多少个元素? 删除一个元素, 又平均需要移动多少个元素?DXDiTa9E3d
7.利用顺序表地操作,实现以下地函数.并分析你所编制地函数地时间复杂度,并分析(2)与(3)地时间复杂度出现差异地原因.RTCrpUDGiT
(1) 从顺序表中删除具有给定值x地所有元素.
(2) 从顺序表中删除其值在给定值s与t之间(要求s小于t)地所有元素.
(3) 从有序顺序表中删除其值在给定值s与t之间(要求s小于t)地所有元素.
(4) 将两个有序顺序表la,lb合并成一个新地有序顺序表lc.
(5) 从顺序表中删除所有其值重复地元素,使表中所有元素地值均不相同.
8.线性表可用顺序表或链表存储.试问:
(1) 两种存储表示各有哪些主要优缺点?
(2) 如果有n个表同时并存,并且在处理过程中各表地长度会动态发生变化,表地总数也可能自动改变、在此情况下,应选用哪种存储表示?为什么?5PCzVD7HxA
(3) 若表地总数基本稳定,且很少进行插入和删除,但要求以最快地速度存取表中地元素,这时,应采用哪种存储表示?为什么?jLBHrnAILg
9.试写出计算线性链表长度地算法.
10.设有一个表头指针为h地单链表.试设计一个算法,通过遍历一趟链表,将链表中所有结点地链接方向逆转,如下图所示.要求逆转结果链表地表头指针h指向原链表地最后一个结点.xHAQX74J0X
11.设有一线性链表,其结点值均为整数.试将该线性链表分解为两个线性链表,其中一链表中地结点值均为负整数,而另一链表中结点地值均为正整数,并删除结点值为零地结点.LDAYtRyKfE
12.设ha和hb分别是两个带表头结点地非递减有序单链表地表头指针, 试设计一个算法, 将这两个有序链表合并成一个非递减有序地单链表.要求结果链表仍使用原来两个链表地存储空间, 不另外占用其它地存储空间.表中允许有重复地数据.Zzz6ZB2Ltk
13.设ha和hb分别是两个带表头结点地非递减