数据结构期中作业
- 格式:docx
- 大小:168.15 KB
- 文档页数:13
数据结构期中考试试卷一、选择题(每题2分,共20分)1. 在数据结构中,线性结构的特点是什么?A. 元素之间存在一对一关系B. 元素之间存在一对多关系C. 元素之间存在多对多关系D. 元素之间存在一对一或多对多关系2. 以下哪个算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序3. 在二叉树中,度为2的节点最多有多少个子节点?A. 1B. 2C. 3D. 44. 哈希表解决冲突的方法不包括以下哪一项?A. 分离链接法B. 开放寻址法C. 链地址法D. 树形结构法5. 以下哪个不是图的遍历算法?A. 深度优先搜索B. 广度优先搜索C. 动态规划D. 克鲁斯卡尔算法6. 栈的特点是?A. 后进先出B. 先进后出C. 先进先出D. 后进后出7. 以下哪个不是二叉搜索树的性质?A. 左子树上所有节点的值小于它的根节点的值B. 右子树上所有节点的值大于它的根节点的值C. 左子树和右子树都是二叉搜索树D. 所有节点的值都相等8. 在数据库中,索引的作用是什么?A. 增加数据存储空间B. 提高数据检索效率C. 降低数据插入速度D. 减少数据存储量9. 以下哪个不是图的存储结构?A. 邻接矩阵B. 邻接表C. 树形结构D. 边列表10. 递归算法的基本思想是什么?A. 将问题分解为更小的子问题B. 重复执行相同的操作C. 将问题转化为非递归形式D. 避免使用循环结构二、填空题(每题2分,共20分)1. 在数据结构中,______是一种特殊的线性表,只允许在一端进行插入和删除操作。
2. 排序算法中,______排序的时间复杂度为O(n^2),适用于小规模数据的排序。
3. 在图的表示中,______矩阵可以有效地表示稠密图。
4. 哈希表中,______是指两个关键字通过哈希函数得到同一个哈希地址。
5. 栈和队列的主要区别在于,栈是______,而队列是先进先出。
6. 二叉树的遍历方式包括前序遍历、中序遍历和______遍历。
第页/共 页 《数据结构》期中考试试卷一、选择题(每题2分,共40分)1.组成数据的基本单位是【 】。
A .数据项B .数据类型C .数据元素D .数据变量 2.线性表采用链式存储时,结点的存储地址【 】。
A .必须是不连续的 B .连续与否均可C .必须是连续的D .和头结点的存储地址相连续3. 有一个含头结点的单链表,头指针为head ,判断其是否为空的条件为【 】。
A .head==NULL B . head->next==NULL C .head->next==head D .head!=NULL 4.算法分析的目的是【 】。
A .辨别数据结构的合理性B .评价算法的效率C .研究算法中输入与输出的关系D .鉴别算法的可读性5.已知指针p 所指结点不是尾结点,若在*p 之后插入结点*s ,则应执行下列哪一个操作?【 】。
A. s->next = p ; p-> next = s ;B. s-> next = p-> next ; p-> next = s ;C. s-> next = p-> next ; p = s ;D. p-> next = s ; s-> next = p ; 6.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可 能出现的出栈序列为【 】。
A .3,2,6,1,4,5B .5,6,4,2,3,1C .1,2,5,3,4,6D .3,4,2,1,6,5 7.一个元素进入队列的时间复杂度是【 】。
A O(1)B O(n)C O(n 2)D O(log 2n) 8.数组A[1..5,1..6]的每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,5]的地址为【 】。
A 1140 B 1145 C 1120 D 1125 9.链表不具有的特点是【 】。
一、选择题(每题2分,共30分)1.设指针变量front表示链式队列的队头指针,指针变量rear表示链式队列的队尾指针,指针变量s指向将要入队列的结点X,则入队列的操作序列为()。
(A) front->next=s;front=s;(B) s->next=rear;rear=s;(C) rear->next=s;rear=s;(D) s->next=front;front=s;2.设一条单链表的头指针变量为head且该链表没有头结点,则其判空条件是()。
(A) head==0(B) head->next==0(C) head->next==head(D) head!=03.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是___。
(A) 3 1 2(B) 2 3 1(C) 1 2 3(D) 3 2 14.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为()。
(A) O(log2n)(B) O(1)(C) O(n2)(D) O(n)5.设循环队列的元素存放在一维数组A[0..40]中,队列非空时,front指示队首元素,rear指示队尾元素的后一个位置。
如果队列中元素的个数为15,front的值为33,则rear应指向的位置是()。
A. A[6]B. A[16]C. A[7]D. A[17]6.广义表A = (a,(b),(),(c,d,e,f))的长度为()。
A.3B.4C.5D.67.从广义表LS=((a, b), c, d)中分解出原子b的运算是()。
A. head(tail(LS))B. tail(head(LS))C. head(tail(head(LS)))D. tail(tail(head(LS)))8.二维数组A[12][18]采用以列为主优先存储方法,若每个元素各占3个存储单元,且第1个元素的地址为150,则元素A[10][8]的地址为()。
一、单项选择题(每小题3分,共30分)1、线性结构是数据元素之间存在的一种_______。
A、一对多关系B、多对多关系C、多对一关系D、一对一关系2、以下数据结构中,哪一个不是线性结构()A.生成树 B. 顺序栈 C. 单链表 D. 循环队列3、设n是偶数,则运行下列程序段的时间复杂度为()。
x=100;for(p=2;p<=n;p++)for(q=2*i;q<=n;q++)x=(x+1)*3;A.O(1) B.O(n) C.O(n2) D.O(lbn)4、若频繁地对线性表进行插入和删除操作,该线性表应该采用——存储结构。
A、散列B、顺序C、链式D、索引5、在非空双向循环链表中由q所指的链结点后面插入一个由p所指的链结点的动作依次为:p->llink=Q;p->rlink=q->rlink;q->rlink=p;_______.(空白处为一条赋值语句) A、q->llink=p B、q->rlink->llink=pC、p->rlink->llink=pD、p->llink->llink=p6、设循环队列的结构是:const int Maxsize=100;typedef int Data Type;typedef struct {Data Type data[Maxsize];Int front, rear;} Queue;若有一个Queue类型的队列Q,试问判断队列满的条件应是下列哪一个语句()A 、Q.front= = Q.rear; B、 Q.front - Q.rear= = Maxsize;C、Q.front + Q.rear= = Maxsize;D、 Q.front= = (Q.rear+1)% Maxsize;7、已知L是一个不带表头的单链表, 在表首插入结点*p的操作是()。
A. p = L; p->next = L;B. p->next = L; p = L;C. p->next = L; L = p;D. L = p; p->next= L;8、下面关于串的叙述中,哪一个是不正确的?( )A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储9、若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( )。
一、单项选择题(本题总分 20分,每题 2分)在每小题列出的四个选项中只有 一个选项是符合题目要求的,请将正确选项前的字母。
1.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为( D ) 。
A.顺序表 B.链表 C.索引表 D.散列表采用排除法,顺序表存储位置表示数据元素的顺序关系,跟关键字无法;链表的地址是动态分配的;索引表是 按数据元素的关键字排序所得,它的数据元素是没有规律的2.在长度为 n 的顺序表的第 i(1≤i ≤n+1)个位置上插入一个元素,元素的移动次数为( A ) 。
A.n -i+1B.n -iC.iD.i -1代入计算法,我们知道在 i=n+1 时不需要移动元素3.若一棵二叉树的先序遍历序列为 a,b,c ,则由 abc 三个结点构成的二叉树个数为( B ) 。
A.4B.5C.6D.74.三维数组 A[4][5][6]按行优先存储方法存储在内存中,若每个元素占 2 个存储单元,且数组中第一个元素的存 储地址为 130,则元素 A[3][4][5]的存储地址为(B A.370B .368C .366) 。
D.372Loc(3,4,5)=loc(0,0,0)+(3*5*6+4*6+5)*2=130+119*2=368;5.高度为 h 的二叉树(仅含根结点的二叉树高度为 1)的结点最少是多少( D) 。
A. h+1B. 2hC. 2h -1D. h二叉树性质 26. 将两个各有 n 个元素的有序表归并成一个有序表,其最多的比较次数是( A. nB.n+1 C. 2n-1D. n-17. 已知一算术表达式的中缀形式为 A +B *C -D/E ,后缀形式为 ABC *+DE/-,其前缀形式为( C) 。
A )。
A. -+A*BC/DE C. -+*ABC/DEB. –A+B*CD/E D. –A+B*C/DE根据中缀和后缀表达式可画出表达树如下:- + /A* D EBC故前缀表达式为:-+A*BC/DE数据结构期中考试8.下面图示的顺序存储结构表示的二叉树是( A )。
电子科技大学成都学院2010-2011学年第二学期期中习题数据结构一、填空题1.数据的逻辑结构包括集合、____线性____、树形结构和图状结构四种类型。
2.已知有实现同一功能的两个算法,其时间复杂度分别为O(2n)和O(n),哪个算法的效率更高?______ O(n)__3.若经常需要对线性表进行删除操作,则最好采用_____链表___存储结构。
4.在一个单链表L中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则应进行的操作序列为:___________ p一>next=q->next _____,q一>next=p。
5.在以L为头指针的带头结点的单循环链表中,链表为空的条件分别为___L->next=L_____。
6.在双向链表中,每个结点含有两个指针域,一个指向__头______结点,另一个指向___尾_____结点。
7.设元素1,2,3,4,5依次进栈S,若要在输出端得到序列34251,则应进行的操作序列为:push(S,1),push(S,2),push(S,3),pop(S),_ push(S,4)_______,pop(S),pop(S),push(S,5),___ pop(S)_____,pop(S)。
8.已知循环队列的存储空间为数组a[21],且头指针和尾指针分别为8和3,则该队列的当前长度为____15____。
9.一个串的任意个连续的字符组成的子序列称为该串的__子串______,包含该子序列的串称为__主串______。
10.广义表(A,(a,b),d,e,((i,j),k)),则广义表的长度为__5______,深度为___4_____。
二、选择题1.计算机识别、存储和加工处理的对象被统称为___A_____。
A. 数据B. 数据元素C. 数据结构D. 数据类型2.下面程序段的时间复杂度为______C__。
for(int i=0; i<m; i++)for(int j=0; j<n; j++)A[i][j]=i*j;A. O(m2)B. O(n2)C. O(m*n)D. O(m+n)3.下列有关线性表的叙述中,正确的是___A_____。
一、选择题(每小题2分,共30分)1. 数据结构是( D )。
A.一种数据类型 B.数据的存储结构C.一组性质相同的数据元素的集合D.相互之间存在一种或多种特定关系的数据元素的集合2.以下与数据的存储结构无关的术语是( D )。
A.链队列 B. 链表 C. 顺序表 D. 栈3.以下数据结构中,( A )是非线性数据结构A.树 B.字符串 C.队 D.栈4.一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是(B)。
A.98 B.100 C.102 D.1065.在线性表的下列运算中,不改变数据元素之间结构关系的运算是(D)。
A.插入 B.删除 C.排序 D.查找6.线性表采用链式存储时,其地址(D )。
A.必须是连续的 B.一定是不连续的C.部分地址必须连续 D.连续与否均可以7.线性表是(A )。
A.一个有限序列,可以为空 B.一个有限序列,不可以为空C.一个无限序列,可以为空 D.一个无限序列,不可以为空8.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为(B)。
A.3,2,6,1,4,5 B.3,4,2,1,6,5C.1,2,5,3,4,6 D.5,6,4,2,3,19. 若一个栈的输人序列是1,2,3,…,n,输出序列的第一个元素是n,则第k个输出元素是(C )。
A.k B.n-k-1 C.n-k+1 D.不确定10.对于队列操作数据的原则是( A )。
A. 先进先出B. 后进先出C. 先进后出D. 不分顺序11. 栈和队列的共同点是( C )。
A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点12.在一个链队列中,假定front和rear分别为头指针和尾指针,删除一个结点的操作是( A )。
A.front=front->next B.rear=rear->nextC.rear->next=front D.front->next=rear13. 空串与空格串( B )。
《数据结构》期中测试班级:姓名:学号:一、填空题:1、在数据结构中,从逻辑上可以把数据结构分为集合、线性结构、树形结构和图状结构,其中树形结构和图状结构合称为非线性结构。
数据结构被形式地定义为二元组(D,S),其中D是数据元素的有限集合,S是D上关系的有限集合。
2、算法的五个重要特性是有穷性、确定性、可行性、输入和输出。
3、一个顺序表第一个元素的存储地址是100,每个元素的长度为3,则第6个元素的地址是115。
在顺序表中插入或删除一个元素,需要平均移动(n+1)/2个元素,具体移动的元素个数与插入或删除元素的位置有关。
顺序表中逻辑上相邻的元素的物理位置相邻。
单链表中逻辑上相邻的元素的物理位置不一定相邻。
单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的指针域指示。
在单链表中设置头结点的作用是使第一个结点与其他结点的操作统一。
4、从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较(n+1)/2个结点。
在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是O(n)。
给定有n个元素的线性表,建立一个有序单链表的时间复杂度是O(n2)。
5、已知L是无表头结点的非空单链表,且指针p所指结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
在p所指结点后插入s所指结点:4、1。
在p所指结点前插入s所指结点:7、11、8、4、1。
在表首插入s所指结点:5、12。
在表尾插入s所指结点:11、9、1、6。
1)p->next=s;2)p->next=p->next->next;3)p->next=s->next;4)s->next=p->next;5)s->next=L;6)s->next=NULL;7)q=p;8)while(p->next!=q) p=p->next;9)while(p->next!=NULL) p=p->next;10)p=q;11)p=L;12)L=s;13)L=p;6、已知指针p所指结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。
福建师范大学数学与计算机科学学院
2009--2010学年度上学期08电信
《数据结构》期中试题
试卷类别:闭卷考试时间:90分钟
倚窗远眺,目光目光尽处必有一座山,那影影绰绰的黛绿色的影,是春天的颜色。
周遭流岚升腾,没露出那真实的面孔。
面对那流转的薄雾,我会幻想,那里有一个世外桃源。
在天阶夜色凉如水的夏夜,我会静静地,静静地,等待一场流星雨的来临…
许下一个愿望,不乞求去实现,至少,曾经,有那么一刻,我那还未枯萎的,青春的,诗意的心,在我最美的年华里,同星空做了一次灵魂的交流…
秋日里,阳光并不刺眼,天空是一碧如洗的蓝,点缀着飘逸的流云。
偶尔,一片飞舞的落叶,会飘到我的窗前。
斑驳的印迹里,携刻着深秋的颜色。
在一个落雪的晨,这纷纷扬扬的雪,飘落着一如千年前的洁白。
窗外,是未被污染的银白色世界。
我会去迎接,这人间的圣洁。
在这流转的岁月里,有着流转的四季,还有一颗流转的心,亘古不变的心。
数据结构期中试卷(考试时间80分钟, 满分100分)一、填空(2*20=40分)1.数据按逻辑结构可分为___________, __________________和__________________。
2.评价一个算法效率的标准是 __________________和__________________。
3、链式存储中结点分为两个域, 分别是______________和__________________。
4.带头结点的单链表为空表的条件是head->link= =NULL。
5.栈的工作特点是__________________, 队列的工作特点是__________________6、判断环形队列队空的条件是head= =tail, 队满的条件是(tail+1)%MAXN= =head。
7、在顺序存储的线性表中插入、删除一个结点平均移动个结点n/2。
8、有一个400项的表, 若用分块查找法, 则分成____20___块最好。
9、单链表中在p结点后插入q结点的语句为_q->link=p->link,p->link=q。
10、单链表中删除p结点后q结点的语句为p->link=q->link,free(q)。
11.判断带头结点的的环形链表为空表的条件为____head->link= =head____________。
12.二分查找的前提条件是按关键字有序, 分块查找的前提条件是块间有序, 块内有序或无序。
13、广义表中元素若为数据元素则被称为_________, 若为广义表则被称为________________。
二、判断(1*10=10分)1.链式存储结构优于顺序存储结构。
( F )2.顺序存储可实现随机存取。
( T )3.对于链表中元素逻辑相邻则物理也相邻。
( F )4.把中缀表达式转换为后缀表达式时应用的是队列。
( F )5.队列是插入、删除限制在表的两端的线性表。
数据结构期中试卷及答案解析考试说明考试说明:考察前五章小题,难度接近真题。
满分100分,共20道选择题,每题5分。
请在60分钟内完成。
C T(n)=n3+5000nD T(n)=2nlogn-1000n参考答案:C本题考察时间复杂度,多个项相加时,只保留最高阶项由于巴啦啦能量——“常<对<幂<指<阶”,因此T(n)=logn+5000n=O(n)T(n)=n2-8000n=O(n2)T(n)=n3+5000n=O(n3)T(n)=2nlogn-1000n=O(nlogn)所以O(n3)复杂度最大,选C。
3.下列叙述中正确的是()①线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比②线性表在链式存储时,查找第 i 个元素的时间同 i 的值无关③线性表在顺序存储时,查找第 i 个元素的时间同 i 的值成正比A. 仅①B. 仅②C. 仅③D. ①②③参考答案:A线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比。
线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关4.若线性表最常用的操作是存取第i个元素及其前驱和后继元素的值,为节省时间应采用的存储方式()。
A. 单链表B. 双向链表C. 单循环链表D. 顺序表参考答案:D注意到,题目要求存取第i个元素及其前驱和后继,ABC三个选项找到第i个元素的时间复杂度均为O(n),而D选项对于这3个位置的存取的时间复杂度均为O(1),故选D。
5.静态链表中next域表示的是()A 下一个元素的地址B 下一个元素的值C 当前元素的值D 下一个元素在数组中的位置参考答案:D静态链表一般保存在数组中,它和链表最大的区别是静态链表占用一段固定的区间,所以next域只需要表示下一个元素在数组中的下标即可而不是表示下一个元素的地址,选D。
6.对于不带头结点的链栈L(next域表示该结点下一个元素),top指针指向栈顶元素(栈顶在链头方向),则x结点进栈操作为A top->next=x;top=x;B top=x;top-next=x;C top=x;x->next=top;D x->next=top;top=x;参考答案:D本题考察链栈的操作x入栈之后x下一个元素为原来的top,所以先把x->next=top,然后更新top,栈顶元素指向x。
一、选择题(每小题 1分,共10分)1、队列是插入和删除受限的线性表,其删除操作是在线性表的(1)进行。
A.表头 B.表尾 C.任意位置 D.指定位置2、下述哪一条是顺序存储结构的优点(2)。
A.存储密度大 B.插入运算方便C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示3、设有一个栈,元素的进栈次序为A, B, C, D, E,下列哪个是不可能的出栈序列(3)。
A.A, B, C, D, E B.B, C, D, E, AC.E, A, B, C, D D.E, D, C, B, A4、若二叉树的根结点所在的层次为第1层,则该二叉树的第k层上至多有(4)个结点。
2k B.2k C.2k-1 D.2k+1A. 15、设单链表中指针p指向结点m,若要删除m的后继结点(假设该后继结点存在),则需修改指针的操作为(5)。
A.p->next=p->next->next; B.p=p->next;C.p=p->next->next; D.p->next=p;6、下面程序段的时间复杂度为(6)。
for(int i=0; i<m; i++)for(int j=0; j<n; j++) a[i][j] = i*j;A.O(m2) B.O(n2) C.O(m+n) D. O(m*n)7、非空的循环单链表head的尾结点指针p满足(7)。
A.p==NULL B.p== head C.p->next==head D.p->next==NULL8、已知二维数组A[0..9,0..9]中,元素a[2][0]的地址为560,每个元素占4个字节,则元素a[1][0]的地址为(8)。
A. 518B. 520C. 522D. 5249、在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队满的条件为(9)。
A.rear%n= = front B.(front+l)%n= = rearC.rear%n -1= = front D.(rear+l)%n= = front10、假设在一棵二叉树中,度为2的结点数为15,度为1的结点数为10个,则该二叉树的分支总数为(10)个。
厦门大学《_数据结构_》课程期中试卷信息科学与技术学院计算机科学系__年级___专业主考教师:____试卷类型:(A卷/B卷)任选5题((1,2),(3,4),(5,6),(7,8)中必须至少做一题),每题20分。
一、试设计一个双栈结构,它有两个端点end1和end2,满足从end1端插入的表目只能从end1端被删除,从end2端插入的表目只能从end2端被删除,并给出指定端i(i=1,2)的进栈push(S,e,i)和出栈pop(S,e,i)操作的算法描述。
再设计一个算法,它能够将一个有限长度的数据序列a1,a2,…,an,按照下标奇偶序号交替的方式将ai (1≤i≤n)分别从两端入栈,然后将数据出栈以实现整个数据序列的倒排。
该双栈宜采用顺序存储、栈顶迎面增长的存储方式,其形式定义如下:#define STACK_SIZE 1000typedef struct {SElemType base[STACK_SIZE];SElemType *top[3]; //top[1]表示end1端的栈顶指针,top[2]表示end2端的栈顶指针//初始值分别为base和base+STACK_SIZE-1}DSqStack;指定端i(i=1,2)的进栈push(S,e,i)和出栈pop(S,e,i)操作的算法描述如下:Status push(DSqStack &S, SElemType e, int i) {if ( S.top[1]-S.top[2]==1 ) //栈满exit(OVERFLOW);else if (i==1)*S.top[1]++ = e;else if (i==2)*S.top[2]-- = e;elsereturn ERROR;return OK;}Status pop(DSqStack &S, SElemType &e, int i) {if (i==1) {if ( S.top[1] == S.base ) return ERROR;e = *--S.top[1] = e;return OK;}else if (i==2) {if (S.top[2] == S.base+STACK_SIZE-1) return ERROR;e = *++S.top[2];return OK;} elsereturn ERROR;}基于上述结构的数据序列的倒排算法描述如下:Status resevers(DSqStack &S, SElemType a[], int n) {for (j=1;j<=n;j++)if (j%2==0) push(S, a[j-1],2);else push(S, a[j-1],1);for (j--;j>=1;j--)if (j%2==0) pop(S, a[n-j],2);else pop(S, a[n-j],1);return OK;}二、利用两个栈S1、S2模拟一个队列(如客户队列)时,如何用栈的运算实现队列的插入、删除运算。
一、判断题:1、线性表的逻辑顺序与物理顺序总是一致的。
( )2、线性表的顺序存储表示优于链式存储表示。
( )3、线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。
( )4、二维数组是其数组元素为线性表的线性表。
( )5、每种数据结构都应具备三种基本运算:插入、删除和搜索。
( )6、数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运算三个方面。
( )7、线性表中的每个结点最多只有一个前驱和一个后继。
()8、线性的数据结构可以顺序存储,也可以链接存储。
非线性的数据结构只能链接存储。
()9、栈和队列逻辑上都是线性表。
()10、单链表从任何一个结点出发,都能访问到所有结点()11、删除二叉排序树中一个结点,再重新插入上去,一定能得到原来的二叉排序树。
()12、快速排序是排序算法中最快的一种。
()13、多维数组是向量的推广。
()14、一般树和二叉树的结点数目都可以为0。
()15、直接选择排序是一种不稳定的排序方法。
()16、98、对一个堆按层次遍历,不一定能得到一个有序序列。
()17、在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
()18、折半搜索只适用与有序表,包括有序的顺序表和有序的链表。
()19、堆栈在数据中的存储原则是先进先出。
()20、队列在数据中的存储原则是后进先出。
()21、用相邻矩阵表示图所用的存储空间大小与图的边数成正比。
()22、哈夫曼树一定是满二叉树。
()23、程序是用计算机语言表述的算法。
()24、线性表的顺序存储结构是通过数据元素的存储地址直接反映数据元素的逻辑关系。
()25、用一组地址连续的存储单元存放的元素一定构成线性表。
()26、堆栈、队列和数组的逻辑结构都是线性表结构。
()27、给定一组权值,可以唯一构造出一棵哈夫曼树。
()28、只有在初始数据为逆序时,冒泡排序所执行的比较次数最多。
1.评价算法优劣的基本标准有哪些?请就每一项给出简短说明。
答:(1)正确性:对输入的合法数据(包括边界情况),都能有正确的输出结果。
(2)健壮性:对输入的非法数据,算法能适当地做出反应或进行处理,而不是产生莫名其妙的输出结果。
(3)可读性:有助于人对算法的理解,易于发现错误,便于调试和修改。
(4)效率与低存储量需求:效率和存储量需求分别指算法执行所需要的时间和最大存储空间。
2.已知一棵二叉树的中序和后序序列分别为GLDHBEIACJFK和LGHDIEBJKFCA,(1)画出这棵二叉树,对这棵二叉树的构造过程给出一个简短说明;(2)将这棵二叉树理解为“孩子-兄弟法”表示的森林,画出这个森林。
答:(1)构造出的二叉树如图1所示:图1构造过程说明:①后序序列的最后一个元素为A, 得知二叉树的根为A;②在中序序列中找到树根A, A左侧的部分GLDHBEI为左子树的中序序列,A右侧的部分CJFK为右子树的中序序列。
并得知左子树7个节点,右子树4个节点;③后序序列的前7个节点LGHDIEB是左子树的后序序列,后续序列的后4个节点JKFC是右子树的后序序列;④根据中序GLDHBEI后序LGHDIEB求左子树,根据中序CJFK后序JKFC 求右子树。
依此类推,便可唯一构造出此二叉树。
(2)“孩子-兄弟表示法”,又称二叉链表表示法,链表中结点的两个链域分别指向该结点的第一个孩子和下一个兄弟结点,一棵二叉树与森林一一对应,该森林如图2所示:图23.字符A,B,C,D,E,F,G的使用频度分别是15,8,10,21,6,19,3,写出A,B,C,D,E,F,G的Huffman编码,列出编码过程,解释Huffman 有什么优点。
解:编码过程如下:各字符编码为字符 A B C D E F G编码011 110 010 00 1111 10 1110优点:Huffman编码为前缀码,它根据结点出现的频度由低到高编码,则可以使频度较高的结点有尽可能短的编码,从而使整个发送文件的总编码长度尽可能短。
数据结构期中作业文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]北京邮电大学远程教育计算机科学与技术专业《数据结构》实验指导书实验一线性表的插入和删除一、实验目的1、掌握用Turbo C上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。
二、实验内容线性表基本操作的实现当我们要在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表的第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。
若要删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。
程序实现:typedef Null 0;typedef int datatype;#define maxsize 1024;typedef struct{ datatype data[maxsize];int last;}sequenlist;int insert(L, x, i)sequenlist *L;int i;{ int j;if ((*L).last= =maxsize-1){ printf(“overflow”);return Null;}elseif ((i<1)‖(i>(*L).last+1){ printf(“error”);return Null;}else{ for(j=(*L).last; j>=i-1; j--) (*L).data[j+1]=(*L).data[j]; (*L).data[i-1]=x;(*L).last=(*L).last+1;}return(1);}int delete(L,i)sequenlist *L;int i;{ int j;if ((i<1)‖(i>(*L).last+1)){printf (“error”);return Null;}else{ for(j=i, j<=(*L).last; j++) (*L).data[j-1]=(*L).data[j]; (*L).data - -;}return(1);}void creatlist( ){ sequenlist *L;int n, i, j;printf(“请输入n个数据\n”);scanf(“%d”,&n);for(i=0; i<n; i++){ printf(“data[%d]=”, i);scanf (“%d”, (*L).data[i]); }(*L).last=n-1;printf(“\n”);}printout (L)sequenlist *L;{ int i;for(i=0; i<(*L).last; i++){ printf(“data[%d]=”, i);printf(“%d”, (*L).data[i]); }}main( ){ sequenlist *L;char cmd;int i, t;clscr( );printf(“i, I…..插入\n”);printf(“d,D…..删除\n”);printf(“q,Q……退出\n”); do{ do{cmd =getchar( );}while((cmd!=‘d’)‖(cmd!=‘D’)‖(cmd!=‘q’)‖(cmd!=‘Q’)‖(cmd!=‘i’)‖(cmd!=‘I’));switch (cmd){ case ‘i’,‘I’; scanf(&x);scanf(&i);insert(L, x, i);printout(L);break;case ‘d’,‘D’; scanf(&i);delete(L, i);printout(L);break;}}while ((cmd!=‘q’)&&( cmd!=‘Q’));}实验二二叉树的操作一、实验目的1、进一步掌握指针变量、动态变量的含义;2、掌握二叉树的结构特征,以及各种存储结构的特点及适用范围;3、掌握用指针类型描述、访问和处理二叉树的运算。
二、实验内容已知以二叉链表作存储结构,试编写按层次顺序遍历二叉树的算法。
算法思想:本算法要采用一个队列q,先将二叉树根结点入队列,然后退队列,输出该结点;若它有左子树,便将左子树根结点入队列;若它有右子树,便将右子树根结点入队列,直到队列空为止。
因为队列的特点是先进先出,从而达到按层次顺序遍历二叉树的目的。
程序实现:#define M 100#define Null 0typedef struct node{ int data;stuuct node *lchild, *rchild;} bitree;bitree *que[M];int front=0, rear=0;bitree *creat( ){ bitree *t;int x;scanf (“%d”, &x);if (x= =0)t=Null;else{t=malloc(sizeof(bitree));t→data=x;t→lchild=creat( );t→rchild=creat( );}return t;}void inorder( t )bitree *t;{ if (t!=Null){ inorder (t→lchild);printf(“%4d”, t→data);inorder (t→rchild);}}void enqueue(t)bitree *t;{ if(front!=(rear+1) % M){rear = (rear+1) % M;que[rear]=t;}}bitree *delqueue( ){if (front= =rear)return Null;front=(front+1) % M;return (que[front]);}void levorder ( t )bitree *t;{ bitree *p;if(t!=Null){enqueue( t );while(front!=rear){ p=delqueue( );printf(“%4d”, p→data); if(p→lchild!=Null)enqueue(p→l child);if(p→r child!=Null)enqueue(p→rchild);} }}main ( ){ bitree *root;printf(“\n”);root=creat ( );inorder(root);printf(“\n”);levorder(root);}实验三图的操作一、实验目的1、掌握图的基本存储方法;2、掌握有关图的操作算法并用高级语言实现;3、熟练掌握图的两种搜索路径的遍历方法。
二、实验内容假设以一个带权有向图表示某一区域的公交线路网,图中顶点代表一些区域中的重要场所,弧代表已有的公交线路,弧上的权表示该线路上的票价(或搭乘所需时间),试设计一个交通指南系统,指导前来咨询者以最低的票价或最少的时间从区域中的某一场所到达另一场所。
算法思想:下面是R、W、Floyd求每对顶点之间最短路径算法的C语言程序,程序中矩阵A用来进行n次迭代,矩阵P用来记录路径,P[i][j]为迭代过程中当前已经求得的从顶点i到顶点j的最短路径上最后被插入的那个顶点。
算法实现:typedef struct node{ int no;float wgt;struct node *next;}edgenode;typedef struct{ char vtx;edgenode *link;}vexnode;typedef vexnode Graph[n];void Floyd(Graph G, float A[n][n], int p[n][n]){int i, j, k;for (i=0; i<n; i++)for(j=0;j<n;j++){A[i][j]=G[i][j];P[i][j]=-1;}for (k=0; k<n; k++)for (i=0; i<n; i++)for (j=0; j<n; j++)if(A[i][k] +A[k][j]<A[i][j]){P[i][j]=k;A[i][j]=A[i][k]+A[k][j];}}实验四排序一、实验目的1、掌握常用的排序方法,并掌握用高级语言实现排序算法的方法;2、深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用;3、了解各种方法的排序过程及其依据的原则,并掌握各种排序方法的时间复杂度的分析方法。
二、实验内容统计成绩[问题描述]给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:(1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;(2)按名次列出每个学生的姓名与分数。
[基本要求]学生的考试成绩表必须通过键盘输入数据而建立,同时要对输出进行格式控制。
[算法实现]下面给出的是用直接选择排序算法实现的C语言程序。
#define n 30typedef struct student{ char name[8];int score;}student R[n];main ( ){ int num, i, j, max, temp;printf(“\n请输入学生成绩: \n”);for (i=0; i<n; i++){ printf (“姓名:”);scanf (“%s”, &stu[i].name);scanf (“%4d”, &stu[i].score);}num=1;for (i=0; i<n; i++){ max=i;for (j=i+1; j<n; j++)if (R[j].score>R[max].score)max=j;if (max!=i){ temp = R[max];R[max]=R[i];R[i]= temp;}if ((i>0)&&(R[i].score<R[i-1].score))num=num+1;printf(“%4d%s%4d”, num, R[i].name, R[i].score);}}实验五查找一、实验目的1、掌握查找的不同方法,并能用高级语言实现查找算法;2、熟练掌握二叉树的构造和查找方法。
二、实验内容设计一个读入一串整数构成一棵二叉排序树的算法。
[实现提示]二叉排序树的构成,可从空的二叉树开始,每输入一个结点数据,就建立一个新结点插入到当前已生成的二叉排序树中,所以它的主要操作是二叉排序树插入运算。
在二叉排序树中插入新结点,只要保证插入后仍符合二叉排序树的定义即可。