1、 datai = x; return 1; /插入成功 1. 直接选择排序的算法 template void SelectSort(datalist& list) for(inti=0; ilist.CurrentSize-1; i+) _SelectExchange(list,i)_;viodSelectExchange(datalist list, constinti)int k = i;for(int j=i+1;jlist.CurrentSize;j+)if(list.Vectorj.getKey()list.Vectork.getKey()_k=j_;/当前具有最小关键码的对象 if
2、(k!=i) Swap(list.Vectori, list.Vectork); /交换3、 删去链表中除表头结点外的所有其他结点 void List : MakeEmpty ( ) ListNodelink_;_fitst-link=q-link_; /将表头结点后第一个结点从链中摘下 delete q; /释放它 last = first; /修改表尾指针 4、基于有序顺序表的折半搜索递归算法(Element为有序顺序表)intorderedListBinarySearch(const Type & x, constint low, constint high)constint mid =
3、 -1; if ( low = high ) _mid=(low+high)/2_; if ( Elementmid.getKey( ) x ) mid = BinarySearch( x, low, mid -1 ); return mid;5、在顺序表中第 i个位置插入新元素 x 。intinsert(sqlist *L, datatype x, inti) int j; if (L-n=maxsize) cout”表满,不能插入!(上溢)n”; return 1;if( i=maxsize ) coutn;=i;L-dataj=L-dataj-1; /节点后移dataj=x; /插入xn
4、+; /修改表长Return 1; /插入成功6、直接选择排序的算法void SelectSort( list R, int n ) inti, j, k; for (i=1;=n-1;i+) /n-1趟排序k=i ; for(j=i+1;=n,j+) /在当前无序区中找键值最小的记录Rk if(Rj.keyRk.key) k=j ;if(k!=i) R0=Ri; Ri=Rk; Rk=R0;二、简答题1. 线性表可用顺序表或是链表存储,此两种存储表示各有哪些优缺点?答:1)顺序存储表示是将数据元素存放于一个联系的存储空间中,实现顺序存取或(按下标)直接存取。顺序存储的优缺点有:(1) 它的存储
5、效率高,存取速度快。但它的空间大小一经定义,在程序整个运行期间不会发生改变,因此,不易扩充。(2) 由于在插入或删除是,为了保持原有次序(没有规定元素进栈顺序),平均需要移动一半(或近一半)元素,修改效率不高。2)链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表存储的优缺点有:(1) 只要存储器中还有空间,就不会产生存储溢出问题。(2) 在插入和删除时不需要保存数据元素原来的物理顺序,只需要保存原来的逻辑顺序,因此不必移动数据,只需修改它们的链接指针,修改效率较高。但存取表中的数据元素时,只能循链接顺序访问,因此存取效率不高。2. 设有
6、一个输入数据的序列是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)顶点 入度
7、出度 1 3 0 2 2 2 3 1 2 4 1 3 5 2 1 6 2 3 (2) 深度优先生成树广度优生成树 ()邻接矩阵 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.已知二叉树的先序、中序和后序序列分别如下,但其中有一些已模糊不清,试构
8、造出该二叉树。先序序列_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 所以(A) / (B) (F) / (C) (G)
9、 (H) / (D) (E) 7分析下列两个程序段的运行时间(时间复杂度)。void mystery (int n) for (i =1; n; i+) for (j = i+1; j = n; j+) for (k = 1; k= j; k+);O(n3)void odd (int n) inti, j, x = 0, y = 0; if odd(i) for(j = i; j+) x+;for( j = 1;= i; j+) y+;O(n2)8.有一组数据:25,50,70,21,4,18,100,43,7,12。现采用汽泡排序算法进行排序,写出每趟排序的结果,并标明第一趟数据的移动情况。
10、第一趟:25, 50 ,70 ,21, 4, 18, 100, 43, 7, 12 25, 50, 70, 21, 4, 18, 100, 43, 7, 12 25, 50, 21, 70, 4, 18, 100, 43, 7 ,12 25, 50, 21, 4, 70, 18, 100, 43, 7, 12 25, 50, 21, 4, 18, 70, 100, 43, 7, 12 25, 50, 21, 4, 18, 70, 43, 100, 7, 12 25, 50, 21, 4, 18, 70, 43, 7, 100, 12 25, 50, 21, 4, 18, 70, 43, 7, 12, 100第二趟:25, 21, 4, 18, 50, 43, 7, 12, 70, 100第三趟:21, 4, 18, 25, 43, 7, 12, 50, 70, 100第四趟:4, 18 ,21, 25, 7, 12, 43, 50, 70, 100第五趟:4, 18, 21, 7, 12, 25, 43, 50, 70, 100第六趟:4, 18, 7, 12, 21, 25, 43, 50, 70, 100第七趟:4, 7, 12, 18, 21, 25, 43, 50, 70, 100
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1