数据结构 (3).ppt
《数据结构 (3).ppt》由会员分享,可在线阅读,更多相关《数据结构 (3).ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1数据结构数据结构西南大学计信院西南大学计信院 张虹张虹 E-mail:2使用教材:使用教材:严蔚敏严蔚敏 吴伟民吴伟民 编著,编著,数据结构(数据结构(C语言版),清华大学出语言版),清华大学出版社版社参考书:参考书:1、数据结构题集(、数据结构题集(C语言版),清华大学出版社,严蔚敏、语言版),清华大学出版社,严蔚敏、吴伟民、米宁,第吴伟民、米宁,第1版,版,1997.4;2、数据结构,人民邮电出版社,晋良颖、数据结构,人民邮电出版社,晋良颖 编编3、数据结构数据结构算法实现及解析,高一凡,西安电子科技算法实现及解析,高一凡,西安电子科技大学出版社大学出版社使用教材及参考书使用教材及参考书
2、3课程教学目的课程教学目的l在计算机及其应用的各个领域中,都会用到各种各样的数在计算机及其应用的各个领域中,都会用到各种各样的数据结构,通过本课程使学生学会分析和研究计算机加工对据结构,通过本课程使学生学会分析和研究计算机加工对象的特性,选择合适的数据结构和存储表示,以及编制相象的特性,选择合适的数据结构和存储表示,以及编制相应的实现算法应的实现算法l课程教学基本要求课程教学基本要求:本课程介绍各种最常用的数据结构,本课程介绍各种最常用的数据结构,阐述各种数据结构内涵的逻辑关系,讨论它们在计算机中阐述各种数据结构内涵的逻辑关系,讨论它们在计算机中的存储表示,以及在这些数据结构上的运算和实际的执
3、行的存储表示,以及在这些数据结构上的运算和实际的执行算法,并对算法的效率进行简要的分析和讨论。算法,并对算法的效率进行简要的分析和讨论。4数据结构的研究不仅涉及到数据结构的研究不仅涉及到计算机硬件计算机硬件(特别是编码理论、存储装置和存取方法)的研究(特别是编码理论、存储装置和存取方法)的研究范围,范围,而且和而且和计算机软件计算机软件的研究有着密切的关系,无论是编译程序还的研究有着密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。是操作系统,都涉及到数据元素在存储器中的分配问题。在研究在研究信息检索时信息检索时也必须考虑如何组织数据,以便查找和存取也必须考虑如何组
4、织数据,以便查找和存取数据元素更为方便。数据元素更为方便。课程介绍课程介绍5因此,可以认为因此,可以认为数据结构数据结构是介于是介于数学、计算机硬件和计算数学、计算机硬件和计算机软件机软件三者之间的一门核心课程。三者之间的一门核心课程。程序算法数据结构程序算法数据结构目前在我国,目前在我国,数据结构数据结构已经不仅仅是计算机专业的教已经不仅仅是计算机专业的教学计划中的核心课程之一,而且是其它非计算机专业的学计划中的核心课程之一,而且是其它非计算机专业的主要选修课程之一。主要选修课程之一。通过对这门课程的学习可增强选择合适的数据结构与编写通过对这门课程的学习可增强选择合适的数据结构与编写高效的程
5、序的能力。高效的程序的能力。课程介绍课程介绍6“数据结构数据结构”的形成和发展的形成和发展单纯的数值计算单纯的数值计算带有一定结构的数据带有一定结构的数据带结构的数据带结构的数据字符字符表格表格图象图象研究数据内部的联系研究数据内部的联系数据结构数据结构研究数据外部的联系研究数据外部的联系数据模型数据模型 进一步发展:多媒体数据进一步发展:多媒体数据多媒体数据模型多媒体数据模型多媒体数据库多媒体数据库7教学安排及考试教学安排及考试讲课学时:讲课学时:72学时学时考试成绩计算:考试成绩计算:平时成绩(考勤、平时成绩(考勤、作业、课堂提问)作业、课堂提问)10分分实验(实验(30分)分)考试(考试
6、(60分)分)8目录目录第第1章章 绪论绪论第第2章章 线性表线性表第第3章章 栈和队列栈和队列第第4章章 串串第第5章章 数组和广义表数组和广义表第第6章章 树和二叉树树和二叉树第第7章章 图图第第8章章 查找查找第第9章章 内部排序内部排序9第第0 0章章 构造数据类型构造数据类型10基本类型基本类型 构造构造类类型型派生派生类类型型整型整型intint结构体结构体structstruct数组类型数组类型字符型字符型charchar共用体(联合)型共用体(联合)型unionunion指针类型指针类型实型实型floatfloat枚举型枚举型enumenum双精度型双精度型doubledoub
7、le用户定义类型用户定义类型typedef typedef 空值型空值型voidvoid构造数据类型(导出类型):构造数据类型(导出类型):由基本数据类型按一定规则组由基本数据类型按一定规则组合而成的。广义上包括表中的合而成的。广义上包括表中的构造类型和派生类型。构造类型和派生类型。同一类型数据同一类型数据的顺序排列的顺序排列 类型不同但类型不同但相互关联相互关联 110.1结构体结构体结构体类型结构体类型结构体类型变量结构体类型变量(结构体变量结构体变量)结构体的成员结构体的成员(成员成员):组成结构体的每个数据。组成结构体的每个数据。0.1.1 结构体类型定义结构体类型定义 0.1.2 结
8、构体变量说明结构体变量说明 0.1.3 结构体变量的使用结构体变量的使用 0.1.4 结构体变量的初始化结构体变量的初始化 0.1.5 结构体数组结构体数组 0.1.6 结构体和函数结构体和函数12struct结构体类型名结构体类型名类型名类型名结构体成员名;结构体成员名;/*成员表成员表*/;0.1.1 结构体类型定义结构体类型定义例例1描述通讯录的结构体类型。描述通讯录的结构体类型。structpersoncharname20;intage;charsex;charaddress100;longzipcode;例例2结构体类型的结构体类型的嵌套定义。嵌套定义。structbirthdayi
9、ntyear;intmonth;intday;structpersoncharname20;structbirthdaydate;charsex;charaddress100;longzipcode;类型名类型名成员变量名成员变量名130.1.2 结构体变量定义结构体变量定义 q间接定义间接定义q直接定义直接定义q无名定义无名定义qtypedef定义定义structbirthdayintyear;intmonth;intday;structpersoncharname20;structbirthdaydata;charsex;charaddress100;longzipcode;structp
10、ersonp;struct结构体类型名结构体类型名成员表;成员表;;struct结构体类型名结构体类型名变量名表;变量名表;先定义类型先定义类型,后单独定义变量。后单独定义变量。在类型定义之后立即定义变量。在类型定义之后立即定义变量。struct结构体类型名结构体类型名成员表;成员表;结构体变量名表结构体变量名表;structbirthdayintyear;intmonth;intday;structpersoncharname20;structbirthdaydata;charsex;charaddress100;longzipcode;p;定义一个无名结构体类型,直接定义变量。定义一个无名
11、结构体类型,直接定义变量。struct成员表;成员表;结构体变量名表结构体变量名表;structbirthdayintyear;intmonth;intday;structcharname20;structbirthdaydata;charsex;charaddress100;longzipcode;p;求结构体类型(或结构体变量)的字节数。求结构体类型(或结构体变量)的字节数。#defineNAMESIZE20#defineADDRSIZE100structbirthdayintyear;intmonth;intday;structpersoncharnameNAMESIZE;structb
12、irthdaydate;charsex;charaddressADDRSIZE;longzipcode;main()structpersonp;printf(theplength:%dn,sizeof(p);printf(thestructpersonlength:%dn,sizeof(structperson);Theplength:131Thestructpersonlength:131结构体变量的结构体变量的存储结构存储结构:对结构体变量成员对结构体变量成员顺序顺序分配存储空间。分配存储空间。140.1.3结构体变量的使用结构体变量的使用结结构构体体一一般般不不能能作作为为一一个个整整体
13、体参参加加数数据据处处理理,而而参参加加各各种种运运算算和和操操作作的的是是结结构构体体的的各各个个成成员员项项数数据据。对对成成员的使用方式:员的使用方式:结构体变量名结构体变量名.成员名成员名注:相同结构体类型的变量可以相互赋值。注:相同结构体类型的变量可以相互赋值。p.zipcode=130022;p.date.year=1980;structpersonp1,p2;p1=p2;150.1.4结构体变量的初始化结构体变量的初始化q间接初始化间接初始化q直接初始化直接初始化q无名初始化无名初始化结构体变量的初始化。结构体变量的初始化。#defineNAMESIZE20#defineADDR
14、SIZE100structbirthdayintyear;intmonth;intday;structpersoncharnameNAMESIZE;structbirthdaydate;charsex;charaddressADDRSIZE;longzipcode;structpersonp=LiPing,1994,12,25,m,zhongshanroad,310000;main()printf(Name:%sn,p.name);printf(birthday:%d,%d,%dn,p.date.year,p.date.month,p.date.day);printf(sex:%cn,p.se
15、x);printf(address:%sn,p.address);printf(zipcode:%ldn,p.zipcode);name:LiPingbirthday:1994,12,25sex:maddress:zhongshanroadzipcode:310000160.1.5 结构体数组结构体数组 1.结构体数组的定义 struct 结构体类型名 结构体数组名元素个数;structstudentaatd10=“zhangming”,18,m,“Lipiang”,20,f;structstudentaatd=“zhangming”,18,m,“Lipiang”,20,f;2.结构体数组的初
16、始化结构体数组的初始化struct结构体名结构体名数组名数组名元素个数元素个数=,;例例对对N个学生进行年龄从小到大的排序。个学生进行年龄从小到大的排序。#includestdio.h#defineN3#defineNAMESIZE20structstudentcharnameNAMESIZE;intage;charsex;structstudentstd10;main()inti,j;structstudentchange;printf(Pleaseinputstudentdatan);i=0;while(iN)printf(name:age:sex:);scanf(%s,stdi.name
17、);scanf(%d,&stdi.age);scanf(%c,&stdi.sex);i=i+1;for(i=0;iN-1;i+)for(j=i+1;jstdj.age)change=stdi;stdi=stdj;stdj=change;printf(Theresultaftersortingn);for(i=0;iN;i+)printf(Name:%stAge:%dtSex:%cn,stdi.name,stdi.age,stdi.sex);输入:输入:name:age:sex:aaa21mname:age:sex:bbb22fname:age:sex:ccc25m输出:输出:name:aaaa
18、ge:21sex:mname:bbbage:22sex:fname:cccage:25sex:m结构体结构体数组初始化。数组初始化。structsintnum;charcolor;chartype;main()structscar=101,G,c,210,Y,m,105,R,l,222,B,s,308,P,b;inti;printf(numbercolortypen);for(i=0;i-成员名成员名q结构体指针的使用结构体指针的使用21structstudentintnum;charname20;charsex;st=2001,LiMing,M,2002,Wangfang,F,2003,Zh
19、angRong,M;main()inti;structstudent*p;p=&st0;for(i=0;inum,(*p).name,sti.sex);使用结构体指针访问结构体的成员使用结构体指针访问结构体的成员:2001,LiMing,M2002,Wangfang,F2003,ZhangRong,M22q结构体的自使用与链表结构体的自使用与链表结构体的自使用:结构体的自使用:结构体的成员是指向其自身的结构体指针变量。结构体的成员是指向其自身的结构体指针变量。一般形式:一般形式:struct node int data;struct node*next;headNULL链表链表结点结点数据区数
20、据区指针区指针区链表头链表头23建立一条链,数据从键盘读取,链的首结点由建立一条链,数据从键盘读取,链的首结点由head返回。返回。structnode*creat()structnode*p,*head;inti;head=NULL;for(i=0;idata);p-next=NULL;if(head=NULL)head=p;elsep-next=head;head=p;return(head);#defineNULL0structnodeintdata;structnode*next;main()structnode*Head,*np;Head=creat();if(Head=NULL)p
21、rintf(Creatlinkerror!n);elsefor(np=Head;np!=NULL;np=np-next)printf(%dt,np-data);输入:输入:12345输出:输出:54321240.2.2 结构体指针与函数结构体指针与函数q结构体指针作函数的参数结构体指针作函数的参数structsinti;charc;st=125,A;main()printf(Theolddata:n);printf(ti=%dtc=%cn,st.i,st.c);sub(&st);printf(Thenewdata:n);printf(ti=%dtc=%cn,st.i,st.c);voidsub
22、(structs*sa)(*sa).i=2;(*sa).c=(*sa).c+1;输入:输入:Theolddata:i=125c=A输出:输出:Thenewdata:i=2c=B返回返回25q函数返回值为结构体指针函数返回值为结构体指针定义形式:定义形式:struct 结构体类型名结构体类型名*函数名(形式参数表)函数名(形式参数表)形式参数表说明形式参数表说明 函数体函数体 structsinti;charc;*sp;main()structs*sub();sp=sub();printf(Thedata:n);printf(i=%dtc=%cn,sp-i,(*sp).c);structs*su
23、b()structs*sv;sv=(structs*)malloc(sizeof(structs);sv-i=5;sv-c=B;return(sv);Thedata:i=5c=Bstructs*sub()structssv;sv.i=5;sv.c=B;return(&sv);warning C4172:returning address of local variable or temporarystructs*sub()structs*sv;sv=(structs*)malloc(sizeof(structs);sv-i=5;sv-c=B;free(sv);return(sv);260.3
24、用用typedef定义类型定义类型0.3.1 一般形式一般形式 typedef 类型名类型名 标识符;标识符;注:注:(1)typedef只定义类型名,不能定义变量名,是类型名只定义类型名,不能定义变量名,是类型名的别名。的别名。(2)与与#define相似,但有区别,新旧类型位置相反。相似,但有区别,新旧类型位置相反。typedefintINTEGER;27 0.3.2 用用typedef说明类型的步骤说明类型的步骤1)先定义变量的方法写出定义体。先定义变量的方法写出定义体。2)把变量名换成新类型名。把变量名换成新类型名。3)在最前面加上在最前面加上typedef。4)已定义完新类型名,可用
25、此新类型名已定义完新类型名,可用此新类型名 去去 定义变量定义变量。inti,j;typedefintINTEGER;INTEGERi,j;structtagDATEintmonth;intday;intyear;birthday;typedefstructtagDATEintMonth;intDay;intYear;Date,*PDate;DateBirthday;PDater;chars80;typedefcharSTRING80;STRINGs;28void swap(int x,int y)int temp;temp=x;x=y;y=temp;void main()int a=10,b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 3
限制150内