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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构教案.docx

1、 数据结构教案数据结构教案 吉林大学珠海学院 教 案 20112012 学年第 2学期 系(中 心)计算机科学与技术系 教 研 室 课 程 名 称 数据结构 主 讲 教 师 陈守孔、冯广慧 吉林大学珠海学院教务处制 教 案 讲授章节 第 1 讲 绪论 授课时数 2 教学目的:1.了解数据结构课程的重要性和课程的基本要求,以及本课程涵盖的内容;2.掌握数据结构的基本概念;3.理解算法描述和简单的算法分析。教 学 内 容(讲授提纲)1.从后序课(数据库、操作系统、编译原理、人工智能)的需要和考研两方面介绍数据结构课程的重要性。2.通过三个例子讲解数据结构研究的内容。3.介绍基本概念:数据的三个层次

2、,数据结构的三个要素,数据结构的分类,四种存储结构,抽象数据类型,算法,算法的五个特性,对算法设计的要求,算法描述和算法分析,时间复杂度和空间复杂度。4.从“百钱买百鸡”(“一百元钱买一百支笔”)的算法例子说明选择算法的重要性:方案 1:for(i=0;i =100;i+)for(j=0;j =100;j+)for(k=0;k=100;k+)if(i+j+k=100&3*i+2*j+0.5*k=100)printf(“i=%d,j=%d,k=%d”,i,j,k)方案 2:for(i=0;i =20;i+)for(j=0;j =34-i;j+)if(3*i+2*j+(100-i-j)*0.5=1

3、00)printf(“i=%d,j=%d,k=%d”,i,j,100-i-j);方案 1 内层循环超过 100万次,在某机器上运行了 50分钟;方案 2 的 if语句执行 525次,运行了 2 秒钟,相差 1500倍。5.算法分析举例 (1)常量阶:时间复杂度为 O(1)+x;s=0;语句频度为 1,时间复杂度为 O(1)。for(j=1;j=10000;+j)+x;s+=x;语句频度为 10000,时间复杂度为 O(1)。(2)对数阶:时间复杂度为 O(logn)s=0;for(j=1;j=n;j*=2)s+;语句频度为 logn,所以时间复杂度为 O(logn)。(3)线性阶:时间复杂度为

4、 O(logn)S=0;for(j=1;j=n;+j)s+;语句频度为 n,所以时间复杂度为 O(n)。(4)时间复杂度为 O(nlogn)s=0;for(j=1;j=n;j*=2)for(k=1;k=n;+k)s+;时间复杂度为 O(nlogn)(5)平方阶:时间复杂度为 O(logn)s=0;for(j=1;j=n;+j)for(k=1;k=n;+k)s+;语句频度为 n2,所以时间复杂度为 O(n2)。s=0;for(j=1;j=n;j+)for(k=1;k=j;+k)s+;语句频度为 n(n+1)/2,所以时间复杂度仍为 O(n2)。(6)立方阶:时间复杂度为 O(n3)例:矩阵乘法:

5、n x n for(i=0;i n;i+)/(n+1)for(j=0;j n;j+)/n(n+1)cij=0;/n2 for(k=0;k1)个整数存放到一维数组 R 中。试设计一个在时间和空间两方面都尽可能高效的算法,将 R 中保存的序列循环左移 P(0Pn)个位置,即将 R中的数据由(X0,X1,Xn-1)变换为(Xp,Xp+1,Xn-1,X0,X1,Xp-1)。要求:(1)给出算法的基本设计思想。(2)根据设计思想,采用 C 或 C+或 JAVA 语言描述算法,关键之处给出注释。(3)说明你所设计算法的时间复杂度和空间复杂度。解答:(1)算法设计思想:按照下标 0到 p-1、p到 n-1、

