824数据结构与算法设计答案A
数据结构与算法分析课后题答案
Chapter 5:Hashing5.1(a)On the assumption that we add collisions to the end of the list (which is the easier way if a hash table is being built by hand),the separate chaining hash table that results is shown here.4371132361734344419996791989123456789(b)96794371198913236173434441990123456789-25-w w w .k h d a w .com课后答案网(c)96794371132361734344198941990123456789(d)1989cannot be inserted into the table because hash 2(1989)=6,and the alternative locations 5,1,7,and 3are already taken.The table at this point is as follows:4371132361739679434441991234567895.2When rehashing,we choose a table size that is roughly twice as large and prime.In our case,the appropriate new table size is 19,with hash function h (x ) = x (mod 19).(a)Scanning down the separate chaining hash table,the new locations are 4371in list 1,1323in list 12,6173in list 17,4344in list 12,4199in list 0,9679in list 8,and 1989in list 13.(b)The new locations are 9679in bucket 8,4371in bucket 1,1989in bucket 13,1323in bucket 12,6173in bucket 17,4344in bucket 14because both 12and 13are already occu-pied,and 4199in bucket 0.-26-w ww .k h d a w.com课后答案网(c)The new locations are 9679in bucket 8,4371in bucket 1,1989in bucket 13,1323in bucket 12,6173in bucket 17,4344in bucket 16because both 12and 13are already occu-pied,and 4199in bucket 0.(d)The new locations are 9679in bucket 8,4371in bucket 1,1989in bucket 13,1323in bucket 12,6173in bucket 17,4344in bucket 15because 12is already occupied,and 4199in bucket 0.5.4We must be careful not to rehash too often.Let p be the threshold (fraction of table size)atwhich we rehash to a smaller table.Then if the new table has size N ,it contains 2pN ele-ments.This table will require rehashing after either 2N − 2pN insertions or pN deletions.Balancing these costs suggests that a good choice is p = 2/ 3.For instance,suppose we have a table of size 300.If we rehash at 200elements,then the new table size is N = 150,and we can do either 100insertions or 100deletions until a new rehash is required.If we know that insertions are more frequent than deletions,then we might choose p to be somewhat larger.If p is too close to 1.0,however,then a sequence of a small number of deletions followed by insertions can cause frequent rehashing.In the worst case,if p = 1.0,then alternating deletions and insertions both require rehashing.5.5(a)Since each table slot is eventually probed,if the table is not empty,the collision can beresolved.(b)This seems to eliminate primary clustering but not secondary clustering because all ele-ments that hash to some location willtry the same collision resolution sequence.(c,d)The running time is probably similar to quadratic probing.The advantage here is thatthe insertion can’t fail unless the table is full.(e)A method of generating numbers that are not random (or even pseudorandom)is given in the references.An alternative is to use the method in Exercise 2.7.5.6Separate chaining hashing requires the use of pointers,which costs some memory,and thestandard method of implementing calls on memory allocation routines,which typically are expensive.Linear probing is easily implemented,but performance degrades severely as the load factor increases because of primary clustering.Quadratic probing is only slightly more difficult to implement and gives good performance in practice.An insertion can fail if the table is half empty,but this is not likely.Even if it were,such an insertion would be so expensive that it wouldn’t matter and would almost certainly point up a weakness in the hash function.Double hashing eliminates primary and secondary clustering,but the compu-tation of a second hash function can be costly.Gonnet and Baeza-Yates [8]compare several hashing strategies;their results suggest that quadratic probing is the fastest method.5.7Sorting the MN records and eliminating duplicates would require O (MN log MN )timeusing a standard sorting algorithm.If terms are merged by using a hash function,then the merging time is constant per term for a total of O (MN ).If the output polynomial is small and has only O (M + N )terms,then it is easy to sort it in O ((M + N )log (M + N ))time,which is less than O (MN ).Thus the total is O (MN ).This bound is better because the model is less restrictive:Hashing is performing operations on the keys rather than just com-parison between the keys.A similar bound can be obtained by using bucket sort instead of a standard sorting algorithm.Operations such as hashing are much more expensive than comparisons in practice,so this bound might not be an improvement.On the other hand,if the output polynomial is expected to have only O (M + N )terms,then using a hash table saves a huge amount of space,since under these conditions,the hash table needs only-27-w w w .k h d a w .c o m课后答案网O (M + N )space.Another method of implementing these operations is to use a search tree instead of a hash table;a balanced tree is required because elements are inserted in the tree with too much order.A splay tree might be particularly well suited for this type of a problem because it does well with sequential paring the different ways of solving the problem is a good programming assignment.5.8The table size would be roughly 60,000entries.Each entry holds 8bytes,for a total of 480,000bytes.5.9(a)This statement is true.(b)If a word hashes to a location with value 1,there is no guarantee that the word is in the dictionary.It is possible that it just hashes to the same value as some other word in the dic-tionary.In our case,the table is approximately 10%full (30,000words in a table of 300,007),so there is a 10%chance that a word that is not in the dictionary happens to hash out to a location with value 1.(c)300,007bits is 37,501bytes on most machines.(d)As discussed in part (b),the algorithm will fail to detect one in ten misspellings on aver-age.(e)A 20-page document would have about 60misspellings.This algorithm would be expected to detect 54.A table three times as large would still fit in about 100K bytes and reduce the expected number of errors to two.This is good enough for many applications,especially since spelling detection is a very inexact science.Many misspelled words (espe-cially short ones)are still words.For instance,typing them instead of then is a misspelling that won’t be detected by any algorithm.5.10To each hash table slot,we can add an extra field that we’ll call WhereOnStack, and we cankeep an extra stack.When an insertion is first performed into a slot,we push the address (or number)of the slot onto the stack and set the WhereOnStack field to point to the top of the stack.When we access a hash table slot,we check that WhereOnStack points to a valid part of the stack and that the entry in the (middle of the)stack that is pointed to by the WhereOn-Stack field has that hash table slot as an address.5.14(2)000000100000101100101011(2)01010001011000010110111101111111(3)100101101001101110011110(3)1011110110111110(2)110011111101101111110000000001010011100101110111-28-w w w .k hd a w.c o m 课后答案网。
数据结构与算法设计-习题1-3
int
data;
struct Lnode *next;
// 数据域 // 指针域
} LNode, *LinkList; LinkList la, lb; // 单链表的头指针 请用 la 和 lb 中的结点合并生成一个新的非 递增的有序单链表 lc。合并完成后,原来的 la 和 lb 成为空链表。
作者 (时间 2000年) 北京理工大学计算机科学工程系 秦怀青 email qinhq010@
正确且高效的算法如下: Status DeleteK(SqList &a ,int i, int k) {//设线性表元素从a.base[1]起存储,从第i个元素起
删除k个元素。
if ( i<1|| k< 0 || (i+k)>a.length) return ERROR;
for ( j=i+k;j<=a.length; ++j)
操作步骤
1) 建空表 Lc; 2) 依次从 La 或 Lb 中“摘取”元素值较小的
结点插入到 Lc 表中第一个结点之前直至其 中一个表变空为止; 3) 继续将 La 或 Lb 其中一个表的剩余结点插 入在 Lc 表的表头结点之后; 4) 释放 La 表和 Lb 表的表头结点。
作者 (时间 2000年) 北京理工大学计算机科学工程系 秦怀青 email qinhq010@
单链表中逻辑上相邻的元素的物理位置 不一定 紧邻。
(3)在单链表中,除了头结点外,任一结点的存储位置 由 该结点的直接前趋 指示。
(4)在单链表中设置头结点的作用是
在表的第一个元素结点之前插入新元素结点或删除 第一个元素结点不需修改头作指者 针(时间 2000年)
西安科技大学824数据结构与算法设计A2009年考研真题答案
共页
第 2页
而在排序后其领先关系不变,则所使用排序方法为稳定的,反之是不稳定的。 希尔排序不稳定。
五、综合应用题(任选 4 题,每题 15 分,共 60 分)
1.已知一棵二叉树的中序序列为 DBGEHJACIF,层次序列(同一层从左到右)
为 ABCDEFGHI J,画出二叉树并写出后序序列。
二叉树:略
一、判断题(下列各题,你认为正确的,请在题干的括号内打“√”,错的 打“×”。每题 1 分,共 10 分) (×)1.树形结构是非线性结构,所以只能用非顺序结构存储。 (×)2.线性表就是顺序表。 (√)3.有向图用邻接矩阵表示时,顶点 i 的入度等于邻接矩阵中第 i 列元素 之和。 (√)4.理想状态下,在散列表中查找一个元素的时间复杂度为 O(1)。 (√)5.单链表是线性表的链式存储表示。 (×)6.完全二叉树一定是满二叉树。 (×)7.由二叉树的先序遍历序列和后序遍历序列可以唯一确定二叉树。 (√)8.Dijkstra 算法是求非负权图中给定点到其余各点最短路径的有效算法。 (√)9.快速排序在最坏情况下的时间复杂度为 O(n2 ) 。 (√)10.队列是一种插入与删除操作分别在表的两端进行的线性表,是一种 先进先出型结构。 二、单选题(每题 1 分,共 10 分)
西安科技大学
编著者
611马克思主义原理
《马克思主义原理概论》
湖北人民出版社,2005
陶德麟、石云霞
612数学分析
《数学分析》
高等教育出版社,2001
华东师范大学
801当代西方哲学与财政学
《当代西方哲学》
《财政学》
人民出版社,2007
高等教育出版社,2004
张之沧、林丹
邓子基、邱华炳
802西方政治法律思想史
大地测量学与测量工程(081601)
①GPS原理与应用②测量平差
摄影测量与遥感(081602)
①摄影测量②数字测图原理与方法
地图制图学与地理信息工程(081603)
①数字测图原理与方法②地理信息系统
地图学与地理信息系统(070503)
①数字测图原理与方法②自然地理学
矿产普查与勘探(081801)
①构造地质学②矿物岩石学
结构工程(081402)
①混凝土结构②土木工程材料③钢结构
市政工程(081403)
①材料力学②基础工程③土木工程施工技术④水质工程学等(可选择①②③或单独选择④)
防灾减灾工程及防护工程(081405)
①土木工程材料②弹性力学③土木工程施工技术
桥梁与隧道工程(081406)
①土木工程施工技术②工程地质学③材料力学④隧道工程(任选其中三门)
莫海鸿
828结构力学
《结构力学》
高等教育出版社,第四版,2004
李廉琨
829数字测图原理与方法
《数字测图原理与方法》
中国矿大出版社,2008
高井祥
830遥感原理与应用
《遥感原理与应用》
中国矿大出版社,2006
杜培军主编
数据结构与算法设计课后习题及答案详解
第一章1.数据结构研究的主要内容包括逻辑结构、存储结构和算法。
2.数据元素是数据的基本单位,数据项是数据的最小标示单位。
3.根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、树形、线性、图状。
4.常见的数据存储结构有四种类型:顺序、链式、索引、散列。
5.可以从正确性、可读性、健壮性、高效性四方面评价算法的质量。
6.在一般情况下,一个算法的时间复杂度是问题规模的函数。
7.常见时间复杂度有:常数阶O(1)、线性阶O(n)、对数阶O(log2 n)、平方阶O(n²)和指数阶O(2ⁿ)。
通常认为,具有常数阶量级的算法是好算法,而具有指数阶量级的算法是差算法。
8.时间复杂度排序由大到小(n+2)!>2ⁿ+²>(n+2)4次方>nlog2 n>100000.问答题:1.什么叫数据元素?数据元素是数据的基本单位,是数据这个集合的个体,也称为元素、结点、顶点、记录。
2.什么叫数据逻辑结构?什么叫数据存储结构?数据逻辑结构:指数据元素之间存在的固有的逻辑结构。
数据存储结构:数据元素及其关系在计算机内的表示。
3.什么叫抽象数据类型?抽象数据类型是指数据元素集合以及定义在该集合上的一组操作。
4.数据元素之间的关系在计算机中有几种表示方法?顺序、链式、索引、散列。
5.数据的逻辑结构与数据的存储结构之间存在着怎样的关系?相辅相成,不可分割。
6.什么叫算法?算法的性质有哪些?算法:求解问题的一系列步骤的集合。
可行性、有容性、确定性、有输入、有输出。
7.评价一个算法的好坏应该从哪几方面入手?正确性、可读性、健壮性、高效性。
第二章1.线性表中,第一个元素没有直接前驱,最后一个元素没有直接后继。
2.线性表常用的两种存储结构分别是顺序存储结构和链式存储结构。
3.在长度为n的顺序表中,插入一个新元素平均需要移动表中的n/2个元素,删除一个元素平均需要移动(n-1)/2个元素。
4.在长度为n的顺序表的表头插入一个新元素的时间复杂度为O(n),在表尾插入一个新元素的时间复杂度为O(1)。
数据结构与算法分析课后习题答案
数据结构与算法分析课后习题答案[篇一:《数据结构与算法》课后习题答案]>2.3.2 判断题2.顺序存储的线性表可以按序号随机存取.〔√〕4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象.〔√〕6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻.〔√〕8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关.〔√〕9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的.〔√〕2.3.3 算法设计题1.设线性表存放在向量a[arrsize]的前elenum个分量中,且递增有序.试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度.[提示]直接用题目中所给定的数据结构〔顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体〕,因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,〔也可以从高下标端开始一边比较,一边移位〕然后插入x ,最后修改表示表长的变量.int insert <datatype a[],int *elenum,datatype x> /*设elenum为表的最大下标*/ {if <*elenum==arrsize-1> return 0; /*表已满,无法插入*/else {i=*elenum;while <i=0 a[i]x>/*边找位置边移动*/{a[i+1]=a[i];i--;}a[i+1]=x;/*找到的位置是插入位的下一位*/ <*elenum>++;return 1;/*插入成功*/}}时间复杂度为o<n>.2.已知一顺序表a,其元素值非递减有序排列,编写一个算法删除顺序表中多余的值相同的元素.[提示]对顺序表a,从第一个元素开始,查找其后与之值相同的所有元素,将它们删除;再对第二个元素做同样处理,依此类推.void delete<seqlist *a>{i=0;while<ia-last>/*将第i个元素以后与其值相同的元素删除*/{k=i+1;while<k=a-lasta-data[i]==a-data[k]>k++;/*使k指向第一个与a[i]不同的元素*/ n=k-i-1;/*n表示要删除元素的个数*/for<j=k;j=a-last;j++>a-data[j-n]=a-data[j]; /*删除多余元素*/a-last= a-last -n;i++;}}3.写一个算法,从一个给定的顺序表a中删除值在x~y<x=y>之间的所有元素,要求以较高的效率来实现.[提示]对顺序表a,从前向后依次判断当前元素a-data[i]是否介于x 和y之间,若是,并不立即删除,而是用n记录删除时应前移元素的位移量;若不是,则将a-data[i]向前移动n位.n用来记录当前已删除元素的个数.void delete<seqlist *a,int x,int y>{i=0;n=0;while <ia-last>{if <a-data[i]=x a-data[i]=y>n++; /*若a-data[i] 介于x和y之间,n 自增*/ else a-data[i-n]=a-data[i];/*否则向前移动a-data[i]*/i++;}a-last-=n;}4.线性表中有n个元素,每个元素是一个字符,现存于向量r[n]中,试写一算法,使r中的字符按字母字符、数字字符和其它字符的顺序排列.要求利用原来的存储空间,元素移动次数最小.[提示]对线性表进行两次扫描,第一次将所有的字母放在前面,第二次将所有的数字放在字母之后,其它字符之前.int fch<char c> /*判断c是否字母*/{if<c=ac=z||c=ac=z> return <1>;elsereturn <0>;}int fnum<char c> /*判断c是否数字*/{if<c=0c=9>return <1>;elsereturn <0>;}void process<char r[n]>{low=0;high=n-1;while<lowhigh> /*将字母放在前面*/{while<lowhighfch<r[low]>> low++;while<lowhigh!fch<r[high]>> high--;if<lowhigh>{k=r[low];r[low]=r[high];r[high]=k;}}low=low+1;high=n-1;while<lowhigh> /*将数字放在字母后面,其它字符前面*/{while<lowhighfnum<r[low]>> low++;while<lowhigh!fnum<r[high]>> high--;if<lowhigh>{k=r[low];r[low]=r[high];r[high]=k;}}}5.线性表用顺序存储,设计一个算法,用尽可能少的辅助存储空间将顺序表中前m个元素和后n个元素进行整体互换.即将线性表:〔a1, a2, … , am, b1, b2, … , bn〕改变为:〔b1, b2, … , bn , a1, a2, … , am〕.[提示]比较m和n的大小,若mn,则将表中元素依次前移m次;否则,将表中元素依次后移n次.void process<seqlist *l,int m,int n>{if<m=n>for<i=1;i=m;i++>{x=l-data[0];for<k=1;k=l-last;k++>l-data[k-1]=l-data[k];l-data[l-last]=x;}else for<i=1;i=n;i++>{x=l-data[l-last];for<k=l-last-1;k=0;k- ->l-data[k+1]=l-data[k];l-data[0]=x; }}6.已知带头结点的单链表l中的结点是按整数值递增排列的,试写一算法,将值为x 的结点插入到表l中,使得l仍然递增有序,并且分析算法的时间复杂度.linklist insert<linklist l, int x>{p=l;while<p-next xp-next-data>p=p-next;/*寻找插入位置*/ s=<lnode *>malloc<sizeof<lnode>>; /*申请结点空间*/ s-data=x;/*填装结点*/s-next=p-next;p-next=s; /*将结点插入到链表中*/ return<l>;}7.假设有两个已排序〔递增〕的单链表a和b,编写算法将它们合并成一个链表c而不改变其排序性.linklist bine<linklist a, linklist b>{c=a;rc=c;pa=a-next; /*pa指向表a的第一个结点*/pb=b-next; /*pb指向表b的第一个结点*/free<b>; /*释放b的头结点*/while <pa pb> /*将pa、pb所指向结点中,值较小的一个插入到链表c的表尾*/if<pa-datapb-data>{rc-next=pa;rc=pa;pa=pa-next;}else{rc-next=pb;rc=pb;pb=pb-next;}if<pa> rc-next=pa;else rc-next=pb;/*将链表a或b中剩余的部分到链表c的表尾*/return<c>;}8.假设长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某一结点的指针,编写算法删除该结点的前驱结点.[提示]利用循环单链表的特点,通过s指针可循环找到其前驱结点p 与p的前驱结点q,然后可删除结点*p.viod delepre<lnode *s>{lnode *p, *q;p=s;while <p-next!=s>{q=p;p=p-next;}q-next=s;free<p>;}9.已知两个单链表a和b分别表示两个集合,其元素递增排列,编写算法求出a和b的交集c,要求c同样以元素递增的单链表形式存储.[提示]交集指的是两个单链表的元素值相同的结点的集合,为了操作方便,先让单链表c带有一个头结点,最后将其删除掉.算法中指针p 用来指向a中的当前结点,指针q用来指向b中的当前结点,将其值进行比较,两者相等时,属于交集中的一个元素,两者不等时,将其较小者跳过,继续后面的比较.linklist intersect<linklist a, linklist b>{lnode *q, *p, *r, *s;linklist c;c= <lnode *>malloc<sizeof<lnode>>;c-next=null;r=c;p=a;q=b;while <p q >if <p-dataq-data> p=p-next;else if <p-data==q-data>{s=<lnode *>malloc<sizeof<lnode>>;s-data=p-data;r-next=s;r=s;p=p-next;q=q-next;}else q=q-next;r-next=null;c=c-next;return c;}10.设有一个双向链表,每个结点中除有prior、data和next域外,还有一个访问频度freq域,在链表被起用之前,该域的值初始化为零.每当在链表进行一次locata<l,x>运算后,令值为x的结点中的freq 域增1,并调整表中结点的次序,使其按访问频度的非递增序列排列,以便使频繁访问的结点总是靠近表头.试写一个满足上述要求的locata<l,x>算法.[提示]在定位操作的同时,需要调整链表中结点的次序:每次进行定位操作后,要查看所查找结点的freq域,将其同前面结点的freq域进行比较,同时进行结点次序的调整. typedef struct dnode[篇二:数据结构课后习题答案]lass=txt>高等学校精品资源共享课程绪论第 1 章1.1 什么是数据结构?[答]:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合. 1.2 数据结构涉与哪几个方面?[答]:数据结构涉与三个方面的内容,即数据的逻辑结构、数据的存储结构和数据的运算集合.1.3 两个数据结构的逻辑结构和存储结构都相同,但是它们的运算集合中有一个运算的定义不一样,它们是否可以认作是同一个数据结构?为什么?[答]:不能,运算集合是数据结构的重要组成部分,不同的运算集合所确定的数据结构是不一样的,例如,栈与队列它们的逻辑结构与存储结构可以相同,但由于它们的运算集合不一样, 所以它们是两种不同的数据结构.1.4 线性结构的特点是什么?非线性结构的特点是什么?[答]:线性结构元素之间的关系是一对一的,在线性结构中只有一个开始结点和一个终端结点,其他的每一个结点有且仅有一个前驱和一个后继结点.而非线性结构则没有这个特点,元素之间的关系可以是一对多的或多对多的. 1.5 数据结构的存储方式有哪几种?[答]:数据结构的存储方式有顺序存储、链式存储、散列存储和索引存储等四种方式. 1.6 算法有哪些特点?它和程序的主要区别是什么?[答]:算法具有〔1〕有穷性〔2〕确定性〔3〕0 个或多个输入〔4〕1 个或多个输出〔5〕可行性等特征.程序是算法的一种描述方式,通过程序可以在计算机上实现算法. 1.7 抽象数据类型的是什么?它有什么特点?[答]:抽象数据类型是数据类型的进一步抽象,是大家熟知的基本数据类型的延伸和发展. 抽象数据类型是与表示无关的数据类型,是一个数据模型与定义在该模型上的一组运算.对一个抽象数据类型进行定义时,必须给出它的名字与各运算的运算符名,即函数名,并且规定这些函数的参数性质.一旦定义了一个抽象数据类型与具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型.抽象数据类型的设计者根据这些描述给出操作的具体实现,抽象数据类型的使用者依据这些描述使用抽象数据类型. 1.8 算法的时间复杂度指的是什么?如何表示?[答]:算法执行时间的度量不是采用算法执行的绝对时间来计算的,因为一个算法在不同的机器上执行所花的时间不一样,在不同时刻也会由于计算机资源占用情况的不同,使得算法在同一台计算机上执行的时间也不一样,另外,算法执行的时间还与输入数据的状态有关,所以对于算法的时间复杂性,采用算法执行过程中其基本操作的执行次数,称为计算量来度量.算法中基本操作的执行次数一般是与问题规模有关的,对于结点个数为 n 的数据处理问题,用 t<n>表示算法基本操作的执行次数.为了评价算法的执行效率,通常采用大写 o 符号表示算法的时间复杂度,大写 o 符号给出了函数 f 的一个上限.其它义如下:3十二五普通高等教育国家级本科规划教材高等学校精品资源共享课程定义:f <n>=o <g <n>> 当且仅当存在正的常数 c 和 n0,使得对于所有的n≥n0,有f <n> ≤c g<n>.上述定义表明,函数 f 顶多是函数 g 的 c 倍,除非 n 小于 n0.因此对于足够大的 n <如n≥n0>, g 是 f 的一个上限〔不考虑常数因子 c〕.在为函数 f 提供一个上限函数 g 时,通常使用比较简单的函数形式.比较典型的形式是含有 n 的单个项〔带一个常数系数〕.表 1-1 列出了一些常用的 g 函数与其名称.对于表1-1 中的对数函数 logn,没有给出对数基,原因是对于任何大于 1 的常数 a 和 b 都有 logan =logbn/logba,所以 logan 和 logbn 都有一个相对的乘法系数 1/logba, 其中 a 是一个常量.表 1-1 常用的渐进函数1.9 [答]:算法的空间复杂度是指算法在执行过程中占用的额外的辅助空间的个数.可以将它表示为问题规模的函数,并通过大写o符号表示空间复杂度.1.10 对于下面的程序段,分析带下划线的语句的执行次数,并给出它们的时间复杂度 t<n>.〔1〕 i++ ;〔2〕 for<i=0;in;i++>if <a[i]x> x=a[i];〔3〕for<i=0;in;i++>for<j=0;jn;j++>;〔4〕for <i=1;i=n-1;i++>{ k=i;for<j=i+1;j=n;j++>if<a[j]a[j+1]> k=j; t=a[k]; a[k]=a[i]; a[i]=t; }〔5〕for<i=0;in;i++>for<j=0;jn;j++>{++x;s=s+x;}[答]:〔1〕o〔1〕;〔2〕o〔n〕;〔3〕o〔n2〕;〔4〕o〔n2〕;〔5〕o〔n2〕4第 2 章线性表与其顺序存储2.1 选择题〔1〕表长为 n 的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时, 插入一个元素所需移动元素的平均个数为〔为〔 a 〕.a.〔n?1〕/2 e.n/2b.n f.<n+1>/2c.n+1d.n?1g.<n?2>/2〔2〕设栈 s 和队列 q 的初始状态为空,元素 e1、e2、e3、e4、e5 和 e6 依次通过栈 s, 一个元素出栈后即进入队列 q,若 6 个元素出队的序列为 e2、e4、e3、e6、e5 和 e1,则栈 s 的容量至少应该为〔 c 〕.a.6〔 b 〕.a.不确定b.n?i+1c.id.n?i〔4〕在一个长度为 n 的顺序表中删除第 i 个元素〔1=i=n〕时,需向前移动〔 a 〕个元素.a.n?i间复杂度为〔 a 〕.a.o<n>b.o<1>c.o<n2>〕.d.?+*abcd d.o<n3>〔6〕表达式 a*<b+c>?d 的后缀表达式是〔 bb.n?i+1c.n?i?1d.i〔5〕若长度为 n 的线性表采用顺序存储结构存储,在第 i 个位置上插入一个新元素的时b.4c.3d.2〔3〕设栈的输入序列为 1、2、3… n,若输出序列的第一个元素为 n,则第 i 个输出的元素为e 〕,删除一个元素所需移动元素的平均个数a.abcd*+? b.abc+*d? c.abc*+d? 〔7〕队列是一种特殊的线性表,其特殊性在于〔 c 〕.a.插入和删除在表的不同位置执行 b.插入和删除在表的两端位置执行 c.插入和删除分别在表的两端执行 d.插入和删除都在表的某一端执行〔8〕栈是一种特殊的线性表,具有〔 b 〕性质.a.先进先出b.先进后出c.后进后出d.顺序进出〔9〕顺序循环队列中〔数组的大小为 n〕,队头指示 front 指向队列的第 1 个元素,队尾指示 rear 指向队列最后元素的后 1 个位置,则循环队列中存放了 n??? 1 个元素,即循环队列满〕. 的条件为〔 ba.<rear+1>%n=front?1 c.<rear>%n=frontb.<rear+1>%n=front d.rear+1=front〔10〕顺序循环队列中〔数组的大小为 6〕,队头指示 front 和队尾指示 rear 的值分别为 3 和 0,当从队列中删除 1 个元素,再插入 2 个元素后,front 和 rear 的值分别为〔 d 〕.a.5 和 1b.2 和 4c.1 和 5d.4 和 22.2 什么是顺序表?什么是栈?什么是队列?5[答]:当线性表采用顺序存储结构时,即为顺序表.栈是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入与删除操作只能在这种线性表的同一端进行〔即栈顶〕, 因此,栈具有先进后出、后进先出的特点.队列也是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入在表的一端进行,数据的删除在表的另一端进行,因此队列具有先进先出,后进后出的特点.2.3 设计一个算法,求顺序表中值为 x 的结点的个数. [答]:顺序表的存储结构定义如下〔文件名 seqlist.h〕: #include stdio.h #define n 100 typedef int datatype; typedef struct {datatype data[n]; int length; } seqlist;/*预定义最大的数据域空间*/ /*假设数据类型为整型*//*此处假设数据元素只包含一个整型的关键字域*/ /*线性表长度*//*预定义的顺序表类型*/算法 countx〔l,x〕用于求顺序表 l 中值为 x 的结点的个数. int countx<seqlist *l,datatype x> {int c=0; int i;for <i=0;il-length;i++>if <l-data[i]==x> c++; return c; }2.4 设计一个算法,将一个顺序表倒置.即,如果顺序表各个结点值存储在一维数组 a 中,倒置的结果是使得数组 a 中的 a[0]等于原来的最后一个元素,a[1] 等于原来的倒数第 2 个元素,…,a 的最后一个元素等于原来的第一个元素.[答]:顺序表的存储结构定义同题 2.3,实现顺序表倒置的算法程序如下: void verge<seqlist *l> {int t,i,j; i=0;j=l-length-1; while <ij>{ t=l-data[i];l-data[i++]=l-data[j]; l-data[j--]=t; } }2.5 已知一个顺序表中的各结点值是从小到大有序的,设计一个算法,插入一个值为 x 的结点, 使顺序表中的结点仍然是从小到大有序.[答]:顺序表的定义同题 2.3,实现本题要求的算法程序如下:6void insertx<seqlist *l,datatype x> {int j;if <l-lengthn> { j=l-length-1;while <j=0 l-data[j]x>{ l-data[j+1]=l-data[j];j--; } l-data[j+1]=x; l-length++; } }2.6 将下列中缀表达式转换为等价的后缀表达式.<1> 5+6*7 <2> <5-6>/7 <3> 5-6*7*8 <4> 5*7-8 <5> 5*<7-6>+8/9 <6> 7*<5-6*8>-9 [答]:<7> 5+6*7 <8> <5-6>/7 <9> 5-6*7*8 <10>5*7-8 <11>5*<7-6>+8/9 <12>7*<5-6*8>-9后缀表达式:5 6 7*+ 后缀表达式:5 6-7/ 后缀表达式:5 6 7*8*- 后缀表达式:5 7* 8- 后缀表达式:5 7 6-*8 9/+ 后缀表达式:7 5 6 8*-*9-2.7 循环队列存储在一个数组中,数组大小为 n,队首指针和队尾指针分别为 front 和 rear,请写出求循环队列中当前结点个数的表达式.[答]:循环队列中当前结点个数的计算公式是:<n+rear-front>%n2.8 编号为 1,2,3,4 的四列火车通过一个栈式的列车调度站,可能得到的调度结果有哪些?如果有 n 列火车通过调度站,请设计一个算法,输出所有可能的调度结果. [答]:方法一:算法思想:逐次输出所有可能,用回溯法.即:总体:对原始序列中的每一个元素,总是先入栈,后出栈1.入栈后的操作:a.该元素出栈;b.下一个元素入栈;2.出栈后的操作:a.〔栈中其他元素〕继续出栈;b. 〔原始序列中〕下一个数入栈;注意:回溯法,关键在于回溯,即在某分支结点 x:处理 x 的一个子分支,再退回分支 x, 接着处理 x 的下一个子分支,若所有 x 的子分支处理完,再退回上一层分支节点.所谓"退回〞,7[篇三:数据结构课后习题答案]下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型.答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称.如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据.数据项:是组成数据元素的、有独立含义的、不可分割的最小单位.例如,学生基本信息表中的学号、##、性别等都是数据项.数据结构:是相互之间存在一种或多种特定关系的数据元素的集合.换句话说,数据结构是带"结构〞的数据元素的集合,"结构〞就是指数据元素之间存在的关系.逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的.因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型.存储结构:数据对象在计算机中的存储表示,也称为物理结构.抽象数据类型:由用户定义的,表示应用问题的数学模型,以与定义在这个模型上的一组操作的总称.具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合.2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系. 答案:例如有一张学生基本信息表,包括学生的学号、##、性别、籍贯、专业等.每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列.对于整个表来说,只有一个开始结点<它的前面无记录>和一个终端结点<它的后面无记录>,其他的结点则各有一个也只有一个直接前趋和直接后继.学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构.这些学生记录在计算机中的存储表示就是存储结构.如果用连续的存储单元<如用数组表示>来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行,则称为链式存储结构.即相同的逻辑结构,可以对应不同的存储结构.3.简述逻辑结构的四种基本关系并画出它们的关系图.答案:〔1〕集合结构数据元素之间除了"属于同一集合〞的关系外,别无其他关系.例如,确定一名学生是否为班级成员,只需将班级看做一个集合结构.〔2〕线性结构数据元素之间存在一对一的关系.例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构.〔3〕树结构数据元素之间存在一对多的关系.例如,在班级的管理体系中,班长管理多个组长,每位组长管理多名组员,从而构成树形结构.〔4〕图结构或网状结构数据元素之间存在多对多的关系.例如,多位同学之间的朋友关系,任何两位同学都可以是朋友,从而构成图形结构或网状结构.其中树结构和图结构都属于非线性结构.四类基本逻辑结构关系图4.存储结构由哪两种基本的存储方法实现?答案:〔1〕顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述.〔2〕链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间.但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址.所以链式存储结构通常借助于程序设计语言的指针类型来描述.5.选择题〔1〕在数据结构中,从逻辑上可以把数据结构分成〔〕.a.动态结构和静态结构 b.紧凑结构和非紧凑结构c.线性结构和非线性结构d.内部结构和外部结构答案:c〔2〕与数据元素本身的形式、内容、相对位置、个数无关的是数据的〔〕.a.存储结构b.存储实现c.逻辑结构d.运算实现答案:c〔3〕通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着〔〕.a.数据具有同一特点b.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致c.每个数据元素都一样d.数据元素所包含的数据项的个数要相等答案:b〔4〕以下说法正确的是〔〕.a.数据元素是数据的最小单位b.数据项是数据的基本单位c.数据结构是带有结构的各数据项的集合d.一些表面上很不相同的数据可以有相同的逻辑结构答案:d解释:数据元素是数据的基本单位,数据项是数据的最小单位,数据结构是带有结构的各数据元素的集合.〔5〕算法的时间复杂度取决于〔〕.a.问题的规模答案:d解释:算法的时间复杂度不仅与问题的规模有关,还与问题的其他因素有关.如某些排序的算法,其执行时间与待排序记录的初始状态有关.为此,有时会对算法有最好、最坏以与平均时间复杂度的评价.〔6〕以下数据结构中,〔〕是非线性数据结构a.树 b.字符串 c.队列 d.栈答案:a6.试分析下面各程序段的时间复杂度.〔1〕x=90; y=100;while<y0>if<x100>{x=x-10;y--;}else x++;答案:o<1>解释:程序的执行次数为常数阶.b.待处理数据的初态 d.a和b c.计算机的配置〔2〕for <i=0; in; i++>for <j=0; jm; j++>a[i][j]=0;答案:o<m*n>解释:语句a[i][j]=0;的执行次数为m*n.〔3〕s=0;for i=0; in; i++>for<j=0; jn; j++>s+=b[i][j];sum=s;2答案:o<n>解释:语句s+=b[i][j];的执行次数为n.〔4〕i=1;while<i=n>i=i*3;答案:o<log3n>解释:语句i=i*3;的执行次数为 ?log3n?.〔5〕x=0;for<i=1; in; i++>for <j=1; j=n-i; j++>x++;2答案:o<n>解释:语句x++;的执行次数为n-1+n-2+??+1= n<n-1>/2.〔6〕x=n; //n1y=0;while<x≥<y+1>* <y+1>>y++;答案:o<>解释:语句y++;的执行次数为 ?n?. 2第2章线性表1.选择题〔1〕顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是〔〕.a.110b.108 c.100 d.120答案:b解释:顺序表中的数据连续存储,所以第5个元素的地址为:100+2*4=108.〔2〕在n个结点的顺序表中,算法的时间复杂度是o<1>的操作是〔〕.a.访问第i个结点〔1≤i≤n〕和求第i个结点的直接前驱〔2≤i≤n〕b.在第i个结点后插入一个新结点〔1≤i≤n〕c.删除第i个结点〔1≤i≤n〕d.将n个结点从小到大排序答案:a解释:在顺序表中插入一个结点的时间复杂度都是o<n2>,排序的时间复杂度为o<n2>或o<nlog2n>.顺序表是一种随机存取结构,访问第i个结点和求第i个结点的直接前驱都可以直接通过数组的下标直接定位,时间复杂度是o<1>.〔3〕向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为〔〕.a.8 b.63.5 c.63d.7答案:b解释:平均要移动的元素个数为:n/2.〔4〕存储的存储结构所占存储空间〔〕.a.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针b.只有一部分,存放结点值c.只有一部分,存储表示结点间关系的指针d.分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:a〔5〕线性表若采用链式存储结构时,要求内存中可用存储单元的地址〔〕.a.必须是连续的 b.部分地址必须是连续的c.一定是不连续的 d.连续或不连续都可以答案:d〔6〕线性表L在〔〕情况下适用于使用链式结构实现.a.需经常修改L中的结点值B.需不断对L进行删除插入c.L中含有大量的结点D.L中结点结构复杂答案:b。
数据结构与算法题库(含参考答案)
数据结构与算法题库(含参考答案)一、单选题(共100题,每题1分,共100分)1、在一次校园活动中拍摄了很多数码照片,现需将这些照片整理到一个PowerPoint 演示文稿中,快速制作的最优操作方法是:A、创建一个 PowerPoint 相册文件。
B、创建一个 PowerPoint 演示文稿,然后批量插入图片。
C、创建一个 PowerPoint 演示文稿,然后在每页幻灯片中插入图片。
D、在文件夹中选中所有照片,然后单击鼠标右键直接发送到PowerPoint 演示文稿中。
正确答案:A2、下面对“对象”概念描述错误的是A、对象不具有封装性B、对象是属性和方法的封装体C、对象间的通信是靠消息传递D、一个对象是其对应类的实例正确答案:A3、设栈与队列初始状态为空。
首先A,B,C,D,E依次入栈,再F,G,H,I,J 依次入队;然后依次出队至队空,再依次出栈至栈空。
则输出序列为A、F,G,H,I,J,E,D,C,B,AB、E,D,C,B,A,J,I,H,G,FC、F,G,H,I,J,A,B,C,D,E,D、E,D,C,B,A,F,G,H,I,J正确答案:A4、设表的长度为 20。
则在最坏情况下,冒泡排序的比较次数为A、20B、19C、90D、190正确答案:D5、设二叉树的前序序列为 ABDEGHCFIJ,中序序列为 DBGEHACIFJ。
则后序序列为A、DGHEBIJFCAB、JIHGFEDCBAC、GHIJDEFBCAD、ABCDEFGHIJ正确答案:A6、Excel工作表B列保存了11位手机号码信息,为了保护个人隐私,需将手机号码的后 4 位均用“*”表示,以 B2 单元格为例,最优的操作方法是:A、=REPLACE(B2,7,4,"****")B、=REPLACE(B2,8,4,"****")C、=MID(B2,7,4,"****")D、=MID(B2,8,4,"****")第 10 组正确答案:B7、小金从网站上查到了最近一次全国人口普查的数据表格,他准备将这份表格中的数据引用到 Excel 中以便进一步分析,最优的操作方法是:A、通过 Excel 中的“自网站获取外部数据”功能,直接将网页上的表格导入到 Excel 工作表中。
数据结构与算法设计试卷
数据结构与算法设计试卷(答案见尾页)一、选择题1. 数据结构中,下列哪种数据结构的插入和删除操作时间复杂度最低?A. 栈B. 队列C. 数组D. 链表2. 在二叉树的遍历方法中,哪种方法可以访问所有节点且时间复杂度为O(n)?A. 前序遍历B. 中序遍历C. 后序遍历D. 层次遍历3. 常用的排序算法中,哪种算法是基于比较的排序算法,并且时间复杂度为O(n log n)?A. 冒泡排序B. 选择排序C. 插入排序D. 归并排序4. 在图的存储结构中,邻接矩阵适合表示哪种类型的图?A. 稀疏图B. 密集图C. 有向无环图D. 无向无环图5. 动态规划算法用于解决哪种类型的问题?A. 数值计算问题B. 字符串匹配问题C. 图论问题D. 机器学习问题6. 在最短路径问题中,Dijkstra算法和Floyd算法分别适用于哪种类型的图?A. 有权图和无权图B. 无权图和有权图C. 有向图和无向图D. 无向图和有权图7. 快速排序算法中,基准元素的选择对算法性能有何影响?A. 基准元素的选择不影响算法性能B. 基准元素选择不当会导致算法性能下降C. 基准元素选择得当可以提高算法性能D. 基准元素的选择与算法性能无关8. 在链表中,单向链表的每个节点包含哪些部分?A. 数据域和指针域B. 数据域和指针头C. 数据域和指针尾D. 数据域和指针尾9. 在栈的实现中,后进先出(LIFO)原则是如何体现的?A. 先进入栈的元素总是最先被移除B. 先进入栈的元素总是最后被移除C. 后进入栈的元素总是最先被移除D. 后进入栈的元素总是最后被移除10. 哈希表(Hash Table)的主要优点是什么?A. 查找速度快,插入和删除操作较慢B. 查找速度较慢,插入和删除操作较快C. 查找速度较快,插入和删除操作也较快D. 查找速度较慢,插入和删除操作也较慢11. 在最坏情况下,下列哪种排序算法的时间复杂度为O(n^)?A. 冒泡排序B. 选择排序C. 插入排序D. 归并排序12. 在二叉树的遍历方法中,先序遍历的特点是?A. 先访问根节点,然后遍历左子树,最后遍历右子树B. 先访问左子树,然后访问根节点,最后遍历右子树C. 先访问左子树,然后访问右子树,最后访问根节点D. 先访问右子树,然后访问左子树,最后访问根节点13. 常用的查找算法中,哈希表的查找效率最高,其平均查找时间复杂度为?A. O(1)B. O(log n)C. O(n)D. O(n log n)14. 下列哪种数据结构适用于表示稀疏线性表?A. 数组B. 链表C. 栈D. 队列15. 最短路径问题在图论中的研究内容是?A. 路径长度B. 路径上的节点序列C. 最短路径的长度及路径上的节点序列D. 最短路径的权重16. 快速排序算法是基于什么思想进行递归划分的?A. 分治法B. 动态规划C. 贪心算法D. 回溯算法17. 在图的遍历算法中,普里姆算法用于寻找?A. 所有顶点的最短路径B. 两个顶点之间的最短路径C. 一棵树的中序遍历D. 一棵树的前序遍历18. 下列哪种数据结构可以实现队列的先进先出(FIFO)特性?A. 栈B. 队列C. 数组D. 链表19. 在深度优先搜索算法中,哪种策略用于访问所有可能的路径?A. 沿着边遍历B. 沿着对角线遍历C. 沿着某一特定方向遍历D. 沿着任意方向遍历20. 在图的遍历算法中,普里姆算法用于求解什么问题?A. 最小生成树B. 最短路径C. 连通性D. 网络流21. 哈希表的冲突解决策略中,链地址法适用于哪种情况?A. 哈希函数值分布均匀B. 哈希函数值分布不均匀C. 存储的元素数量较大D. 存储的元素数量较小22. 在快速排序算法中,基准元素的选择对算法性能有何影响?A. 基准元素选择不合适会导致排序效率降低B. 基准元素选择不合适会导致排序效率提高C. 基准元素选择对算法性能没有影响D. 基准元素选择与算法性能无关23. 在二叉树的遍历算法中,先序遍历、中序遍历和后序遍历分别适用于哪些类型的树?A. 充分不平衡的二叉树B. 充分平衡的二叉树C. 不充分平衡的二叉树D. 完全不平衡的二叉树24. 在贪心算法中,贪心选择性质如何帮助求解问题?A. 贪心选择性质使得每次选择都能立即带来全局最优解B. 贪心选择性质使得每次选择都能减少后续问题的规模C. 贪心选择性质使得每次选择都能增加后续问题的规模D. 贪心选择性质使得每次选择都能保持问题的原有规模25. 在动态规划算法中,状态转移方程如何描述问题的解决过程?A. 状态转移方程描述了问题状态之间的转移过程B. 状态转移方程描述了问题状态之间的变换过程C. 状态转移方程描述了问题状态之间的依赖关系D. 状态转移方程描述了问题状态之间的组合关系26. 在下列哪种数据结构中,元素之间的逻辑关系可以通过指针直接访问?A. 数组B. 链表C. 栈D. 队列27. 下列哪种排序算法的平均时间复杂度为O(n^)?A. 快速排序B. 归并排序C. 堆排序D. 插入排序28. 在图论中,表示图中节点间有向边的图形是?A. 无向图B. 有向图C. 网络图D. 树29. 在树的遍历算法中,先序遍历、中序遍历和后序遍历分别指的是什么?A. 先访问根节点,再遍历左子树,最后遍历右子树B. 先访问左子树,再访问根节点,最后遍历右子树C. 先访问左子树,再遍历右子树,最后访问根节点D. 先访问根节点,再遍历右子树,最后遍历左子树30. 在图的存储结构中,邻接矩阵和邻接表分别适用于哪种情况?A. 小型图和大中型图B. 大中型图和小型图C. 都适用于大型图D. 都适用于小型图31. 在动态规划算法中,解决最短路径问题常用的算法是?A. 贝尔曼-福特算法B. 弗洛伊德-沃沙尔算法C. 克鲁斯卡尔算法D. 普里姆算法32. 在贪心算法中,贪心选择性质是指什么?A. 每一步都选择局部最优解,整个问题就最优B. 每一步都选择全局最优解,整个问题就最优C. 每一步都选择当前最优解,整个问题就最优D. 每一步都选择历史最优解,整个问题就最优33. 在搜索算法中,广度优先搜索(BFS)和深度优先搜索(DFS)有何不同?A. BFS从根节点开始,逐层扩展;DFS从任意节点开始,深入探索B. BFS从任意节点开始,逐层扩展;DFS从根节点开始,深入探索C. BFS只搜索浅层节点,DFS可能搜索深层的叶子节点D. BFS只搜索浅层节点,DFS可能搜索深层的叶子节点34. 在图论中,强连通分量是指什么?A. 图中任意两个顶点之间都有路径相连B. 图中任意三个顶点之间都有路径相连C. 图中存在一个顶点集合,使得每个顶点都与另一个顶点直接相连D. 图中存在一个顶点集合,使得每个顶点都与另一个顶点循环相连35. 在下列哪种数据结构中,元素之间的关系可以通过指针直接访问?A. 数组B. 链表C. 栈D. 队列36. 在排序算法中,稳定性意味着什么?A. 相同值的元素在排序后相对顺序不变B. 不相邻的元素在排序后相对顺序不变C. 相邻的元素在排序后相对顺序不变D. 所有元素的相对顺序都不变37. 下列哪种排序算法是递归的?A. 冒泡排序B. 选择排序C. 插入排序D. 归并排序38. 在图的存储结构中,邻接矩阵更适合表示哪种类型的图?A. 小型图B. 大型图C. 稀疏图D. 密集图二、问答题1. 什么是递归?请举例说明递归在计算机科学中的应用。
西安科技大学824数据结构与算法设计A2008年考研专业课真题试卷
西安科技大学
2008年硕士研究生入学考试试题
─────────────────────────────────科目编号:824科目名称:数据结构与算法设计(A)
考生须知:
1、答案必须写在答题纸上,写在试题或草稿纸上不给分。
2、答题须用蓝、黑色钢笔或圆珠笔,用铅笔、红色笔者不给分。
3、答题必须写清题号,字迹要清楚,卷面要保持整洁。
4、试题要随答题纸一起交回。
一、选择题(每题1分,共10分)
1.若文件初态是反序的,且要求输入稳定,则选方法为宜。
A直接插入B直接选择C冒泡排序D快速排序
2.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为。
A存储结构B逻辑结构C顺序存储结构D链式存储结构3.串是一种特殊的线性表,其特殊性体现在。
A可以顺序存储B数据元素是一个字符
C可以链式存储D数据元素可以是多个字符
4.有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。
存储器按字节编址。
假设存储数组元素A[0,1]的第一个字节的地址是0。
若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是和。
A7644B76108C92116D28116
5.二叉树是非线性数据结构,所以。
A它不能用顺序存储结构存储;
B它不能用链式存储结构存储;
C顺序存储结构和链式存储结构都能存储;
D顺序存储结构和链式存储结构都不能使用
共5页第1页。
西安科技大学824数据结构与算法设计2007-2015年考研真题
A.栈
B.队列
C.集合
D.树
(7)在单链表中,每个存贮结点有两个域,即数据域和指针域,指针域指向该结点的( )。
A.直接前驱
B.直接后继
C.开始结点
D.终端结点
(8)在已知头指针的单链表中,要在其尾部插入一个新结点,其时间复杂度是( )。
A.O(n2)
B.O(1)
C.O(n)
D.O(log2n)
(9)在链队列中执行入队操作,( )。
针。请回答下列问题:
(a)画出该带权有向图的图形;
(b)从顶点 V1 为起点的广度优先遍历的顶点序列及对应的生成树;
(c)以顶点 V1 为起点的深度优先遍历的顶点序列及对应的生成树;
(d)由顶点 V1 到顶点 V3 的最短路径。
(顶点边)
(出边表)
1 V1
2 33
4 29
6 25
2 V2
3 36
3 V3
4 V4
2 30
一、单项选择题(每小题 2 分,共 30 分)
(1)并归排序的时间复杂度是( )。
A.O(n2)
B.O(nlog2n)
C.O(n)
D.O(log2n)
(2)设一个链表最常用的操作是在末尾插入结点和删除尾结点,选用( )存储结构最节
省时间。
A.单链表
B.单循环链表
C.带尾指针的单循环链表
D.带头结点的双循环链表
(11)下列选项中与数据的存储结构无关的术语是( )。
A.栈
B.链队列
C.顺序表
D.链表
(12)已知循环队列的存贮空间大小为 m,对头指针 front 指向对头元素,对尾指针 rear
指向对尾元素的下一个位置,则向对列中插入新元素时,修改指针的操作是( )。
数据结构与算法设计课后习题及答案详解
第一章1.数据结构研究的主要内容包括逻辑结构、存储结构和算法。
2.数据元素是数据的基本单位,数据项是数据的最小标示单位。
3.根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、树形、线性、图状。
4.常见的数据存储结构有四种类型:顺序、链式、索引、散列。
5.可以从正确性、可读性、健壮性、高效性四方面评价算法的质量。
6.在一般情况下,一个算法的时间复杂度是问题规模的函数。
7.常见时间复杂度有:常数阶O(1)、线性阶O(n)、对数阶O(log2 n)、平方阶O(n²)和指数阶O(2ⁿ)。
通常认为,具有常数阶量级的算法是好算法,而具有指数阶量级的算法是差算法。
8.时间复杂度排序由大到小(n+2)!>2ⁿ+²>(n+2)4次方>nlog2 n>100000.问答题:1.什么叫数据元素?数据元素是数据的基本单位,是数据这个集合的个体,也称为元素、结点、顶点、记录。
2.什么叫数据逻辑结构?什么叫数据存储结构?数据逻辑结构:指数据元素之间存在的固有的逻辑结构。
数据存储结构:数据元素及其关系在计算机内的表示。
3.什么叫抽象数据类型?抽象数据类型是指数据元素集合以及定义在该集合上的一组操作。
4.数据元素之间的关系在计算机中有几种表示方法?顺序、链式、索引、散列。
5.数据的逻辑结构与数据的存储结构之间存在着怎样的关系?相辅相成,不可分割。
6.什么叫算法?算法的性质有哪些?算法:求解问题的一系列步骤的集合。
可行性、有容性、确定性、有输入、有输出。
7.评价一个算法的好坏应该从哪几方面入手?正确性、可读性、健壮性、高效性。
第二章1.线性表中,第一个元素没有直接前驱,最后一个元素没有直接后继。
2.线性表常用的两种存储结构分别是顺序存储结构和链式存储结构。
3.在长度为n的顺序表中,插入一个新元素平均需要移动表中的n/2个元素,删除一个元素平均需要移动(n-1)/2个元素。
4.在长度为n的顺序表的表头插入一个新元素的时间复杂度为O(n),在表尾插入一个新元素的时间复杂度为O(1)。
824数据结构与算法设计A
824数据结构与算法设计A西安科技大学2013年硕士研究生入学考试试题A───────────────────────────────── 科目编号:824 科目名称:数据结构与算法设计考生须知:1、答案必须写在答题纸上,写在试题或草稿纸上不给分。
2、答题须用蓝、黑色钢笔或圆珠笔,用铅笔、红色笔者不给分。
3、答题必须写清题号,字迹要清楚,卷面要保持整洁。
4、试题要随答题纸一起交回。
一、单项选择题(每小题2分,共30分)(1)并归排序的时间复杂度是()。
A .O(n 2)B .O(nlog 2n)C .O(n)D .O(log 2n)(2)设一个链表最常用的操作是在末尾插入结点和删除尾结点,选用()存储结构最节省时间。
A .单链表B .单循环链表C .带尾指针的单循环链表D .带头结点的双循环链表(3)散列文件是一种()。
A .顺序文件B .索引文件C .链接文件D .计算机寻址文件(4)常用于函数调用的数据结构是()。
A .栈B .队列C .数组D .链表(5)两个矩阵sn ms B A ,相乘的时间复杂度是()。
A .O(n 2)B .O(s 2)C .O(msn)D .O(mn)(6)图的广度优先搜索遍历使用的数据结构是()。
A .栈B .队列C .集合D .树(7)在单链表中,每个存贮结点有两个域,即数据域和指针域,指针域指向该结点的()。
A .直接前驱B .直接后继C .开始结点D .终端结点(8)在已知头指针的单链表中,要在其尾部插入一个新结点,其时间复杂度是()。
A .O(n 2)B .O(1)C .O(n)D .O(log 2n)(9)在链队列中执行入队操作,()。
A .需判断队是否为空B .限定在链表头p 进行C .需判断队是否为满D .限定在链表尾p 进行(10)对序列(95,83,62,70)进行冒泡排序(由小到大),第2趟排序后的结果为()。
A .(70,83,62,95)B .(70,62,83,95)C.(62,70,83,95)D.(83,62,70,95)(11)下列选项中与数据的存储结构无关的术语是()。
西安科技大学824数据结构与算法设计B2008年考研真题答案
5.D 10.A
三、解答题(任选 6 题,每题 10 分,共 60 分)
1.【解答】: (1)由于表长 n 已给定,此时证明理想的块长度应为 n ,即
b= n = 100000 =100
(2)由于采用等分区间顺序检索方法进行检索,长度为 n 的表就分成
s= ┏n/b┑=┏10000/10┑=100 块 (3)平均检索长度为:ASL=(b+s)/2+1=(100+100)/2+1=101
西安科技大学 2008 年硕士研究生入学考试参考答案
─────────────────────────────────
科目编号:824
科目名称:数据结构与算法设计(B)
一、选择题(每题 1 分,共 10 分) 1.B 2.A 3.B 4.C 6.C 7.B 8.C 9. D
二、填空题(每空 1 分,共 20 分) 1.存储(或存储结构) 2.p->next->next 3.12 4.进栈和退栈 5.限制在两端进行插入和删除 6.索引表;块 7.哈希表查找方法 8.n(n+1)/2 9.路径长度依次递增的 10.384 11.2 12.插入; 选择 13.开放定址法; 链地址法 14.n(n-1)/2; n(n-1) 15.n-1; O(n2)
当 n=1 时,前、中序序列均只有一个元素且相同,即为根,由此唯一确 定一个二叉树。
假设 n<m-1 时结论成立,则证明 n=m 时成立。 假设前序序列为 a1,a2,…,am,中序序列为 b1,b2,…,bm。 因为前序序列由前序遍历而得,则 a1 即为根结点的元素,又中序序列由 中序遍历而得,则在中序序列中必能找到与 a1 相同的元素,设为 bj,由此 可以得到{b1,…,bj-1}为左子树的中序序列,{bj+1,…,bm}为右子树的中序 序列。 若 j=1,即 b1 为根,此时二叉树的左子树为空,{a2,…,am}为右子树的 前序序列,{b2,…,bm}为右子树的中序序列。右子树的结点数为 m-1。由此, 这两个序列唯一确定了右子树,也唯一确定了二叉树。 若 j=m , 即 bm 为 根 , 此 时 二 叉 树 的 右 子 树 为 空 , 同 上 , 子 序 列 {a2,…,am}{b1,…,bm-1}唯一确定左子树。 若 2<=j<=m-1,则子序列{a2,…,aj}{b1,…,bj-1}唯一确定了左子树, 子序列{aj+1,…,am}{bj+1,…,bm}唯一确定了右子树。 由此证明了唯一的根及其左右子树只能构成一棵确定的二叉树。 同理,中序、后序序列可唯一确定一棵二叉树。 4【解答】(9 分) 一棵二叉树的先序序列、中序序列、后序序列如下,填空使之完整 先序: (A)B(D)F(K)I C E H(J ) G 中序: D(B)K F I A(H)E J(C)( G ) 后序: (D)K(I)F B H J(E)G(C) A 5.【解答】 (1)表长为 14,运用除留余数法作哈希函数,选择一个最接近 14 的一个素 数 13 作为除数,该哈希函数为 H(key)=key MOD 13。 (2)用线性探测再散列法解决冲突,各关键字在表中的位置如下所示:
824数据结构与算法设计
824数据结构与算法设计数据结构和算法是计算机科学中非常重要的两个概念,它们是计算机程序设计的基础。
在计算机科学中,数据结构是指一组数据的组织方式,而算法则是解决问题的一系列步骤。
824数据结构与算法设计是指在计算机领域中,为了解决问题,设计并实现高效的数据结构和算法的过程。
在824数据结构与算法设计中,我们首先需要了解数据结构的基本概念和分类。
数据结构可以分为线性结构和非线性结构。
线性结构包括数组、链表、栈和队列,而非线性结构包括树和图。
在设计数据结构时,我们需要考虑数据的存储方式和访问方式,以及对数据的增删改查操作的效率。
接下来,我们需要学习算法的设计与分析。
算法是指解决问题的一系列步骤,它可以通过伪代码或编程语言来描述。
在设计算法时,我们需要考虑算法的正确性、可读性和效率。
常见的算法设计技巧包括递归、分治、贪心、动态规划和回溯等。
在分析算法时,我们需要考虑算法的时间复杂度和空间复杂度,以评估算法的效率。
在824数据结构与算法设计中,我们还需要学习常见的数据结构和算法的应用。
例如,树和图可以用来解决网络路由和社交网络分析等问题,而排序和搜索算法可以用来解决数据的排序和查找问题。
此外,还有一些高级数据结构和算法可以用来解决更复杂的问题,如图算法中的最短路径和最小生成树算法,以及动态规划算法中的最优子结构和重叠子问题。
在824数据结构与算法设计中,我们需要学习如何使用编程语言来实现数据结构和算法。
常用的编程语言包括C、C++、Java和Python等,它们提供了丰富的数据结构和算法库。
我们需要学习如何使用这些库来实现常见的数据结构和算法,并进行性能测试和调优。
除了基本的数据结构和算法,824数据结构与算法设计还包括一些高级主题,如并行算法、分布式算法和量子算法等。
这些主题需要更深入的数学和计算机科学知识,但它们在解决特定问题时具有重要的应用价值。
在824数据结构与算法设计中,我们需要进行大量的练习和实践,以提高我们的编程和算法能力。
西安科技大学824数据结构与算法设计B2009年考研真题答案
一、判断题(下列各题,你认为正确的,请在题干的括号内打“√”,错的
打“×”。每题 1 分,共 10 分)
(√)1、在设计递归函数时,如不用递归过程就应借助于数据结构栈。
(√)2、线性表中的每个结点最多只有一个前驱和一个后继。
(×)3、对任意一个图,从它的某个顶点出发进行一次深度优先或广度优先
搜索遍历可访问到该图的每个顶点。
最后,我们有了这个表(数据结构),肯定要用它,那么就是要对这张表中 的记录进行查询,修改,删除等操作,对这个表可以进行哪些操作以及如何实 现这些操作就是数据的运算问题了。 2. 设二叉树的顺序存储结构如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 EAF∧D∧H∧∧C ∧∧∧G I ∧∧∧∧B (1)根据其存储结构,画出该二叉树。 (2)写出按前序、中序、后序遍历该二叉树所得的结点序列。 (3)将其二叉树转换为森林,并写出按前序遍历森林所得的结点序列。 解答: (1)该存储结构对应的二叉树为:
(1)前序序列和中序序列相同; (2)中序序列和后序序列相同。 答:
(1) 前序序列和中序序列相同的二叉树是:空二叉树或没有左子树的二叉树 (右单支树)。
(2) 中序序列和后序序列相同的二叉树是:空二叉树或没有右子树的二叉树 (左单支树)。
5、简述栈和队列的共同点和不同点。 答:栈和队列都是操作受限的线性表。 所有的插入和删除均在一段进行的线性表称为栈,它有先进后出的特点。 所有插入在一端,删除在另一端进行的线性表称为队列,它有先进先出的特点。 两种存储结构为:顺序存储和链式存储。 五、综合题(从 5 道题中任选 4 题,每题 15 分,共 60 分) 1.试举一个数据结构的例子,叙述其逻辑结构、存储结构、运算三个方面的 内容。 解答: 例如有一张学生成绩表,记录了一个班的学生各门课的成绩。按学生 的姓名为一行记成的表。这个表就是一个数据结构。每个记录(有姓名,学号,
数据结构与算法习题含参考答案
数据结构与算法习题含参考答案一、单选题(共100题,每题1分,共100分)1、要为 Word 2010 格式的论文添加索引,如果索引项已经以表格形式保存在另一个 Word文档中,最快捷的操作方法是:A、在 Word 格式论文中,逐一标记索引项,然后插入索引B、直接将以表格形式保存在另一个 Word 文档中的索引项复制到 Word 格式论文中C、在 Word 格式论文中,使用自动插入索引功能,从另外保存 Word 索引项的文件中插D、在 Word 格式论文中,使用自动标记功能批量标记索引项,然后插入索引正确答案:D2、下面不属于计算机软件构成要素的是A、文档B、程序C、数据D、开发方法正确答案:D3、JAVA 属于:A、操作系统B、办公软件C、数据库系统D、计算机语言正确答案:D4、在 PowerPoint 演示文稿中,不可以使用的对象是:A、图片B、超链接C、视频D、书签第 6 组正确答案:D5、下列叙述中正确的是A、软件过程是软件开发过程和软件维护过程B、软件过程是软件开发过程C、软件过程是把输入转化为输出的一组彼此相关的资源和活动D、软件过程是软件维护过程正确答案:C6、在 Word 中,不能作为文本转换为表格的分隔符的是:A、@B、制表符C、段落标记D、##正确答案:D7、某企业为了建设一个可供客户在互联网上浏览的网站,需要申请一个:A、密码B、门牌号C、域名D、邮编正确答案:C8、面向对象方法中,将数据和操作置于对象的统一体中的实现方式是A、隐藏第 42 组B、抽象C、结合D、封装正确答案:D9、下面属于整数类 I 实例的是A、-919B、0.919C、919E+3D、919D-2正确答案:A10、定义课程的关系模式如下:Course (C#, Cn, Cr,prC1#, prC2#)(其属性分别为课程号、课程名、学分、先修课程号 1和先修课程号 2),并且不同课程可以同名,则该关系最高是A、BCNFB、2NFC、1NFD、3NF正确答案:A11、循环队列的存储空间为 Q(1:100),初始状态为 front=rear=100。
《数据结构与算法》课后习题答案
《数据结构与算法》课后习题答案一、算法分析和复杂度1.1 算法复杂度的定义算法的复杂度是指算法所需资源的度量,包括时间复杂度和空间复杂度。
时间复杂度描述了算法的执行时间随输入规模增长的增长速度,空间复杂度描述了算法执行期间所需的存储空间随输入规模增长的增长速度。
1.2 时间复杂度的计算方法时间复杂度可以通过估算算法的执行次数来计算。
对于循环结构,通常可以通过循环体内代码的执行次数来估算时间复杂度。
对于递归算法,则可以通过递归的深度和每次递归的复杂度来计算时间复杂度。
1.3 常见的时间复杂度在算法分析中,常见的时间复杂度有:O(1)、O(log n)、O(n)、O(n log n)、O(n^2)、O(n^3)等。
其中,O(1)表示算法的执行时间与输入规模无关,即常数时间复杂度;O(log n)表示算法的执行时间随输入规模呈对数增长;O(n)表示算法的执行时间随输入规模呈线性增长;O(nlog n)表示算法的执行时间随输入规模呈线性对数增长;O(n^2)表示算法的执行时间随输入规模呈平方增长;O(n^3)表示算法的执行时间随输入规模呈立方增长。
1.4 空间复杂度的计算方法空间复杂度可以通过估计算法执行过程中所需要的额外存储空间来计算。
对于递归算法,通常使用递归的深度来估算空间复杂度。
1.5 算法复杂度的应用算法的复杂度分析在实际应用中非常重要,可以帮助我们选择合适的算法来解决问题。
在时间复杂度相同的情况下,可以通过比较空间复杂度来选择更优的算法。
在实际开发中,我们也可以根据算法的复杂度来进行性能优化,减少资源的消耗。
二、搜索算法2.1 线性搜索算法线性搜索算法是一种简单直观的搜索算法,逐个比较待搜索元素和数组中的元素,直到找到匹配的元素或遍历完整个数组。
其时间复杂度为O(n),空间复杂度为O(1)。
2.2 二分搜索算法二分搜索算法是一种高效的搜索算法,前提是数组必须是有序的。
算法首先取数组的中间元素进行比较,如果相等则返回找到的位置,如果大于中间元素则在右半部分继续搜索,如果小于中间元素则在左半部分继续搜索。
824数据结构与算法设计答案A
西安科技大学2013年硕士研究生入学考试试题答案A─────────────────────────────────科目编号:824 科目名称:数据结构与算法设计答案A:一、单选题(2×15=30分)BDDAC BBCDC ABABC二、填空题(2×10=20分)(1)运算/操作(2)4 (3)90 (4)h (5)2m-1(6)top=p (7)队尾(8)5 (9)n-1 (10)直接插入排序三、简答题(任选5道题,每小题8分,共40分)(只要答出要点即可)(1)线性表:每个元素有一个直接前驱和一个直接后继(除表头和表尾外);顺序表:空间利用率高,插入、删除运算效率低;链表:插入、删除运算效率高,不必事先估计“容量”,空间利用率低。
(2)“假溢出”现象是处理方式有判断队满和队空(3)二叉树的顺序存储方式是一维数组存储二叉树,且能反映各节点之间的逻辑关系;优点是可方便实现二叉树的基本操作,缺点是,除非是完全二叉树,否则空间浪费很大。
(4)邻接矩阵:邻接表、逆邻接表:不方便判断某两个顶点是否有边;两种方式各有利弊。
(5)顺序查找,(n+1)/2;二分查找,((n+1)/n/)log2(n+1)-1,要求是有序表,且存储结构式顺序结构;分块查找,(n/s+s)/2+1,要求索引有序,块间通常用二分查找,块内通常用顺序查找。
(6)什么样的图其最小生成树是唯一的?用Prim和Kruskal算法求最小生成树的时间复杂度各为多少?他们分别适合于哪种类型的图?答:(a)具有n的结点,n-1条边的连通图其生成树是唯一的。
(b)n的结点,e条边的无向连通图求最小生成树的时间分别为Prim: O(n2);Kruskal:O(e*log2e)。
(c)Prim适应于稠密图(点少边多);(d )Kruskal 适应于稀疏图(点多边少)。
四、应用题(10×4=40分)(1)(a ){96,63,78,25,57,11,44} (也可画出堆形式的图) (5分,错一个位置扣2分)(b ){63,57,44,25,11,78,96} (也可画出堆形式的图) (5分,错一个位置扣2分) (2)(a )0 1 2 3 4 5 6 7 8 9 1056237938624118(5分,错一个位置扣2分)(b )ASL=11/7。
824数据结构与算法设计
824数据结构与算法设计一、引言数据结构与算法设计是计算机科学和软件工程中的核心概念之一。
在软件开发中,数据结构和算法的设计能够直接影响程序的效率和性能。
824数据结构与算法设计是一种高效的数据结构和算法设计方法,旨在提高程序的执行速度和资源利用率。
二、824数据结构和算法设计的基本原理824数据结构和算法设计的基本原理是将数据和算法分离,并通过合理的数据结构设计和优化的算法实现,以提高程序的性能。
具体而言,824数据结构和算法设计包括以下三个方面的内容。
1. 8字节对齐:824数据结构和算法设计中的“8字节对齐”是指将数据按照8字节对齐的方式存储在内存中,这样可以提高内存的读写效率。
在824数据结构和算法设计中,对于不足8字节的数据,会进行填充,使得数据的起始地址能够被8整除。
2. 2-4-8数据结构设计:824数据结构和算法设计中的“2-4-8数据结构设计”是指将数据按照2-4-8的层次结构进行存储。
具体而言,数据被划分为两个层次:2字节数据、4字节数据和8字节数据。
在824数据结构和算法设计中,会根据数据的大小选择合适的层次进行存储,以减少内存的空间浪费。
3. 4-2-4算法设计:824数据结构和算法设计中的“4-2-4算法设计”是指根据数据的特点,选择合适的算法进行处理。
具体而言,对于4字节数据,会选择使用高效的4字节算法;对于2字节数据,会选择使用高效的2字节算法;对于8字节数据,会选择使用高效的8字节算法。
通过选择合适的算法,可以提高程序的执行效率。
三、824数据结构和算法设计的应用领域824数据结构和算法设计可以应用于各个领域的软件开发中,特别是对于需要处理大量数据的应用场景。
以下是824数据结构和算法设计在几个常见领域的应用举例。
1. 数据库系统:在数据库系统中,824数据结构和算法设计可以提高数据的存储效率和查询性能。
通过将数据按照8字节对齐和2-4-8数据结构进行存储,可以减少磁盘IO的次数,提高数据的读写效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安科技大学
2013年硕士研究生入学考试试题答案A
─────────────────────────────────科目编号:824 科目名称:数据结构与算法设计
答案A:
一、单选题(2×15=30分)
BDDAC BBCDC ABABC
二、填空题(2×10=20分)
(1)运算/操作(2)4 (3)90 (4)h (5)2m-1
(6)top=p (7)队尾(8)5 (9)n-1 (10)直接插入排序
三、简答题(任选5道题,每小题8分,共40分)(只要答出要点即可)
(1)线性表:每个元素有一个直接前驱和一个直接后继(除表头和表尾外);
顺序表:空间利用率高,插入、删除运算效率低;
链表:插入、删除运算效率高,不必事先估计“容量”,空间利用率低。
(2)“假溢出”现象是
处理方式有
判断队满和队空
(3)二叉树的顺序存储方式是一维数组存储二叉树,且能反映各节点之间的逻辑关系;
优点是可方便实现二叉树的基本操作,缺点是,除非是完全二叉树,否则空间浪费很大。
(4)邻接矩阵:
邻接表、逆邻接表:不方便判断某两个顶点是否有边;
两种方式各有利弊。
(5)顺序查找,(n+1)/2;
二分查找,((n+1)/n/)log2(n+1)-1,要求是有序表,且存储结构式顺序结构;
分块查找,(n/s+s)/2+1,要求索引有序,块间通常用二分查找,块内通常用顺序查找。
(6)什么样的图其最小生成树是唯一的?用Prim和Kruskal算法求最小生成树的时间复杂度各为多少?他们分别适合于哪种类型的图?
答:(a)具有n的结点,n-1条边的连通图其生成树是唯一的。
(b)n的结点,e条边的无向连通图求最小生成树的时间分别为
Prim: O(n2);Kruskal:O(e*log2e)。
(c)Prim适应于稠密图(点少边多);
(d )Kruskal 适应于稀疏图(点多边少)。
四、
应用题(10×4=40分)
(1)(a ){96,63,78,25,57,11,44} (也可画出堆形式的图) (5分,错一个位置扣2分)
(b ){63,57,44,25,11,78,96} (也可画出堆形式的图) (5分,错一个位置扣2分) (2)(a )
0 1 2 3 4 5 6 7 8 9 10
56
23
79
38
62
41
18
(5分,错一个位置扣2分)
(b )ASL=11/7。
(5分)
(3)(a )(5分,错一个位置扣2分) (b )(5分,错一个位置扣2分)
(4)答:(1) (2)V1,V2,V4,V6,V3,V5
(3) 顶点集合V(G)={V1,V2,V3,V4,V5,V6}
边的集合 E(G)={(V1,V2),(V2,V3),(V1,V4),(V4,V5),(V5,V6)}
(4) V1到V3最短路径为67: (V1—V4—V3) 五、算法设计题(10×2=20分) (1)void exchange(NODE *t )
{
NODE *P ; if (t!=NULL) { P=t->lchild; t->lchild=t->rchild; t->rchild=P; exchange(t->lchild); exchange(t->rchild); }
36 25 18 10 29 38 30 42
1 4 3
2 6 5 1
2 4 6
3 5
}
(2) 以二叉链表为存储结构,编写按层次顺序(同一层自左至右)遍历二叉树的算法。
【分析】根据层次遍历的定义,同层结点A和B,若结点A先于结点B访问,则其子结点也先于B的子结点访问,符合先进先出的处理规律。
在二叉树中,在访问某个结点的时候,可以得到其指向子结点的指针,所以由上面层次访问的特点,利用队列,在访问某个结点的时候,让指向其子结点的指针入队列,随后的访问结点可从队列得到。
答
typedef struct Node
{ DataType data;
struct Node *LChild;
struct Node *Rchild;
}BiTNode, *BiTree;
void LayerOrder(BiTree T)
{ InitQueue(Q);
EnQueue(Q,T);
while(!QueueEmpty(Q))
{ DeQueue(Q,p);
visit(p);
if(p->LChild) EnQueue(Q,p->LChild);
if(p->RChild) EnQueue(Q,p->RChild);
}
(3)解答
① search=0 ②qc=qc->next ③fa=pa
④ pa=fa->next ⑤fa->next=qc ⑥ pc->next=pa。