模板与数据结构.ppt

上传人:p** 文档编号:160901 上传时间:2023-03-03 格式:PPT 页数:58 大小:1.05MB
下载 相关 举报
模板与数据结构.ppt_第1页
第1页 / 共58页
模板与数据结构.ppt_第2页
第2页 / 共58页
模板与数据结构.ppt_第3页
第3页 / 共58页
模板与数据结构.ppt_第4页
第4页 / 共58页
模板与数据结构.ppt_第5页
第5页 / 共58页
模板与数据结构.ppt_第6页
第6页 / 共58页
模板与数据结构.ppt_第7页
第7页 / 共58页
模板与数据结构.ppt_第8页
第8页 / 共58页
模板与数据结构.ppt_第9页
第9页 / 共58页
模板与数据结构.ppt_第10页
第10页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《模板与数据结构.ppt》由会员分享,可在线阅读,更多相关《模板与数据结构.ppt(58页珍藏版)》请在第壹文秘上搜索。

1、第第6章章 模板与数据结构模板与数据结构模板的引入:模板的引入:6.1 模板模板增强代码的通用性,使之不受数据类型的限制。增强代码的通用性,使之不受数据类型的限制。模板的实现:模板的实现:将数据类型作为参数。将数据类型作为参数。模板模板(template)(template)函数模板函数模板(function )(function )类模板类模板(class )(class ) 功能:创建一个通用功能的函数,支持多种功能:创建一个通用功能的函数,支持多种不同形参,简化重载函数的函数体设计。不同形参,简化重载函数的函数体设计。6.1.1 函数模板及其应用函数模板及其应用函数模板定义函数模板定义:

2、templatetemplate 返回类型返回类型 函数名函数名( (形式参数表形式参数表) ) ; 例例. .找出三个数中的最大数,通过函数模板来实现。找出三个数中的最大数,通过函数模板来实现。#include #include using namespace std;using namespace std;templatetemplate T / /模板声明,其中模板声明,其中T T为类型参数为类型参数T T max( max(T T a, a,T T b, b,T T c) c) / /定义一个通用函数,用定义一个通用函数,用T T作虚拟的类型名作虚拟的类型名 if if(ba) a=b

3、;(ba) a=b; if if(ca) a=c;(ca) a=c; returnreturn a; a; intint main( ) main( ) int int i1=185, i2=-76, i3=567, i; i1=185, i2=-76, i3=567, i; double double d1=56.8, d2=90.2, d3=-314.7, d; d1=56.8, d2=90.2, d3=-314.7, d; longlong g1=6785, g2=-91245, g3=6734, g; g1=6785, g2=-91245, g3=6734, g; / /调用模板函数,

4、此时调用模板函数,此时T T被被intint取代,也可缺省取代,也可缺省 i=max i=max(i1,i2,i3); (i1,i2,i3); / /调用模板函数,此时调用模板函数,此时T T被被doubledouble取代取代 d=maxd=max(d1,d2,d3); (d1,d2,d3); / /调用模板函数,此时调用模板函数,此时T T被被longlong取代取代 g=maxg=max(g1,g2,g3); (g1,g2,g3); cout“i_max=“iendl; cout“i_max=“iendl; cout“f_max=“dendl; cout“f_max=“dendl; co

5、ut“g_max=“gendl; cout“g_max=“gy)?x:y; (xy)?x:y; intint min( ) min( ) returnreturn (xy)?x:y; (xy)?x:y; privateprivate: : intint x,y; x,y; ;6.1.2 类模板与线性表类模板与线性表若要比较两个浮若要比较两个浮点数大小呢?点数大小呢?类模板定义:类模板定义:templatetemplate classclass 类模板名类模板名 . . / /类体类体; ;类模板名类模板名 对象名对象名1 1,对象名,对象名n; n; / /可带参可带参数数templatete

6、mplate 返回类型返回类型 类模板名类模板名 :成员函数名成员函数名 ( (形参表形参表) ) / /成员函数体成员函数体 在类模板外定义成员函数,应采用以下形式:在类模板外定义成员函数,应采用以下形式:使用模板建立对象:使用模板建立对象: 用类模板实现:用类模板实现:templatetemplate / /虚拟类型虚拟类型numtypenumtypeclassclass Compare Compare / /类模板名为类模板名为CompareCompare publicpublic: : Compare( Compare(numtypenumtype a, a,numtypenumtyp

7、e b) b) x=a; y=b; x=a; y=b; numtypenumtype max( ) max( ) returnreturn (xy) ? x : y; (xy) ? x : y; numtypenumtype min( ) min( ) returnreturn (xy) ? x : y; (xy) ? x : y; privateprivate: : numtype numtype x,y; x,y; ;#include#include / /类模板应用举例类模板应用举例#include#include usingusing namespacenamespace std; s

