数据结构练习习题解答.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
习题一 填空题 ( 数据元素、或元素、或结点、或顶点、或记录 )是数据的基本单位,在计算机程序中作为一个整体进行考虑和处理。 (数据项、或字段 )是数据的最小单位,(数据元素 )是讨论数据结构时涉及的最小数据单位。 从逻辑关系上讲,数据结构主要分为 ( 集合 ) 、 ( 线性结构 ) 、 ( 树结构 ) 和( 图) 。 数据的存储结构主要有( 顺序存储结构 )和(链式存储结构 )两种基本方法,不论哪种存储结构,都要存储两方面的内容: (数据元素 )和(它们之间的关系 )。 算法具有 5 个特性,分别是( 输入)、(输出)、(有穷性)、(确定性)、(可行性)。 算法的描述方法通常有 ( 自然语言 ) 、( 流程图 ) 、 ( 程序设计语言 ) 、( 伪代码 )4 种,其中, ( 伪代码 ) 被称为算法语言。 一般情况下,一个算法的时间复杂度是算法( 输入规模 )的函数。 设待处理问题的规模为n, 若一个算法的时间复杂度为一个常数,则表示成数量级的形式为 (O(1)) ,若为 n*log 25n, 则表示成数量级的形式为 ( O(n*log 2n) ) 。 2. 选择题 : (1) C, D (2) B (3) B (4) A (5) D (6) A (7) C (8) C, E 习题二 填空题 在顺序表中, 等概率情况下, 插入和删除一个元素平均需移动 ( 表长的一半 ) 个元素,具体移动元素的个数与 ( 表的长度 ) 和 ( 数据元素所在的位置 ) 有关。 一个顺序表的第一个元素的存储地址是 100,每个数据元素的长度是 2,则第 5 个数据元素的存储地址是( 108)。 设单链表中指针 p 指向单链表的一个非空结点 A,若要删除结点 A 的直接后继,则需要修改指针 的操作为( p->next=(p->next)->next, 或者 q=p->next; p->next=q->next )。 单链表中设置头结点的作用是 ( 方便运算 , 减少程序的复杂性,使得空表和非空表处理统一 ) 。 非空的循环单链表由头指针 head 指示,则其尾结点 ( 由指针 p 所指 ) 满足 ( p->next=head ) 。 (6) 在 有 尾 指 针 rear 指 示 的 循 环 单 链 表 中 , 在 表 尾 插 入 一 个 结 点 s 的 操 作 序 列 是 ( s->next=rear->next; rear->next=s; rear=s ),删除开始结点的操作序列是 ( q=rear->next->next; rear->next->next=q->next; delete q;  )。 注:假设此循环单链表有表头结点 (7) 一个具有 n 个结点的单链表, 在 p 所指结点后插入一个新结点 s 的时间复杂性为 ( O(1) 定值 x 的结点后插入一个新结点的时间复杂性为 ( O(n ) )。  );在给 可由一个尾指针惟一确定的链表有 ( 循环链表 ) 、 ( 双链表 ) 、( 双循环链表 ) 。 2. 选择题 : (1) A,B (2) D (3) B (4) A (5) A (6) D (7) B (8) B (9) C (10) B (11) B (12) D (13) A (14) A 算法设计 设计一个时间复杂度为 O(n) 的算法。实现将数组 A[n] 中所有元素循环左移 k 个位置。 算法思想:要使 a1 akak+1 an -> a k+1 ana1 ak, 可以先让 a1 akak+1 an->a k a1an ak+1, 再让 ak a 1 an ak+1 -> a k+1 ana1 ak ,参见第 1 章 16 页的思想火花 算法: void converse(T a[], int i, int j){ for(s=i; s<=(i+j)/2;s++) 解法 1:void tiaozhen(T A[],int n) { s=0; t=n-1; while(s<t) { while( A[s]%2!=0) s++; 链表的程序如下,设单链表有表头结点 . void LinkList::converse() { p=first->next; first->next=NULL; while(p){ q=p->next; p->next=first->next; first->next=p;p=q; } } 假设在长度大于 1 的循环链表中,既无头结点也无头指针, s 为指向链表中某个结点的指针,试编写算法删除结点 s 的前驱结点。 void LinkList::deleteS(Node<T> *s) {p=s; while(p->next->next!=s) p=p->n

文档评论(0)

zdq9873 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档