ImageVerifierCode 换一换
格式:DOCX , 页数:81 ,大小:234.49KB ,
资源ID:29628653      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29628653.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构 习题.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构 习题.docx

1、数据结构 习题第一章 概论 1第二章 线性表 7第三章 栈和队列 15第四章 串 24第五章 数组和广义表 30第六章 树 37第七章 图 48第八章 查找 60第九章 排序 71第一章 概论一、选择题算法指的是A计算机程序 B解决问题的计算方法C排序方法案 D解决问题步骤的有限序列平均时间复杂度是指所有可能的输入实例均以A 等概率出现的情况下,算法的期望运行时间 B 不等概率出现的情况下,算法的期望运行时间C 最坏情况下,算法的期望运行时间D 最好情况下,算法的期望运行时间通过建立结点的关键字与存储地址之间的映像关系所实现的存储方法是A顺序存储 B链式存储C索引顺序存储 D散列存储方法数据的

2、运算是数据结构不可分割的一个方面,根据运算集合及运算的性质不同A可以形成不同的数据结构 B不会导致不同的数据结构C逻辑结构将发生变化 D逻辑结构、存储结构都将会发生变化数据的基本单位是A数据对象 B数据元素C数据项 D数据类型线性结构是一种()一对一的关系一对多的关系多对一的关系多对多的关系链式存储结构存储元素的存储单元的地址()必须是连续的必须是不连续的可以连续也可以不连续与顺序存储结构相同评价一个算法优劣除了要考虑正确性、易读性和健壮性外,还应考虑()时间效益和空间效率空间效率时间效益软硬件环境设计算法时,应辟免使算法的时间复杂度为()常量阶线性阶二次阶指数阶程序段如下 for( i=1;

3、 in ; i+) for ( j=1;j i;j+) y+;该算法的时间复杂度为()(1)O(n)O(n2)O(lgn)二、填空题数据的逻辑结构与数据元素本身的 和形式无关。数据结构包含三方面的内容,分别是 、 、 。数据元素是数据的基本单位,数据项是数据的 。算法的时间复杂度不仅与问题的规模n有关,还与 有关。顺序存储结构中逻辑上相邻的元素在物理位置上 。数据的逻辑结构是从逻辑关系上描述数据,它与数据的 无关,是独立于计算机的。最坏情况下算法的时间复杂度是算法在任何输入实例上运行时间的 。算法具有的五个重要特性是有效性、 、 输入和输出。 数据的存储结构的基本存储方法是顺序存贮、链式存储、

