ImageVerifierCode 换一换
格式:DOCX , 页数:52 ,大小:164.57KB ,
资源ID:4004439      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4004439.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(考查目标.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

考查目标.docx

1、考查目标【考查目标】 1. 理解数据结构的基本概念;掌握数据的逻辑结构、存储结构及其差异,以及各种基本操作的实现。 2. 掌握基本的数据处理原理和方法的基础上,能够对算法进行设计与分析。 3. 能够选择合适的数据结构和方法进行问题求解。 一、线性表大纲要求:(一) 线性表的定义和基本操作 (二) 线性表的实现 1. 顺序存储结构 2. 链式存储结构 3. 线性表的应用 知识点:1 深刻理解数据结构的概念,掌握数据结构的“三要素”:逻辑结构、物理(存储)结构及在这种结构上所定义的操作“运算”。2 时间复杂度和空间复杂度的定义,常用计算语句频度来估算算法的时间复杂度。以下六种计算算法时间的多项式是

2、最常用的。其关系为:O(1)O(logn)O(n)O(nlogn) O(n2)O(n3)指数时间的关系为: O(2n)O(n!)link=plink;plink=sBqlink=s;slink=pCplink=slink;slink=pDplink=s;slink=q10. 在一个长度为n的顺序表的表尾插入一个新元素的渐进时间复杂度为( B )。AO(n) BO(1) CO(n2) DO(log2n)11. 表长为n的顺序存储的线性表,当在任何位置上插入一个元素的概率相等时,插入一个元素所需移动元素的平均个数为( B )An B. n/2 C. (n-1)/2 D. (n+1)/212. 循环

3、链表的主要优点是( D )A不再需要头指针了。B已知某个结点的位置后,能很容易找到它的直接前驱结点。C在进行删除操作后,能保证链表不断开。D从表中任一结点出发都能遍历整个链表。(二)应用题1、按增长率由小至大排列以下7个函数。答: 2、数据的存储结构由哪四种基本的存储方法实现,并做以简要说明?答:四种表示方法(1)顺序存储方式。数据元素顺序存放,每个存储结点只含一个元素。存储位置反映数据元素间的逻辑关系。存储密度大,但有些操作(如插入、删除)效率较差。(2)链式存储方式。每个存储结点除包含数据元素信息外还包含一组(至少一个)指针。指针反映数据元素间的逻辑关系。这种方式不要求存储空间连续,便于动

4、态操作(如插入、删除等),但存储空间开销大(用于指针),另外不能折半查找等。(3)索引存储方式。除数据元素存储在一地址连续的内存空间外,尚需建立一个索引表,索引表中索引指示存储结点的存储位置(下标)或存储区间端点(下标),兼有静态和动态特性。(4)散列存储方式。通过散列函数和解决冲突的方法,将关键字散列在连续的有限的地址空间内,并将散列函数的值解释成关键字所在元素的存储地址,这种存储方式称为散列存储。其特点是存取速度快,只能按关键字随机存取,不能顺序存取,也不能折半存取。3. 线性表有两种存储结构:一是顺序表,二是链表。试问:(1)如果有 n个线性表同时并存,并且在处理过程中各表的长度会动态变

5、化,线性表的总数也会自动地改变。在此情况下,应选用哪种存储结构? 为什么?(2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?为什么? 答:(1)选链式存储结构。它可动态申请内存空间,不受表长度(即表中元素个数)的影响,插入、删除时间复杂度为O(1)。(2)选顺序存储结构。顺序表可以随机存取,时间复杂度为O(1)。(三)算法设计题1设计算法,求带表头的单循环链表的表长。解:int length(Linklist L) int I; listnode *p; I=0; P=L; while (p-next!=L) p=p-next;

6、I+; return I;2.已知单链表L,写一算法,删除其重复结点。算法思路:用指针p指向第一个数据结点,从它的后继结点开始到表的结束,找与其值相同的结点并删除之;p指向下一个;依此类推,p指向最后结点时算法结束。算法如下:解:void pur_LinkList(LinkList H) LNode *p,*q,*r; p=H-next; /*p指向第一个结点*/ if(p=NULL) return; while (p-next) q=p; while (q-next) /* 从*p的后继开始找重复结点*/ if (q-next-data=p-data) r=q-next; /*找到重复结点,

7、用r指向,删除*r */ q-next=r-next; free(r); /*if*/ else q=q-next; /*while(q-next)*/ p=p-next; /*p指向下一个,继续*/ /*while(p-next)*/该算法的时间性能为O(n2)。3.已知指针la和lb分别指向两个无头结点的单链表中的首结点。请编写函数完成从表la中删除自第i个元素开始的共len个元素并将它们插入到表lb中第j个元素之前,若lb中只有j-1个元素,则插在表尾。函数原型如下:int DeleteAndInsertSub(LinkList &la,LinkList &lb,int i,int j,

8、int len);答:int DeleteAndInsertSub(LinkList &la,LinkList &lb,int i,int j,int len) int k; LinkList p,q,prev,s; if(i0|j0|len0) return -1; p=la; k=1; prev=NULL; while(p&knext; k+; if(!p) return -1; q=p;k=1; while(q&knext; k+; if(!q) return -1; if(!prev) la=q-next; else prev-next=q-next; if(j=1) q-next=l

9、b; lb=q; else s=lb;k=1; while(s&knext; k+; if(!s) return -1; q-next=s-next; s-next=p; return 1; 4写一算法,将一带有头结点的单链表就地逆置,即要求逆置在原链表上进行,不允许重新构造新链表。函数原型如下:void LinkList_reverse(LinkList &L);答:void LinkList_reverse(LinkList &L) LinkList p,q,s; p=L-next;q=p-next;s=q-next;p-next=NULL; while(s-next) q-next=p;

10、p=q; q=s;s=s-next; q-next=p;s-next=q;L-next=s;5写一算法,将带有头结点的非空单链表中数据域值最小的那个结点移到链表的最前面。要求:不得额外申请新的链结点。函数原型如下:void delinsert(LinkList &L);答:void delinsert(LinkList &L) p=L-next; /p是链表的工作指针 pre=L; /pre指向链表中数据域最小值结点的前驱 q=p; /q指向数据域最小值结点,初始假定是第一结点 while(p-next!=NULL) if(p-next-datadata) /找到新的最小值结点 pre=p;

11、q=p-next; p=p-next; if(q!=L-next) /若最小值是第一元素结点,则不需再操作 pre-next=q-next; /将最小值结点从链表上摘下 q-next=L-next; /将q结点插到链表最前面 L-next=q; 6编写一个算法来交换单链表中指针P所指结点与其后继结点,HEAD是该链表的头指针,P指向该链表中某一结点。答:单链表中查找任何结点,都必须从头指针开始。本题要求将指针p所指结点与其后继结点交换,这不仅要求知道p结点,还应知道p的前驱结点。这样才能在p与其后继结点交换后,由原p结点的前驱来指向原p结点的后继结点。LinkedList Exchange(L

12、inkedList HEAD,p) HEAD是单链表头结点的指针,p是链表中的一个结点。本算法将p所指结点与其后继结点交换。q=head-next; q是工作指针,指向链表中当前待处理结点。pre=head; pre是前驱结点指针,指向q的前驱。while(q!=null & q!=p)pre=q;q=q-next; 未找到p结点,后移指针。if(p-next=null)printf(“p无后继结点n”); p是链表中最后一个结点,无后继。Else 处理p和后继结点交换 q=p-next; 暂存p的后继。 pre-next=q; p前驱结点的后继指向p的后继。 p-next=q-next;p的

13、后继指向原p后继的后继。 q-next=p ;原p后继的后继指针指向p。 算法结束。7已知线性链表第一个链结点指针为list,请写一算法,将该链表分解为两个带有头结点的循环链表,并将两个循环链表的长度分别存放在各自头结点的数据域中。其中,线性表中序号为偶数的元素分解到第一个循环链表中,序号为奇数的元素分解到第二个循环链表中。答:算法如下:void split(ListNode *List, ListNode *&list1, ListNode *&list2)list1=(ListNode *)malloc(sizeof(ListNode );list2=(ListNode *)malloc(

14、sizeof(ListNode );p=list;;q=list1;r=list2;len1=0;len2=0;mark=1;while (p!=null)if(mark=1)q-next=p;q=q-next;len1+;mark=2;elser-next=p;r=r-next;len2+;mark=1;list1-data=len1;list2-data=len2;q-next=list1;r-next=list2;8. 设A和B是两个单链表,其表中元素递增有序。试写一算法将A和B归并成一个按元素值递减有序的单链表C,并要求辅助空间为O(1)。答:Linklist merge(Linkli

15、st A,Linklist B)Linklist C;Listnode *p;C=null;while (A&B) if(A-datadata) p=A-next;A-next=C;C=A;A=p; else p=B-next;B-next=C;C=B;B=p; if (A)while(A) p=A-next;A-next=C;C=A;A=p; else while(B) p=B-next;B-next=C;C=B;B=p;return C;二、栈、队列和数组大纲要求:(一) 栈和队列的基本概念 (二) 栈和队列的顺序存储结构 (三) 栈和队列的链式存储结构 (四) 栈和队列的应用 (五) 特

16、殊矩阵的压缩存储 知识点:1 栈、队列的定义及其相关数据结构的概念,包括:顺序栈、链栈、循环队列、链队列等。栈与队列存取数据(请注意包括:存和取两部分)的特点。2 掌握顺序栈和链栈上的进栈和退栈的算法,并弄清栈空和栈满的条件。注意因栈在一端操作,故通常链栈不设头结点。3 如何将中缀表达式转换成前缀、后缀表达式,了解对两种表达式求值的方法。4 栈与递归的关系。用递归解决的几类问题:问题的定义是递归的,数据结构是递归的,以及问题的解法是递归的。掌握典型问题的算法以及将递归算法转换为非递归算法,如n!阶乘问题,fib数列问题,hanoi问题。了解在数值表达式的求解、括号的配对等问题中应用栈的工作原理

17、。5 掌握在链队列上实现入队和出队的算法。注意对仅剩一个元素的链队列删除元素时的处理(令队尾指针指向队头)。还需特别注意仅设尾指针的循环链队列的各种操作的实现。6 循环队列队空及队满的条件。队空定义为队头指针等于队尾指针,队满则可用牺牲一个单元或是设标记的方法,这里特别注意取模运算。掌握循环队列中入队与出队算法。7 在后续章节中多处有栈和队列的应用,如二叉树遍历的递归和非递归算法、图的深度优先遍历等都用到栈,而树的层次遍历、图的广度优先遍历等则用到队列。这些方面的应用应重点掌握。8 数组在机器(内存)级上采用顺序存储结构。掌握数组(主要是二维)在以行序为主和列序为主的存储中的地址计算方法。9

18、特殊矩阵(对称矩阵、对角矩阵、三角矩阵)在压缩存储是的下标变换公式。练习题:(一)选择题:1. 一个栈的输入序列为1 2 3 4,则( D )不可能是其出栈序列。A. 1 2 4 3 B. 2 1 3 4 C. 1 4 3 2 D. 4 3 1 22. 一个递归算法必须包括( B )。A. 递归部分 B. 终止条件和递归部分 C. 迭代部分 D.终止条件和迭代部分3. 一个递归的定义可以用递归过程求解,也可以用非递归过程求解,但单从运行时间来看,通常递归过程比非递归过程(B)。 A较快 B较慢 C相同 D以上答案都不对4. 栈和队列都是(C)A顺序存储的线性表 B链式存储的线性表C限制存储的线

19、性表 D限制存储的非线性结构5. 二维数组N的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到4,列下标j的范围从0到5,N按行存储时元素N35的起始地址与N按列存储时元素( B )的起始地址相同。A. N24 B. N34 C. N35 D. N446. 设有数组Ai,j,数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当以列为主序存放时,元素A5,8的存储首地址是( B )A. BA+141 B. BA+180 C. BA+222 D. BA+2257. 递归过程或函数调用时,处理参数及返回地址,要用一种称为( C )的

20、数据结构。A队列 B多维数组 C栈 D. 线性表 8. 对于单链表形式的队列,队空的条件是( A )AFRnil BFRCFnil且Rnil DRF19. 若循环队列以数组Q0.m-1作为其存储结构,变量rear表示循环队列中的队尾元素的实际位置,其移动按 rear=(rear+1) Mod m 进行,变量length表示当前循环队列中的元素个数,则循环队列的队首元素的实际位置是( C )Arear-lengthB(rear-length+m) Mod mC(1+rear+m-length) Mod mDM-length(二)应用题1、(10分)假设一个准对角矩阵按以下方式存储于一维数组B4m

21、中:01234k4m24m1.写出由一对下标(i,j)表示的k的转换公式。答:i为奇数时 k=i+j-2i为偶数时 k=i+j-1合并后可写成 k=i+j-(i%2)-1 或 k=2(i/2)+j-12、特殊矩阵和稀疏矩阵哪一种压缩存储后失去随机存取的功能?为什么?答:特殊矩阵指值相同的元素或零元素在矩阵中的分布有一定规律,因此可以对非零元素分配单元(对值相同元素只分配一个单元),将非零元素存储在向量中,元素的下标i和j和该元素在向量中的下标有一定规律,可以用简单公式表示,仍具有随机存取功能。而稀疏矩阵是指非零元素和矩阵容量相比很小(tm*n),且分布没有规律。用十字链表作存储结构自然失去了随

22、机存取的功能。即使用三元组表的顺序存储结构,存取下标为i和j的元素时,要扫描三元组表,下标不同的元素,存取时间也不同,最好情况下存取时间为O(1),最差情况下是O(n),因此也失去了随机存取的功能。3、有人说,采用循环链表作为存储结构的队列就是循环队列,你认为这种说法对吗?说明你的理由。答:这种说法是错误的。队列(包括循环队列)是一个逻辑概念,而链表是一个存储概念,一个队列是否是循环队列。不取决于它将采用何种存储结构。根据实际的需要,循环队列可以采用顺序存储结构,也可以采用链式存储结构,包括采用循环链表作为存储结构。4、指出下列程序段的功能是什么? (1) void demo1(seqstack *s) int I;arr64;n=0; while (!stackempty(s) arrn+=pop(s); for(I=0;n;I+) push(s,arrI); (2) void demo2(seqstack *s,int m) seqstack t; int i; initstack(t);while(! Stackempty(s) if(I

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1