数据结构复习题集(上).ppt
《数据结构复习题集(上).ppt》由会员分享,可在线阅读,更多相关《数据结构复习题集(上).ppt(43页珍藏版)》请在课桌文档上搜索。
1、数据结构习题集,第一二章,重要概念:数据结构相关定义:数据结构=数据+结构 记作 Data_Structure=(D,S)其中,Data_Structure是数据结构的名称。D是数据元素的有限集合(一般为一个数据对象)S是D上关系的有限集.几个相关名词:存储结构 逻辑结构 现实中任何一个问题都可以定义为一个数据类型-称为抽象数据类型抽象数据类型Abstract Data Type ADT一个数学模型及定义在这个模型上的一组操作(或运算)的总称.抽象数据类型定义 抽象数据类型=数学模型+操作=数据结构+操作描述如下:ADT 抽象数据类型的名称 数据对象 数据关系 基本操作ADT抽象数据类型名时间
2、复杂度(空间复杂度雷同)通常选择对特定问题的最基本操作作为原操作,以原操作执行次数即语句频度作为算法的时间度量T(n)。算法分析一般步骤:1.计算出算法的各个语句的频度2.统计出算法的语句频度和T(n)3.给出T(n)的大O表示称为算法的时间复杂度T(n)=O(f(n)常见的时间复杂度,按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、k次方阶O(nk)、指数阶O(2n)。,第一二章习题,1数据结构在计算机中的表示称为数据的(存储结构)。2数据结构是相互之间存在一种或多种特定关系的数据元素的集合.3
3、数据结构在计算机中存储器内表示时,物理地址和逻辑地址相同并且是连续的,称之为(顺序存储结构)。4.定义一个整数序列的ADT 需要记住此整数序列需要支持元素的位置概念。Integers数据对象:D=ci|ci DO DO=INT i=1,2,n n=0 数据关系:R NN=|ci-1,ci D0 i=2,3,,n 基本操作:void clear();void insert(int);void remove(int);void sizeof();bool isEmpty();bool isInSet(int);,5.写出下列代码段的平均时间复杂度。假定其中的所有变量都是整型。(a)a=b+c;d=
4、a+e;(b)sum=0;for(i=0;i3;i+)for(j=0;jn;j+)sum+;(c)sum=0;for(i=0;in*n;i+)sum+;(d)for(i=0;i n-1;i+)for(j=i+1;j n;j+)tmp=Aij;Aij=Aji;Aji=tmp;(e)sum=0;for(i=1;i=n;i+)for(j=1;j=n;j*=2)sum+;(f)sum=0;for(i=1;i=n;i*=2)for(j=1;j=n;j+)sum+;,T(n)=O(f(2)=O(1);常数阶时间复杂度,T(n)=O(f(n-1)*(n)/2)=O(n2);,T(n)=O(f(3n)=O(n
5、);1阶时间复杂度,T(n)=O(f(n*log2n)=O(n*logn);,T(n)=O(f(log2n*n)=O(logn*n);,T(n)=O(f(n2)=O(n2);2阶时间复杂度,(g)Assume that array A contains values,Random takes constant time,and sort takes steps.for(i=0;i 1)if(ODD(n)n=3*n+1;else n=n/2;,T(n)=O(f(n*(n-1)/2)=O(n2);,T(n)=O(f(n*n*log2n)=O(n2logn);,T(n)=O(f(n+1)/2)=O(
6、n);,下限是(log n),没有上限。(只有当n=2x时,此段代码执行次数最少,执行的次数为log2n),7.(代码题)输入三个数x,y,z 按照从小到大顺序输出将输入的三个数作为数组元素进行冒泡排序void main()int num=3;printf(Input three number:n);int anum,temp,i,j;for(i=0;iaj)temp=ai;ai=aj;aj=temp;for(i=0;inum;i+)scanf(%d,ai);,第三章,重要概念:线性表:具有相同数据类型的n(n=0)个数据元素的有限序列。一般表示为L=(a1,a2,ai,an)注意:线性表是一
7、种逻辑结构,表示元素之间一对一的相邻关系,下面说的两种实现方式是指他们的存储结构。线性表的两种实现方式:顺序表:顺序存储的线性表又称为顺序表,是使用一组地址连续的存储单元,依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理地址上也相邻。链表:通过一组任意的存储单元来存储线性表中的数据元素,每一个链表结点,除了存放元素自身信息还需要存放指向其后继的指针。,第三章习题,1在下列序列中,不是线性表的是(a,true,c)。2线性链表中各链结点之间的地址(连续与否无所谓)。3如某链表中最常用的操作是在最后一个结点后插入一个结点和删除最后一个结点,(带头结点的双循环链表)存储方式最节省运行时
8、间。4线性表的顺序存储结构特点是(可直接随机访问任一元素)。,1.设A是一个线性表(al,a2,,an),采用顺序存储结构,则在等概率的前提下,平均每插入一个元素需要移动的元素个数为多少?分析:假设 pi 是在第i个元素之前插入元素的概率,则在长度为n的线性表中插入一个元素所需移动元素次数的平均次数为:2线性表可用顺序表或链表存储。试问:(1)两种存储表示各有哪些主要优缺点?(2)如果有n个表同时并存,并且在处理过程中各表的长度会动态发生变化,表的总数也可能自动改变、在此情况下,应选用哪种存储表示?为什么?(3)若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,这时,
9、应采用哪种存储表示?为什么?Answer:(1)顺序表需要提前估计线性表的大小并且插入删除效率低需要移动大量结点,优点在于表中节点没有浪费存储空间,并且可以按位置随机访问;链表优点在于插入删除效率高,无需提前估计表的大小,表中元素个数没有限制,缺点在于访问结点需要从表头遍历查找并且每个节点除了储存元素还需要附加空间存储指针。(2)链表 表的大小不固定(3)顺序表,表大小固定,插入删除操作少,按位置随机存取速度快,3针对带表头结点的单链表,试编写下列函数。(1)定位函数Locate:在单链表中寻找第i个结点。若找到,则函数返回第i个结点的地址;若找不到,则函数返回NULL。(2)求最大值函数ma
10、x:通过一趟遍历在单链表中确定值最大的结点。(1)Node*LinkLocate(int i)if(i next;int j=0;while(p,(2)template E LinkMax()Node*p;p=head-next;E j=p-data;while(p-next,(3)统计函数number:统计单链表中具有给定值x的所有元素。(4)建立函数create:根据一维数组an建立一个单链表,使单链表中各元素的次序与an中各元素的次序相同,要求该程序的时间复杂性为O(n)。(3)template int LinkCount(E a)Node*p;p=head-next;int count
11、=0;while(p)if(p-data=a)count+;p=p-next;return count;,(4)template void LinkCreate(E a,int n)Node*p;p=head-next;/尾指针 尾插法 for(int i=0;inext=temp;temp-data=ai;p=temp-next;,5)整理函数tidyup:在非递减有序的单链表中删除值相同的多余结点。template void LinkSort()Node*p=head-next,*temp;while(p!=null,第四章,1栈应用的典型事例是()。A)排队 B)查找 C)归并 D)用“
12、算符优先法”进行表达式求值2若用单链表来表示队列,则应该选用()。A)带尾指针的非循环链表B)带尾指针的循环链表C)带头指针的非循环链表D)带头指针的循环链表 3在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,这样主机将要输出的数据依次写入该缓冲区,而打印机则从该缓冲区中取出数据打印。该缓冲区应该是一个()结构。A)堆栈B)队列C)数组D)线性表 4设一个栈的入栈序列是ABCD,则借助于一个栈所得到的出栈序列不可能是()。A)ABCDB)DCBAC)ACDBD)DABC5一般情况下,将递归算法转换成等价的非递归算法应该设置()。A)栈B)队列C)堆栈或队列D)数组6设栈
13、的输入序列是1,2,n,若输出序列的第一个元素是n,则第i个输出元素是()。A)n-i+1B)i C)n-iD)前面都不正确,D,B,D,B,A,A,1有 5个元素,其入栈次序为:A、B、C、D、E,在各种可能的出栈次序中,以元素C第一个出栈,D第二个出栈的次序有哪几个?分析:栈特点:先进后出;元素C元素D为前两个出栈元素,说明AB已入栈,并且CD入栈后又出栈。可能的情况有 三种。E元素未入栈时,BA依次出栈 即为CDBAE;B元素出栈后E元素入栈然后EA再入栈 即为CDBEA;E元素入栈后,EBA依次出栈 即为CDEBA2已知一个栈S的输入序列为abcd,下面两个序列能否通过栈的Push和P
14、op操作输出;如果能,请写出操作序列;如果不能,说明原因。(1)dbca(2)cbda 分析:栈特点:先进后出;(1)dbca 不可能 若d第一个出栈,则只有dcba这种可能(2可能 操作序列为:Push(a)Push(b)Push(c)Pop(c)Pop(b)Push(d)Pop(d)Pop(a)3.给一个链表增加一个成员函数,此函数用来将链表中的元素逆置。算法时间复杂度尽可能的小。,Node*Reverse(Node*head)Node*p,*q;if(head=NULL)return NULL;p=NULL;/*逆序后头指针的next为NULL*/while(head-next)q=he
15、ad-next;/*保存指针的下一个*/head-next=p;/*next指针反转*/p=head;/*指针后移*/head=q;/*指针后移*/head-next=p;/*处理逆序后的尾指针*/return head;4.存在一个非空的队列,以及一个空栈。写出一个算法去逆置队列中的元素,并且只能使用栈和队列的基本操作,在空间上只使能用一个变量空间。void reverse(Queue,5.花括号的匹配问题,题目要求,给出一个只有(和)的字符串,使用栈去判断字符串中的左右括号的使用是否正确,其中正确的含义包括:个数上是否正使用确以及配对上是否正确。a)如果字符串不正确则返回false,若字符
16、串正确则返回true。提示:在任意时刻不可能存在右括号比左括号多的情况。(b)如果字符串不正确则返回出错元素在字符串中的下标,若字符串正确则返回true答案:a)利用栈进行匹配,从左往右遍历字符串,左括号入栈,右括号匹配栈顶元素,若匹配不到则字符串出错,若成功则左括号出栈;最后判断栈是否为空,不为空则出错。bool balance(String str)Stack S;int pos=0;while(str.charAt(pos)!=NULL)/遍历strif(str.charAt(pos+)=()/左括号入栈 S.push();else if(str.charAt(pos+)=)/右括号 i
17、f(S.isEmpty()return FALSE;/没有相匹配的左括号,出错 else S.pop();/匹配成功 继续循环 if(S.isEmpty()return TRUE;/栈不为空说明左括号过多,出错 else return FALSE;,b)从左往右遍历字符串,将左括号对应下标入栈,右括号匹配最新的左括号即为栈顶元素,若匹配不到则字符串出错,直接返回当前右括号的下标;若成功则栈顶出栈;最后判断栈是否为空,不为空则出错。int balance(String str)Stack S;int pos=0;while(str.charAt(pos)!=NULL)/将下标直接存入栈中 出错可
18、以直接返回 if(str.charAt(pos+)=()S.push(pos);else if(str.charAt(pos+)=)if(S.isEmpty()return pos;else S.pop();if(S.isEmpty()return-1;else return S.pop();,第五章 二叉树,1.设某二叉树前序为abdcef,中序为dbaecf,画出此二叉树(南方名校经典试题)2有二叉树中序序列为:ABCEFGHD;后序序列为:ABFHGEDC;请画出此二叉树。,3若一颗二叉树的前序遍历序列与后序遍历序列分别为1.2.3,4和4,3,2,1,则该二叉树的中序遍历不会是(C)。
19、A)1 2 3 4 B)2 3 4 1 C)3 2 4 1 D)4 3 2 14.在下列序列中,不能唯一地确定一颗二叉树的是(D)A)层次序列和中序序列B)先序序列和中序序列C)后序序列和中序序列D)先序序列和后序序列分析1:前序序列为LRN后序序列为NLR,由于前序序列与后序序列正好相反,因此不可能存在一个结点同时存在左右孩子,即二叉树的高度为4,且1为根节点,因此在中序序列中1或者在序列首部或者在尾部,现考虑除去根节点的以2为根节点的子树。分析2:先序序列为NLR,后序序列为LRN虽然可以唯一确定一颗树中的根节点,但是无法划分左右子树,例如先序序列为AB,后序序列为BA5.已知二叉树的先序
20、遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果是什么,并且画出这颗二叉树。答:后序遍历结果为:CBEFDA,6.已知二叉树的层次序列为ABCDEF,中序序列为BADCFE,则先序序列是什么,并且画出这颗二叉树。答:先序遍历结果为:ABCDEF7.表达式x*(y-z)+u的逆波兰式(后缀表达式)表示是(B)。A)xyzuu-+B)xyz-*u+C)xyz*-u+D)+-*xyzu,8.设有表达式:a*(b-c)/d+f/(g+h*i),试给出此表达式的下面结果:二叉树表示;逆波兰式表示;中缀表示;,逆波兰式表示(后缀即为左右根):abc-*d/fghi*+/+中缀表示(即为
21、左根右):a*b-c/d+f/g+h*i,9.已知下列字符A、B、C、D、E、F、G的权值分别为3、12、7、4、2、8、11,试求对应哈夫曼树。,步骤如下:(1)将w1、w2、,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2)在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;(3)从森林中删除选取的两棵树,并将新树加入森林;(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。,10.Build the Huffman coding tree and determine the codes f
22、or the following set of letters and weights:Letter A B C D E F G H I J K L Frequency 2 3 5 7 11 13 17 19 23 31 37 41 What is the expected length in bits of a message containing characters for this frequency distribution?,209/83 126/l 42 55 71/H I 24 J 34 K/E F 17 G/D 10/5 C/A B,l 00 h 010 i 011 e 10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 复习题

链接地址:https://www.desk33.com/p-271196.html