6、0到 n-1的顺序,将这三段分别逆置,最后的结果即为所求。(2)void leftshift(int R,int p,int n)/将有 n个元素的一维数组 R 的序列循环左移 p(0pn)个位置 elemtype t;/t 和数组 R 中的元素具有相同类型 for(i=0;ip/2;i+)/逆置 0.p-1 段 t=Ri;Ri=Rp-1-i;Rp-1-i=t;for(i=p;i(n+p)/2;i+)/逆置 p.n-1 段 t=Ri;Ri=Rn-1-i+p;Rn-1-i+p=t;for(i=0;inext=NULL;/初始化一个空链表,L为头指针 scanf(&x);/x 是和链表元素具有相同

7、类型的变量 while(x!=flag)/flag为结束输入的标志 p=(LNode*)malloc(sizeof(LNode);p-data=x;/输入元素值 p-next=L-next;/链接到表中 L-next=p;/插入到表头 scanf(&x);/读入下一个元素的值 return L;(2)尾插法 LinkedList LinkedListCreat2()/用尾插法建立带头结点的单链表 LinkedList L;L=(LNode*)malloc(sizeof(LNode);L-next=NULL;r=L;scanf(&x);while(x!=flag)/设置结束标志 p=(LNode

8、*)malloc(sizeof(LNode);p-data=x;/赋值元素值 r-next=p;/在尾部插入新结点 r=p;/r 指向新的尾结点 scanf(&x);r-next=NULL;/最后结点的指针域放空指针 return L;(3)单链表的遍历 void print(LinkedList la)/非递归 LinkedList p=la-next;while(p)printf(“%c,”,p-data);/正序输出 p=p-next;void out(LinkedList p)/递归 if(p)out(p-next);printf(“%c,”,p-data);/逆序输出 /若将以上两个

9、语句位置调换,则正序输出 5.了解单链表的应用。举例 1.:LinkedList Union(LinkedList la,LinkedList lb)将非递减有序的单链表 la和 lb 合并成新的非递减有序单链表 lc,并要求利用原表空间 举例 2:已知一个带有表头结点的单链表,结点结构为(data,link),假设该链表只给出了头指针 list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第 k 个位置上的结点(k 为正整数),若查找成功,算法输出该结点的 data域的值,并返回 1;否则,只返回 0,要求:描述算法的基本设计思想;描述算法的详细实现步骤;根据设计思想和实

10、现步骤,采用程序设计语言描述算法(使用 C 或 C+或JAVA语言实现),关键之处请给出简要注释。【2009年全国硕士研究生入学计算机学科专业基础综合试题】int SearchInvK(LinkedList la,int k)/在单链表 la上查找倒数第 k个结点 p=list-link;/p 指向当前待处理元素 q=list;/若成功,q指向倒数第 k个元素 i=1;while(p&ilink;if(p=null)printf(“不存在n”);return 0;while(p)q=q-link;p=p-link;return 1;/end 本章节的教学重点、难点:1动态存储(单链表)的概念。

11、2单链表的算法设计。教学方法、教学手段:1链表的定义和基本操作的实现(45 分钟)2链表生成和链表应用的算法设计(45 分钟)使用教具:计算机和投影仪 作业、讨论题、思考题:2.1 试述头指针、头结点、元素结点、首元结点的区别,说明头指针和头结点的作用。2.2 分析顺序存储结构和链式存储结构的优缺点,说明何时应该利用何种结构。2.4 为什么在单循环链表中常使用尾指针,若只设头指针,插入元素的时间复杂度如何?2.5 在单链表、双链表、单循环链表中,若知道指针 p指向某结点,能否删除该结点,时间复杂度如何?2.6 下面算法的功能是什么?LinkedList Unknown(LinkedList l

12、a)LNode*q,*p;if(la&la-next)q=la;la=la-next;p=la;while(p-next)p=p-next;p-next=q;q-next=null;return la;2.7 选择题:在循环双链表的*p 结点之后插入*s 结点的操作是()A、p-next=s;s-prior=p;p-next-prior=s;s-next=p-next;B、p-next=s;p-next-prior=s;s-prior=p;s-next=p-next;C、s-prior=p;s-next=p-next;p-next:=s;p-next-prior=s;D、s-prior=p;s

13、next=pnext;pnext-prior=s;p-next=s;原:2.9 设 ha和 hb 分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,表中无重复数据。改:2.9 设 ha和 hb 分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递减有序的单链表。要求使用原链表空间,表中无重复数据。参考资料:1陈守孔等著 算法与数据结构 C 语言版 机械工业出版社 2007 2陈守孔等著 算法与数据结构考研试题精析 机械工业出版社 2008 3严蔚敏等著 数据结构 C 语言版 清华大学出

14、版社 2005 4D.E.Knuth著 计算机程序设计技巧第一、三卷 管纪文译 国防出版社 教 案 讲授章节 第 4讲 循环链表 双链表 授课时数 2 教学目的:1.掌握循环链表引入的背景:从任一结点开始可以访问链表中的全部结点。2.掌握循环链表(单循环链表,双循环链表)和双链表。教 学 内 容(讲授提纲)1比较顺序表和单链表操作的优缺点,使用范围。2介绍单循环链表。指出:单循环链表往往只设尾指针。3.讲解两个只设尾指针的单循环链表合并成一个单循环链表的例子。4双链表的定义:typedef struct DLNode ElemType data;struct DLNode*prior,*nex

15、t;DLNode,*DLinkedList;5.双链表和双循环链表是两种链表。6.线性表的操作在双链表中的实现 凡涉及一个方向的指针时,如求长度,取元素,元素定位等,其算法描述和单链表基本相同。但是在插入或删除结点时,一个结点就要修改两个指针域,所以要比单链表复杂。由于双链表有两个指针域,求前驱和后继都很方便。6.算法设计举例:(1)将单循环链表改为双循环链表 假设一个单循环链表,其结点含有三个域 pre、data、next。其中 data 为数据域;pre为指针域,它的值为空指针(null);next 为指针域,它指向后继结点。请设计算法,将此表改成双向循环链表。void SToDouble

16、(LinkedList la)while(la-next-pre=null)la-next-pre=la;/将结点 la后继的 pre指针指向 la la=la-next;/la指针后移 /算法结束(2)已知一双向循环链表,从第二个结点至表尾递增有序,(设 a1xnext;将第一结点从链表上摘下 p-prior=L-prior;p-prior-next=p;while(p-datanext;查插入位置 s-next=p;插入原第一结点 s s-prior=p-prior;p-prior-next=s;p-prior=s;算法结束(3)链表的匹配逆置 L1 与 L2分别为两单链表头结点地址指针,且两表中数据结点的数据域均为一个字母。设计把 L1中与 L2中数据相同的连续结点顺序完全倒置的算法。LinkedList PatternInvert(LinkedList L1,LinkedList L2)p=L1;p是每趟匹配时 L1中的起始结点前驱的指针 q=L1-next;q 是 L1 中的工作指针。s=L2-next;s 是 L2 中的工作指针。while(p!=null&s!=null)

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

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