资源描述:
《计算机软件技术基础习题一》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、习题一1.什么是数据结构,数据的逻辑结构,数据的存储结构?数据结构对算法有什么影响?请举例说明。2.数据结构的存储方式主要有哪两种?它们之间的本质区别是什么?3.设n为正整数,分析下列各程序段中加下划线的语句的执行次数。(1)for(inti=1;i<=n;i++)for(intj=1;j<=n;j++){c[i][j]=0.0;for(intk=1;k<=n;k++)c[i][j]=c[i][j]+a[i][k]*b[k][j];}(2)x=0;y=0;for(inti=1;i<=n;i++)for(i
2、ntj=1;j<=i;j++)for(intk=1;k<=j;k++)x=x+y;(3)inti=1,j=1;while(i<=n&&j<=n){i=i+1;j=j+i;}(4)*inti=1;do{for(intj=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)
3、,使得k!*2k>maxInt时,应按出错处理。可有如下三种不同的出错处理方式:(1)用printf显示错误信息及exit(1)语句来终止执行并报告错误;(2)用返回整数函数值0,1来实现算法,以区别是正常返回还是错误返回;(3)在函数的参数表设置一个引用型的整型变量来区别是正常返回还是某种错误返回。试讨论这三种方法各自的优缺点,并以你认为是最好的方式实现它。5.设有一个线性表(a0,a1,…,an-2,an-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表
4、原地逆置,即将数组的前n个原址内容置换为(an-1,an-2,…,a1,a0)。最后分析此算法的时间复杂度及空间复杂度。6.顺序表的插入和删除要求仍然保持各个元素原来的次序。设在等概率情形下,对有127个元素的顺序表进行插入,平均需要移动多少个元素?删除一个元素,又平均需要移动多少个元素?7.利用顺序表的操作,实现以下的函数。并分析你所编制的函数的时间复杂度,并分析(2)与(3)的时间复杂度出现差异的原因。(1)从顺序表中删除具有给定值x的所有元素。(2)从顺序表中删除其值在给定值s与t之间(要求s小于t
5、)的所有元素。(3)从有序顺序表中删除其值在给定值s与t之间(要求s小于t)的所有元素。(4)将两个有序顺序表la,lb合并成一个新的有序顺序表lc。(5)从顺序表中删除所有其值重复的元素,使表中所有元素的值均不相同。8.线性表可用顺序表或链表存储。试问:(1)两种存储表示各有哪些主要优缺点?(2)如果有n个表同时并存,并且在处理过程中各表的长度会动态发生变化,表的总数也可能自动改变、在此情况下,应选用哪种存储表示?为什么?(3)若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,
6、这时,应采用哪种存储表示?为什么?9.试写出计算线性链表长度的算法。10.设有一个表头指针为h的单链表。试设计一个算法,通过遍历一趟链表,将链表中所有结点的链接方向逆转,如下图所示。要求逆转结果链表的表头指针h指向原链表的最后一个结点。11.设有一线性链表,其结点值均为整数。试将该线性链表分解为两个线性链表,其中一链表中的结点值均为负整数,而另一链表中结点的值均为正整数,并删除结点值为零的结点。12.设ha和hb分别是两个带表头结点的非递减有序单链表的表头指针,试设计一个算法,将这两个有序链表合并成一个非
7、递减有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间。表中允许有重复的数据。13.设ha和hb分别是两个带表头结点的非递减有序单链表的表头指针,试设计一个算法,将这两个有序链表合并成一个非递增有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间。表中允许有重复的数据。14.在一个循环链表中寻找值为x的结点,并将该结点移到第一个结点之前。15.对于下面的每一步,画出栈元素和栈顶指针的示意图:(1)栈初始化;(2)元素x入栈;(3)元素y入栈;(4)
8、出栈(5)栈初始化(6)元素z入栈16.铁路进行列车调度时,常把站台设计成栈式结构的站台,如右图所示。试问:(1)设有编号为1,2,3,4,5,6的六辆列车,顺序开入栈式结构的站台,则可能的出栈序列有多少种?(2)若进站的六辆列车顺序如上所述,那么是否能够得到435612,325641,154623和135426的出站序列,如果不能,说明为什么不能;如果能,说明如何得到(即写出"进栈"或"出栈"的序列)。17.试证明:若借助栈