资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
2017华工数据结构作业一、程序阅读填空1. 在顺序表中第 i 个位置插入新元素 xtemplate int SeqList:Insert (Type & x, int i) if (ilast+1|last=MaxSize-1) return 0; /插入不成功 else last+; for( _int j=MaxSize-1_;ji;j-) _ _dataj+1=dataj_ _; datai = x; return 1; /插入成功 1. 直接选择排序的算法 template void SelectSort(datalist & list) for(int i=0; ilist.CurrentSize-1; i+) _SelectExchange(list,i)_; template viod SelectExchange(datalist & list, const int i)int k = i; for(int j=i+1;j list.CurrentSize;j+)if(list.Vectorj.getKey()list.Vectork.getKey()_ k=j_;/当前具有最小关键码的对象 if(k!=i) Swap(list.Vectori, list.Vectork); /交换3、 删去链表中除表头结点外的所有其他结点template void List : MakeEmpty ( ) ListNode *q; while (firstlink!=NULL) _q=first-link_; _fitst-link=q-link_; /将表头结点后第一个结点从链中摘下 delete q; /释放它 last = first; /修改表尾指针4、基于有序顺序表的折半搜索递归算法(Element为有序顺序表)template int orderedList :BinarySearch(const Type & x, const int low, const int high)const int mid = -1; if ( low = high ) _mid=(low+high)/2_; if ( Elementmid.getKey( ) x ) mid = BinarySearch ( x, low, mid -1 ); return mid;5、在顺序表中第 i 个位置插入新元素 x 。int insert(sqlist *L, datatype x, int i) int j; if (L-n=maxsize) cout”表满,不能插入!(上溢)n”; return 1; if( i=maxsize ) coutn;j=i;j-)L-dataj=L-dataj-1; /节点后移 L-dataj=x ; /插入xL-n+; /修改表长Return 1; /插入成功6、直接选择排序的算法void SelectSort( list R, int n ) int i, j, k; for (i=1; i=n-1;i+) /n-1趟排序 k=i ; for(j=i+1;j=n,j+) /在当前无序区中找键值最小的记录Rk if(Rj.keyRk.key) k=j ;if(k!=i) R0=Ri; Ri=Rk; Rk=R0;二、简答题1. 线性表可用顺序表或是链表存储,此两种存储表示各有哪些优缺点?答:1)顺序存储表示是将数据元素存放于一个联系的存储空间中,实现顺序存取或(按下标)直接存取。顺序存储的优缺点有:(1) 它的存储效率高,存取速度快。但它的空间大小一经定义,在程序整个运行期间不会发生改变,因此,不易扩充。(2) 由于在插入或删除是,为了保持原有次序(没有规定元素进栈顺序),平均需要移动一半(或近一半)元素,修改效率不高。2)链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表存储的优缺点有:(1) 只要存储器中还有空间,就不会产生存储溢出问题。(2) 在插入和删除时不需要保存数据元素原来的物理顺序,只需要保存原来的逻辑顺序,因此不必移动数据,只需修改它们的链接指针,修改效率较高。但存取表中的数据元素时,只能循链接顺序访问,因此存取效率不高。 2. 设有一个输入数据的序列是46,25,78, 62, 12, 37, 70, 29,试画出从空树起,逐个输入各个数据而生成的二叉搜索树。答:按顺序逐个输入:46 / 25 78 / / 12 37 62 / 29 703.用广义表的带表头结点的存储表示法表示下列集合。A = ( )B = (6, 2)C = (a,( 5, 3, x)D = (B, C, A)E = (B, D)答: 4.上图所示为一有向图,请给出该图的下述要求:(1)给出每个顶点的入度和出度;(2)以结点3为起始结点,分别画出该图的一个深度优先生成树和一个宽度优先生成树;(3)给出该图的邻接矩阵;(4)给出该图的邻接表;答:(1)顶点 入度 出度 1 3 0 2 2 2 3 1 2 4 1 3 5 2 1 6 2 3 (2) 深度优先生成树广度优生成树415623 125463000 ()邻接矩阵 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 1 0(4)邻接表 5. 对于如上图所示的有向图,试写出:(1) 从顶点出发进行深度优先搜索所得到的深度优先生成树;(2) 从顶点出发进行广度优先搜索所得到的广度优先生成树;答:(1)以顶点 为根的深度优生树(不唯一): 或 (3) 以顶点为根的广度优生成树: 6.已知二叉树的先序、中序和后序序列分别如下,但其中有一些已模糊不清,试构造出该二叉树。先序序列_BC_EF_中序序列BDE_AG_H后序序列_DC_GH_A答:后续最后一个是A,所以A是先序的第一个得到:先序序列ABC_EF_中序序列BDE_AG_H后序序列_DC_GH_A (A) / (BDE) (G_H) 先序的第二个元素时B,所以B是A的左子树根节点,有中序B在最前,知道其他元素都在B的右子树上。所以,后序序列为(DE_)B(B_H)A ,对比已有的后序序列_DC_GH_A得后序序列为:EDCBGHFA , 中序序列为:BDECAGFH 先序序列 ABC_EF_ 中序序列BDECAGFH 后序序列EDCBGHFA 所以
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号