4、 和 。.设有三个函数f,g,h分别是 f(n)100n3+n2+1000 g(n)25n3+5000n2 h(n)+5000nlgn请判断下列关系式成立的是 。 (1) f(n)O(g(n) (2) g(n)O(f(n) (3) h(n)O() (4) h(n)O(nlgn)三、阅读程序题估计下列程序段的时间复杂度。 temp=Ii=jj=temp分析下列程序段的间复杂度。x=0 ; y=0;for(k=1;k=n;k+)x=x+1;for(i=1;i=n;i+) for(j=1;j=n;j+)y+;阅读程序题,估计时间复杂度x=0;for( i=1, j=1; i+j=n ;i+,j+)

5、x+;阅读程序题,估计时间复杂度x=1;for(i=1; i=n; i+ ) for(j=1;j=i;j+) for(k=1,knexthead时,( ) A. 是非空表 C. 是空表 C. 上溢出错 D. 表中有一个表结点9. 在长度为n的顺序表中删除第i个元素,须移动元素的个数是( )A. i B. n C. n-i+1 D. n-i10. 已知p指向单链表中的某个结点,执行语句:qp-next; p-dataq-data;p-nextq-next;free(q);的功能是( ) A. 删除p所指结点 B. 删除p所指结点的后继结点 C. 删除p所指结点的前趋结点 D. p所指结点与后继结

6、点值互换11线性表采用链式存储时,结点的存储地址()A必须是不连续的B连续与否均可C必须是连续的C和头结点的存储地址连续12在长度为n的顺序表的第i(1in+1)个位置上插入一个元素,元素的移动次数为( )An-i+1 Bn-i13对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( ) A顺序表 B用头指针表示的单循环链表 C用尾指针表示的单循环链表 D单链表14在单链表中,指针p指向元素为x的结点,实现“删除x的后继”的语句是( )App-next; Bp-nextp-next-next;Cp-nextp; Dpp-next-next;15在头指针为head且表长大于1的单循环

7、链表中,指针p指向表中某个结点,若p-next-nexthead,则( )Ap指向头结点 Bp指向尾结点C*p的直接后继是头结点 D*P的直接后继是尾结点二、填空题1在线性表的顺序存储结构上,逻辑上相邻的元素在物理位置上 。2顺序表是一种 ,存取速度快,但不便于进行 和 操作。3在n个元素的顺序表中进行插入操作,需平均移动 个结点,。具体的移动次数取决于 和 。4删除p所指结点,在双向链表中的时间复杂度为 ,在单链表中的时间复杂度为 。5在单循环链表中设置尾指针,其优点是便于在 和 操作,其时间复杂度均为 。6在如图所示的链表中,若在指针p所指的结点之后插入数据域值为a结点,则可用下列两个语句

8、实现该操作,它们依次是_和 。7在循环链表中,可根据某一结点的地址遍历整个链表,在单链表中,需要知道 ,才能遍历。8结点数据本身所占的存储量和整个结点结构所占的存储量之比称为存储密度,顺序表存储密度为 ,链表的存储密度 。9在线性表中频繁进行插入和删除,应选择 存储结构,否则应选择 。10求一个单链表的长度的时间复杂度为 。三、阅读程序题1阅读程序指出程序功能void trans(linklist *la,linklist *lb,int a ,int n) int k;linknode *p; *la(linknode *)malloc(sizeof(linknode);(*la)-next

9、NULL; *lb(linknode *)malloc(sizeof(linknode);(*lb)-nextNULL;k0;while(kdataak; if (k%2) p-next(*la)-next;(* la)-nextp;else p-next(*lb)-next; (*lb)-nextp;k+;2阅读程序指出程序功能void delnode(linknode *p)/p指向带头结点循环链表中某结点linknode *q;qp-next;while(q-next!p)qq-next;q-datap-data;q-nextp-next;free(p);3阅读程序指出程序功能,并指出循

10、环体执行次数。void delseqlist(seqlist *S,int i,int k) int j,n0; for(ji+k;jlen; j+) *S-dataj-k(*S)-dataj; n+; (*S)-len(*S)-len-n; 4下述算法的功能是什么?Linklist demo(Linklist L)/L是无头结点的单链表 Listnode *Q,*p; if(L&L-next) QL;LL-next;pL; while(p-next) pp-next; p-nextQ;Q-nextNULL; return L;/demo 四、算法设计题1设有一个带头结点的单链表,试设计统计链

11、表中值为k的结点个数的算法。2设线性表采用顺序存储结构,将表分拆成两个线性表,使小于x的元素作为一个表,使其它元素作为另一个表。3数序列(元素数大于2)以单链表存储,试遍写算法,判断序列是否为等差数列。4是分别用顺序表和单链表作为存储结构,实现将线性表(a0,a1,an-1)就地逆置的操作,所谓“就地”是指辅助空间应为O(1)。5设顺序表L是一个递增有序表,试写一算法将x插入L中,并使L仍是一个有序表。6设单链表L是一个递减有序表,试写一算法将x插入L中,并使L仍保持有序性。7已知L1和L2分别指向的两个单链表的头结点,且已知其长度分别为m和n。试写一算法将这两个单链表连接在一起,并分析你的算

12、法的时间复杂度。8设A和B是两个单链表,其表中元素递增有序。试写一个算法将A和B归并成一个按元素值递减有序的单链表,并要求辅助空间为O(1),请分析算法的时间复杂度。9已知单链表L是一个递增有序表,试写一高效算法,删除表中值大于min且小于的max结点(若表中有这样的结点),同时释放被删除结点的空间,这里max和nin是两个给定的参数。请分析你的算法的时间复杂度。10写一算法将单链表中值重复的结点删除,是所得的结果表中各结点值均不相同。11假设在长度大于1的单循环链表中,既无头结点也无头指针。s为指向链表中某个结点的指针,是编写算法删除结点*s的直接前趋结点。习题答案一、 选择题1D 2A 3

13、C4A5C6B7A8C9D10A 11B 12A 13C 14B 15D 二、 填空题1也相邻;2随机存取结构、插入、删除;3n/2 ,表长,插入位置;40(1),O(n);5表头,表尾,O(1); 6S-nextp-next;p-nexts;7头指针;81,1;9链式,顺序存储结构; 10O(n);三、 阅读程序题1【答案】将数组a 中元素按奇、偶分类,分别建成单链表la和lb。2【答案】删除循环链表中p所指结点的前趋结点。3【答案】在顺序表上删除从第i个元素起连续k个元素。4【答案】当单链表为空表或只有一个结点时,其结构不变,若多于一个结点时,将第一个结点移至表末作为最后一个结点,而原来第

14、二个结点作为链表的第一个结点。第三章 栈和队列一、选择题1若一个栈的输入序列是1,2,3,n,输出序列的第一个元素是n,则第i个输出的元素是( ) A. n-i B. n-i+1 C. i D. i-12栈具有( ) A. 先进先出的特点 B. 后进先出的特点 C. 进出次序是随机的 D. 操作与线性表相同3入栈序列为a,b,c,d,不可能得到的出栈序( ) A. abcd B. dcba C. cdba D. adbc4支持递归算法的数据结构是( ) A. 队列 B. 线性表 D. 栈 D. 树5容量为maxsize的循环队列Q队满的判定条件是( ) A. Q.rear(Q.front+1)

15、%maxsize B. Q.frontQ.rear C. Q.front(Q.rear+1)%maxsize D. Q.frontQ.rear+16长度为n的链队列用单循环链表表示设置头指针,入队的时间复杂度是( ) A. O(1) B. O(n) C. O(n2) D. O(lgn)7设有一顺序栈S,元素1,2,3,4,5,6一次入栈,出栈序列为:2,3,4,6,5,1,则栈的容量至少应该是( ) A. 2 B. 3 C. 5 D. 68向一个栈顶指针为top的链栈插入s所指结点的操作是( ) A. s-nexttop; tops; B. tops-next; C. s-nexttop-ne

16、xt;tops; D. top-nexts;tops;9. 容量为maxsize的循环队列Q的长度是( ) A. (Q.rear-Q.front+maxsize)&maxzise B. Q.rear-Q.front C. Q.rear-Q.front+maxsize D. Q.front-Qrear 10由两个栈共享一个向量空间的好处是()A减少存取时间,降低下溢发生的机率B节省存储空间,降低上溢发生的机率C减少存取时间,降低上溢发生的机率D节省存储空间,降低下溢发生的机率二、填空题1队列的逻辑特点是 ,栈的逻辑特点是 。2栈结构中,允许插入和删除的一端称为 ,不允许进行插入和删除的一端称为

17、。3循环队列为空的判定条件是 。4设长度为n的链队列用单循环链表表示,若只设尾指针,则入队操作的时间复杂度是 ,出队操作的时间复杂度是 。若只设头指针,则入队操作的时间复杂度是 ,出队操作的时间复杂度是 。5栈和队列是操作受限制的 。6子程序嵌套调用和递归调用依靠 实现。7在循环队列Q中,设置时队头指针Q.front指向队头元素和队列长度Q.len,则入队操作的语句序列是 ; ; 。8两个栈共享一个向量空间,这样做可节省 ,避免 。9出栈操作的时间复杂度是 ,入栈操作的时间复杂度是 。10顺序栈中,出栈操作的语句序列是 ; ; 。11栈顶的位置是随着操作而变化12假设以S和X分别表示进栈和退栈

18、操作,则对输入序列a,b,c,d,e进行一系列栈操作SSXSXSSXXX之后,得到的输出序列为_。13如图两个栈共享一个向量空间,top1和top分别为指向两个栈顶元素的指针,则“栈满”的判定条件是_。三、阅读程序题1阅读程序指出程序功能void stackexp1(linklist la) linknode p,q; Seqstack S; Initstack(&S); pla-next; while(p) push(&S,p-data);pp-next; pla-next; while(!stackempty(S) p-datapop(&S);pp-next;2阅读程序指出程序功能void

19、 stackexp2(Seqstack *S) datatype x; Cirqueue Q; Initqueue(&Q); while(!Stackempty(S) xpop(&S);Enqueue(&Q,x); while(!Queueempty(S) xDelqueue(&Q);push(&S,x);3阅读程序void exmple3(Seqstack *S,linklist *La,datatype x)linknode *p; datatype t; Seqstack S1; *LaNULL;Initstack(&S1); while(!Stackempty(S) tPop(&S);

20、 if (tdatat; p-nextla; lap; while(!Stackempty(S1) Push(&S,Pop(&S1); 指出程序功能;若栈S初始状态为:(3,18,23,9,20),右端为栈顶,x为18,算法运行后,La和S的状态。4如图所示,利用同一循环向量空间实现两个队列,其类型Queue2定义如下:typedef struct DataType dataMaxSize; int front2,length2; Queue2;对于i0或1,fronti和lengthi分别为第i个队列的头指针和长度域。请在空缺处填入合适的内容,实现第i个循环队列的入队操作。int EnQue

21、ue(Queue2*Q,int i,DataType x)/若第i个队列不满,则元素x入队列,并返回1,否则返回0 if(i1)return 0; if( (1) ) return 0; Q-data (2) x; Q-length (3) +; return 1;5设栈S(1,2,3,4,5,6,7),其中7为栈顶元素。请写出调用algo(&s)后栈S的状态。 void algo(Stack *S) int i0; Queue Q; Stack T; InitQueue(&Q);InitStack(&T); while (!StackEmpty(S) if(i!i)!0)Push(&T,Po

22、p(&S); else EnQueue(&Q,Pop(&S); while(!QueueEmpty(Q) Push(&S,DeQueue(&Q); while(!StackEmpty(T) Push(&S,Pop(&T); 四、算法设计题 1.利用栈实现队列逆置。2.两个栈共享一个向量Sa0.m-1,栈底设在两端,已知一个栈顶指针和另一栈的元素数。写出入栈操作算法;写出出栈操作算法。3回文是指正读和反读均相同的字符序列,例如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文(提示:将一半字符入栈)。4利用栈的基本操作,写一个返回栈S中结点个数

23、的算法int stacksize(Seqstack S),并说明S为何不用作为指针参数?5设计算法判断一个算术表达式的圆括号是否正确配对 。 (提示:凡遇(就进栈,遇)就退掉栈顶的(,表达式扫描完毕,栈应为空)6一个双向栈S是在同一向量空间里实现的两个栈,它们的栈底分别设在向量空间的两端。试为此双向栈设计初始化Initstack(S)、入栈push(S,x,i)和出栈pop(i)算法,其中,i为0或1用于指示栈号。7Ackerman函数的定义如下: n+1 当m0 时 AKM(m,n) AKM(m-1,1) 当m0,n0时 AKM(m-1,AKM(m,n-1) 当m0, n0时请写出递归算法。 8用第二种方法,既少用一个元素空间的方法来区别循环队列的空和满,试为其设计置队空、判断队空、判断队满、出队、入队、取队头元素等六个基本操作的算法。9假设以带头结点的循环链表表示队列,并且只是一个指针指向队尾元素结点,试编写相应的置队空、判断队空、出队和入队等算法。10对于循环向量中的循环队列,写出求队列长度的公式。11假设循环队列中只设rear和quelen来分别指示队尾元素的位置和队中元素的个数,试给出循环队列的队满条件

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1