8、td;classclass Student Student / /定义结构体类型定义结构体类型StudentStudent public: public:intint id; id; / /学号学号floatfloat gpa; gpa; / /平均分平均分 Student(Student(intint i=0, i=0,floatfloat g=0):id(i), gpa(g) g=0):id(i), gpa(g) ; ;templateclasstemplate / /类模板,实现对任意类型数据进行存取类模板,实现对任意类型数据进行存取classclass Store Store T T

9、item; item; / /存放任意类型数据存放任意类型数据intint Valued; Valued; / /标记标记itemitem是否已被存入内容是否已被存入内容 publicpublic: : Store(); Store(); / /默认形式的构造函数默认形式的构造函数T T GetElem(); GetElem(); / /提取数据函数提取数据函数voidvoid PutElem( PutElem(T T x); x); / /存入数据函数存入数据函数; ;templatetemplate StoreStore:Store( ):Valued(0) :Store( ):Value

10、d(0) templatetemplate T T Store Store:GetElem():GetElem() if if(Valued=0)(Valued=0) coutNo item present!endl; coutNo item present!endl; exitexit(1); (1); / /使程序完全退出,返回操作系统使程序完全退出,返回操作系统 returnreturn item; item; / /返回返回itemitem中存放的数据中存放的数据 templatetemplate voidvoid Store:PutElem( Store:PutElem(T T x)

11、x) Valued+; Valued+; / /将此置为将此置为tureture,表示,表示itemitem中已存入数值中已存入数值 item=x; item=x; / /将将x x值存入值存入itemitem voidvoid main() main() Student g(1000,23); Student g(1000,23); / /声明声明StudentStudent类型结构体变量,赋以初值类型结构体变量,赋以初值 StoreStore S1,S2; S1,S2; / /声明两个声明两个StoreStore类对象类对象 StoreStore S3; S3;/ /声明声明StoreSt

12、ore类对象类对象S3S3 StoreStore D; D;/ /声明声明StoreStore类对象类对象D D S1.PutElem(3); S1.PutElem(3); / /向对象向对象S1S1中存入数据中存入数据( (初始化对象初始化对象S1)S1) S2.PutElem(-7); S2.PutElem(-7); / /向对象向对象S2S2中存入数据中存入数据( (初始化对象初始化对象S2)S2) coutcoutS1.GetElem() S2.GetElem()endl; S1.GetElem() S2.GetElem()endl; /S1/S1和和S2S2的数据成员的数据成员 S3

13、.PutElem(g); S3.PutElem(g); / /向对象向对象S3S3中存入数据中存入数据 coutS3.GetElem().idendl; coutS3.GetElem().idendl; / /输出对象输出对象S3S3的数据成员的数据成员 cout“Retrieving object Dn”;cout“Retrieving object Dn”; coutD.GetElem()endl; coutD.GetElem()endl; / /输出对象输出对象D D的数据成员的数据成员 / /由于由于D D未初始化,在执行函数未初始化,在执行函数D.GetElem()D.GetElem

14、()过程中导致程序终止过程中导致程序终止 return return 0;0; 线性表线性表静态数组:静态数组:由编译器编译时分配内存,数组的长由编译器编译时分配内存,数组的长度不可改变。度不可改变。防止的溢出:防止的溢出:一般采用一般采用“大开小用大开小用”的方法,且的方法,且应在添加新数据时判断表是否满。应在添加新数据时判断表是否满。1 13 33 34 410109 96 65 58 87 72 21 16 62 21 19 92 27 711118 85 51 112121 10 013131 12 23 34 4 i i图图a a下标下标1 13 33 34 410109 96 65

15、 58 87 72 21 12 21 19 97 711118 85 51 112121 10 01313图图b b下标下标图图6.1 6.1 从表中删除一个数据从表中删除一个数据直接前驱直接前驱直接后继直接后继图图6.2 6.2 向表中插入一个数据向表中插入一个数据141431313 34 410109 96 65 58 87 7242416162 218189 927277 711118 85 51 1121211110 013135 54 43 32 2i i图图a a下标下标1 1272731313 34 410109 96 65 58 87 7242416162 218189 97

16、711115 511111 18 812121414x x0 01313图图b b下标下标【例例6.36.3】顺序表类模板顺序表类模板templatetemplate sizeclassclass seqlist seqlist T slistsize; T slistsize; / /存放顺序表的数组存放顺序表的数组 intint Maxsize; Maxsize; / /最大可容纳项数最大可容纳项数 intint last; last; / /已存表项的最后位置已存表项的最后位置publicpublic: : seqlist() last=-1; Maxsize=size; seqlist() last=-1; Maxsize=size; / /初始化为空表初始化为空表 intint Length() Length() constconst return return last+1; last+1; / /计算表长度计算表长度 intint Find(T & x) Find(T & x)constconst; ; / / 寻找寻找x x在表中位置在表中位置(下标)(下标) bool

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > PPT模板素材

copyright@ 2008-2023 1wenmi网站版权所有

经营许可证编号:宁ICP备2022001189号-1

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!