数据结构习题及答案——严蔚敏_课后习题答案20794.pdf
-
资源ID:83623496
资源大小:353.49KB
全文页数:8页
- 资源格式: PDF
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
数据结构习题及答案——严蔚敏_课后习题答案20794.pdf
第一章绪论选择题 1.组成数据的基本单位是 A 数据项 B 数据类型 C 数据元素 D 数据变量 2.数据结构是研究数据的以及它们之间的相互关系。A 理想结构物理结构 B 理想结构抽象结构 C 物理结构逻辑结构 D 抽象结构逻辑结构 3.在数据结构中从逻辑上可以把数据结构分成 A动态结构和静态结构 B紧凑结构和非紧凑结构 C线性结构和非线性结构D内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的以及它们之间的和运算等的学科。A 数据元素 B 计算方法 C 逻辑存储 D 数据映像 A 结构 B 关系 C 运算 D 算法 5.算法分析的目的是。A 找出数据结构的合理性 B 研究算法中的输入和输出的关系 C 分析算法的效率以求改进 D 分析算法的易懂性和文档性 6.计算机算法指的是它必须具备输入、输出和等 5 个特性。A 计算方法 B 排序方法 C 解决问题的有限运算序列 D 调度方法 A 可执行性、可移植性和可扩充性 B 可行性、确定性和有穷性 C 确定性、有穷性和稳定性 D 易读性、稳定性和安全性二、判断题 1.数据的机内表示称为数据的存储结构。2.算法就是程序。3.数据元素是数据的最小单位。4.算法的五个特性为有穷性、输入、输出、完成性和确定性。5.算法的时间复杂度取决于问题的规模和待处理数据的初态。三、填空题 1.数据逻辑结构包括_、_、_ 和_四种类型其中树形结构和图形结构合称为_。2.在线性结构中第一个结点_前驱结点其余每个结点有且只有_个前驱结点最后一个结点_后续结点其余每个结点有且只有_个后续结点。3.在树形结构中树根结点没有_结点其余每个结点有且只有_个前驱结点叶子结点没有_结点其余每个结点的后续结点可以_。4.在图形结构中每个结点的前驱结点数和后续结点数可以_。5.线性结构中元素之间存在_关系树形结构中元素之间存在_关系图形结构中元素之间存在_关系。6.算法的五个重要特性是_、_、_、_、_。7.数据结构的三要素是指_、_和_。8.链式存储结构与顺序存储结构相比较主要优点是_。9.设有一批数据元素为了最快的存储某元素数据结构宜用_结构为了方便插入一个元素数据结构宜用_结构。四、算法分析题 1.求下列算法段的语句频度及时间复杂度参考答案选择题 1.C 2.C 3.C 4.A、B 5.C 6.C、B 二、判断题:1、2、3、4、5、三、填空题 1、线性、树形、图形、集合非线性网状 2、没有 1 没有 1 3、前驱 1 后继任意多个 4、任意多个 5、一对一一对多多对多 6、有穷性确定性可行性输入输出 7、数据元素逻辑结构存储结构 8、插入、删除、合并等操作较方便 9、顺序存储链式存储四、算法分析题 fori1 iltn i forj 1 j lti j xx1 分析该算法为一个二重循环执行次数为内、外循环次数相乘但内循环次数不固定与外循环有关因些时间频度 Tn123nnn1/2 有 1/4Tn/n21 故它的时间复杂度为 n2 即 n 与 n2 数量级相同。2、分析下列算法段的时间频度及时间复杂度 for i1iltni for j1jltij for k1kltjk xij-k 分析算法规律可知时间频度Tn112123.123n 由于有1/6 Tn/n3 1故时间复杂度为n3 第二章线性表一、选择题 1.一个线性表第一个元素的存储地址是 100 每个元素的长度为 2 则第 5 个元素的地址是 A110 B108C100 D120 2.向一个有 127 个元素的顺序表中插入一个新元素并保持原来顺序不变平均要移动个元素。A64B63 C63.5 D7 3.线性表采用链式存储结构时其地址。A 必须是连续的 B 部分地址必须是连续的 C 一定是不连续的 D 连续与否均可以 4.在一个单链表中若 p 所指结点不是最后结点在 p 之后插入 s 所指结点则执行 As-gtnextpp-gtnexts B s-gtnextp-gtnextp-gtnexts Cs-gtnextp-gtnextps Dp-gtnextss-gtnextp 5.在一个单链表中若删除p 所指结点的后续结点则执行 Ap-gtnextp-gtnext-gtnext Bpp-gtnext p-gtnextp-gtnext-gtnext Cp-gtnextp-gtnext Dp p-gtnext-gtnext 6.下列有关线性表的叙述中正确的是 A 线性表中的元素之间隔是线性关系 B 线性表中至少有一个元素 C 线性表中任何一个元素有且仅有一个直接前趋 D线性表中任何一个元素有且仅有一个直接后继 7.线性表是具有n个的有限序列n0 A 表元素 B 字符 C 数据元素 D 数据项二、判断题 1.线性表的链接存储表中元素的逻辑顺序与物理顺序一定相同。2.如果没有提供指针类型的语言就无法构造链式结构。3.线性结构的特点是只有一个结点没有前驱只有一个结点没有后继其余的结点只有一个前驱和后继。4.语句 pp-gtnext 完成了指针赋值并使 p 指针得到了 p 指针所指后继结点的数据域值。5.要想删除 p 指针的后继结点我们应该执行 qp-gtnext p-gtnextq-gtnext freeq。三、填空题 1.已知 P为单链表中的非首尾结点在 P 结点后插入 S 结点的语句为_。2.顺序表中逻辑上相邻的元素物理位置相邻单链表中逻辑上相邻的元素物理位置_相邻。3.线性表 La1a2.an 采用顺序存储假定在不同的 n1 个位置上插入的概率相同则插入一个新元素平均需要移动的元素个数是_ 4.在非空双向循环链表中在结点 q 的前面插入结点 p 的过程如下 p-gtpriorq-gtprior q-gtprior-gtnextp p-gtnextq _ 5.已知 L 是无表头结点的单链表是从下列提供的答案中选择合适的语句序列分别实现 1 表尾插入 s 结点的语句序列是_ 2 表 尾 插 入 s 结 点 的 语 句 序 列 是 _ p-gtnexts pL Ls p-gtnexts-gtnext s-gtnextp-gtnext s-gtnextL s-gtnextnull whilep-gtnext Q pp-next whilep-gtnextnull pp-gtnext 四、算法设计题 1.试编写一个求已知单链表的数据域的平均值的函数数据域数据类型为整型。2.已知带有头结点的循环链表中头指针为 head 试写出删除并释放数据域值为 x 的所有结点的 c 函数。3.某百货公司仓库中有一批电视机按其价格从低到高的次序构成一个循环链表每个结点有价格、数量和链指针三个域。现出库销售 m 台价格为 h 的电视机试编写算法修改原链表。4.某百货公司仓库中有一批电视机按其价格从低到高的次序构成一个循环链表每个结点有价格、数量和链指针三个域。现新到 m 台价格为 h的电视机试编写算法修改原链表。5.线性表中的元素值按递增有序排列针对顺序表和循环链表两种不同的存储方式分别编写 C 函数删除线性表中值介于 a 与 bab 之间的元素。6.设 Aa0a1a2.an-1Bb0b1b2.bm-1 是两个给定的线性表它们的结点个数分别是 n 和 m 且结点值均是整数。若nm且 ai bi 0iltn 则AB 若nltm 且aibi 0iltn 则AltB 若存在一个j jltm jltn 且 aibi 0iltj 若 ajltbj 则 AltB 否则 AgtB。试编写一个比较 A 和 B 的 C 函数该函数返回-1 或 0 或 1 分别表示 AltB 或 AB 或 AgtB。7.试编写算法删除双向循环链表中第 k 个结点。8.线性表由前后两部分性质不同的元素组成a0a1.an-1b0b1.bm-1m和n为两部分元素的个数若 线 性 表 分 别 采 用 数 组 和 链 表 两 种 方 式 存 储 编 写 算 法 将 两 部 分 元 素 换 位 成b0b1.bm-1a0a1.an-1 分析两种存储方式下算法的时间和空间复杂度。9.用循环链表作线性表 a0a1.an-1 和 b0b1.bm-1 的存储结构头指针分别为 ah 和 bh 设计 C 函数把两个线性表合并成形如 a0b0a1b1的线性表要求不开辟新的动态空间利用原来循环链表的结点完成合并操作结构仍为循环链表头指针为 head 并分析算法的时间复杂度。10.试写出将一个线性表分解为两个带有头结点的循环链表并将两个循环链表的长度放在各自的头结点的数据域中的 C 函数。其中线性表中序号为偶数的元素分解到第一个循环链表中序号为奇数的元素分解到第二个循环链表中。11.试写出把线性链表改为循环链表的 C 函数。12.己知非空线性链表中 x 结点的直接前驱结点为 y 试写出删除 x 结点的 C 函数。参考答案一、选择题 1.B 2.C 3.D 4.B 5.A 6.A 7、C 二、判断题参考答案 1、2、3、4、5、三、填空题 1、s-gtnextp-gtnext p-gtnexts 2、一定不一定 3、n/2 4、q-gtpriorp 5、16 3 2 2 91 7 四、算法设计题 1、include quotstdio.hquot include quotmalloc.hquot typedef struct node int data struct node link NODE int averNODE head int i0sum0ave NODE p phead whilepNULL pp-gtlinki sumsump-gtdata avesum/i return ave 2、include quotstdio.hquot include quotmalloc.hquot typedef struct node int data/假设数据域为整型/struct node link NODE void del_linkNODE headint x/删除数据域为 x 的结点/NODE pqs phead qhead-gtlink whileqhead ifq-gtdatax p-gtlinkq-gtlink sq qq-gtlink frees else pq qq-gtlink 3、void delNODE headfloat priceint num NODE pqs pheadqhead-gtnext whileq-gtpriceltpriceampampqhead pq qq-gtnext ifq-gtpriceprice q-gtnumq-gtnum-num else printfquot 无此产品 quot ifq-gtnum0 p-gtnextq-gtnext freeq 4、include quotstdio.hquot include quotmalloc.hquot typedef struct node float price int num struct node next NODE void insNODE headfloat priceint num NODE pqs pheadqhead-gtnext whileq-gtpriceltpriceampampqhead pq qq-gtnext ifq-gtpriceprice q-gtnumq-gtnumnum else sNODE mallocsizeofNODE s-gtpriceprice s-gtnumnum s-gtnextp-gtnext p-gtnexts 5、顺序表算法思想从 0 开始扫描线性表用 k 记录下元素值在a与b之间的元素个数对于不满足该条件的元素前移k个位置最后修改线性表的长度。void delelemtype listint nelemtype aelemtype b int i0k0 whileiltn iflistigtaampamplistiltb k else listi-klisti i nn-k/修改线性表的长度/循环链表:void delNODE headelemtype aelemtype b NODE pq p headqp-gtlink/假设循环链表带有头结点/whileqhead ampamp q-gtdatalta pq qq-gtlink whileqhead ampamp q-gtdataltb rq qq-gtlink freer ifpq p-gtlinkq 6、define MAXSIZE 100 int listAMAXSIZElistBMAXSIZE int nm int compareint aint b int i0 whileaibiampampiltnampampiltm i ifnmampampin return0 ifnltmampampin return-1 ifngtmampampim return1 ifiltnampampiltm ifailtbi return-1 else ifaigtbi return1 7、void delDUNODE headint i DUNODE p ifi0 headhead-gtnext head-gtpriorNULL return0 Else forj0jltiampamppNULLj pp-gtnext ifpNULLjgti return1 p-gtprior-gtnextp-gtnext p-gtnext-gtpriorp-gtproir freep return0 8.顺序存储:void convertelemtype listint lint h/将数组中第l个到第h个元素逆置/int i elemtype temp forihiltlh/2i templisti listilistlh-i listlh-itemp void exchangeelemtype listint nint m convertlist0nm-1 convertlist0m-1 convertlistmnm-1 该算法的时间复杂度为 Onm 空间复杂度为 O1 链接存储:不带头结点的单链表 typedef struct node elemtype data struct node link NODE void convertNODE headint nint m NODE pqr int i phead qhead fori0iltn-1i qq-gtlink/q 指向 an-1 结点/rq-gtlink q-gtlinkNULL whiler-gtlinkNULL rr-gtlink/r指向最后一个bm-1结点/headq r-gtlinkp 该算法的时间复杂度为Onm但比顺序存储节省时间不需要移动元素只需改变指针空间复杂度为 O1 9.typedef struct node elemtype data struct node link NODE NODE unionNODE ahNODE bh NODE abheadrq headah aah bbh whilea-gtlinkahampampb-gtlinkbh ra-gtlink qb-gtlink a-gtlinkb b-gtlinkr ar bq ifa-gtlinkah/a 的结点个数小于等于 b 的结点个数/a-gtlinkb whileb-gtlinkbh bb-gtlink b-gtlinkhead ifb-gtlinkbh/b的结点个数小于 a 的结点个数/ra-gtlink a-gtlinkb b-gtlinkr returnhead 该算法的时间复杂度为 Onm 其中 n 和 m 为两个循环链表的结点个数.10.typedef struct node elemtype data struct node link NODE void analyzeNODE a NODE rhqhrqp int i0j0/i为序号是奇数的结点个数 j为序号是偶数的结点个数/pa rhNODE mallocsizeofNODE/rh 为序号是奇数的链表头指针/qhNODE mallocsizeofNODE/qh 为序号是偶数的链表头指针/rrh qqh whilepNULL r-gtlinkp rp i pp-gtlink ifpNULL q-gtlinkp qp j pp-gtlink rh-gtdatai r-gtlinkrh qh-gtdataj q-gtlinkqh 11.typedef struct node elemtype data struct node link NODE void changeNODE head NODE p phead ifheadNULL whilep-gtlinkNULL pp-gtlink p-gtlinkhead 12.typedef struct node elemtype data struct node link NODE void delNODE xNODE y NODE pq elemtype d1 py qx whileq-gtnextNULL/把后一个结点数据域前移到前一个结点/p-gtdataq-gtdata qq-gtlink pq p-gtlinkNULL/删除最后一个结点/freeq 第三章栈和队列一、选择题 1.一个栈的入栈序列是 abcde 则栈的不可能的输出序列是。A edcbaBdecbaCdceab Dabcde 2.栈结构通常采用的两种存储结构是。A 线性存储结构和链表存储结构 B 散列方式和索引方式 C 链表存储结构和数组 D 线性存储结构和非线性存储结构 3.判定一个栈 ST 最多元素为 m0 为空的条件是。A ST-top0 BST-top0 CST-topm0 DST-topm0 4.判定一个栈 ST 最多元素为 m0 为栈满的条件是。AST-gttop0 BST-gttop0 CST-gttopm0-1DST-gttopm0-1 5.一个队列的入列序列是 1234 则队列的输出序列是。A4321B1234C1432D3241 6.循环队列用数组A0m-1存放其元素值已知其头尾指针分别是front和 rear 则当前队列中的元素个数是 Arear-frontmm B rear-front1 Crear-front-1Drear-front 7.栈和队列的共同点是 A 都是先进后出 B 都是先进先出 C 只允许在端点处插入和删除元素 D没有共同点 8.表达式 abc-d 的后缀表达式是。Aabcd-Babcd-Cabcd-D-abcd 9.4 个元素 a1a2a3和 a4 依次通过一个栈在 a4 进栈前栈的状态则不可能的出栈序是 Aa4a3a2a1 Ba3a2a4a1 Ca3a1a4a2 Da3a4a2a1 10.以数组 Q0.m1 存放循环队列中的元素变量 rear 和 qulen 分别指示循环队列中队尾元素的实际位置和当前队列中元素的个数队列第一个元素的实际位置是 Arearqulen Brearqulenm Cmqulen D1rearmqulen m 二、填 空 题 1.栈 的 特 点 是_队列的特点是_。2.线性表、栈和队列都是_结构可以在线性表的_位置插入和删除元素对于栈只能在_插入和删除元素对于队列只能在_插入元素和_删除元素。3.一个栈的输入序列是 12345 则栈有输出序列 12345 是_。正确/错误 4.设栈S和队列Q的初始状态皆为空元素a1a2a3a4a5和a6依次通过一个栈一个元素出栈后即进入队列Q若6个元素出队列的顺序是a3a5a4a6a2a1则栈S至少应该容纳_个元素。三、算法设计题 1.假设有两个栈 s1 和 s2 共享一个数组 stackM 其中一个栈底设在 stack0 处另一个栈底设在 stackM-1 处。试编写对任一栈作进栈和出栈运算的 C 函数 pushxi 和 popiil2。其中 i1 表示左边的栈 i2 表示右边的栈。要求在整个数组元素都被占用时才产生溢出。2.利用两个栈 s1s2 模拟一个队列时如何用栈的运算来实现该队列的运算写出模拟队列的插入和删除的 C 函数。一个栈 s1 用于插入元素另一个栈 s2 用于删除元素.参考答案一、选择题 1.C 2.A 3.B 4.B 5.B 6.B 7、C 8、C 9、C 10、D 二、填空题 1、先进先出先进后出 2、线性任何栈顶队尾对头 3、正确的 4、3 三、算法设计题 1.define M 100 elemtype stackM int top10top2m-1 int pushelemtype xint i iftop1-top21 return1/上溢处理/else ifi1 stacktop1x ifi2stacktop2-x return0 int popelemtype pxint i ifi1 iftop10 return1 else top1-pxstacktop1 return0 else ifi2 iftop2M-1 return1 else top2 pxstacktop2 return0 2.elemtype s1MAXSIZEs2MAZSIZE int top1top2 void enqueueelemtype x iftop1MAXSIZE return1 else pushs1x return0 void dequeueelemtype px elemtype x top20 whileemptys1 pops1ampx pushs2x pops2ampx whileemptys2 pops2ampx pushs1x 第四章串一、选择题 1.下列关于串的叙述中正确的是 A 一个串的字符个数即该串的长度 B 一个串的长度至少是 1 C 空串是由一个空格字符组成的串 D 两个串 S1 和 S2 若长度相同则这两个串相等 2.字符串 quotabaaababquot 的nextval 值为 A0101104101 B0100002101 C010100011 D010101011 3.字符串满足下式其中head 和 tail 的定义同广义表类似如 head xyz xtailxyz yz则 s。concatheadtailsheadtailtails dc。Aabcd Bacbd Cacdb Dadcb 4.串是一种特殊的线性表其特殊性表现在 A 可以顺序存储 B 数据元素是一个字符 C 可以链式存储 D 数据元素可以是多个字符 5 设串 S1ABCDEFGs2PQRST函数 CONCATXY 返回 X 和 Y 串的连接串 SUBSTRSIJ返回串 S 从序号 I 开始的 J 个字符组成的字串 LENGTHS 返回串 S 的长度则CONCATSUBSTRS12LENGTHS2SUBSTRS1LENGTHS22 的结果串是 ABCDEF B BCDEFG CBCPQRST DBCDEFEF 二、算法设计 1.分别在顺序存储和一般链接存储两种方式下用 C 语言写出实现把串 s1 复制到串 s2 的串复制函数 strcpys1s2。2.在一般链接存储一个结点存放一个字符方式下写出采用简单算法实现串的模式匹配的 C 语言函数 int L_indextp。参考答案一、选择题 1.A 2.B 3.D 4.D 5.D 二、算法设计 1.顺序存储 include quotstring.hquot define MAXN 100 char sMAXN int S_strlenchar s int i.