欢迎来到天天文库
浏览记录
ID:44674101
大小:73.70 KB
页数:8页
时间:2019-10-24
《链表容器库C++论文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、链表容器库摘要:容器库的设计以及实现,通过应用宏定义传递数据类型和void*指针指向数据域來实现容器库的任意类型的兼容从而达到容器库的需要,对两种方式的实现形式进行举例说明;两种方法各冇优劣,对两种方式做了分析、对比说明;最终选择void*指针指向数据域来实现整个容器的创建、插入、删除、清空等必要功能和一些更细小的功能;每种容器都有其缺点,由于void*指针抹去原有数据类型,故该容器无法检测添加到同一个容器里的数据是否是同一个类型,所以在使用时需要注意添加同一种类型的数据,以免出现程序崩溃。木文
2、参照现有的容器库,利用基础编程语言编写实现线性表容器库,并验证其结果。关键字:关键词:容器库;宏定义;void*指针;任意类型兼容引言:线性表是最基本、最简单、也是最常用的一种数据结构。其屮的数据元素Z间的关系是一对一的关系,其大多数关系是:除第一个和最后一个数据元素Z外,其它数据元索都是首尾相接的。它具冇均匀性和有序性的结构特点。均匀性描述的是:虽然不同数据表的数据元素可以是各种各样的,但对于同-•线性表的各数据元素必定具有相同的数据类型和长度。对于有序性来说,各数据元素在线性表屮的位置只取决
3、于它们的序号,数据元素Z前的相对位置是线性的,即存在唯一的“第一个“和“最后一个”的数据元素,除了第一个和最后一个外,其它元素前面均只冇一个数据元索(直接前驱)和后面均只冇一个数据元索(直接后继)。在程序设计的过程中,不同的数据类型有不同的使用方法。当应用一个double型数据存储一个数据,而当我们要就将该数据赋值给一个int型时,数据会出现丢失,因此,对于不同的数据类型需耍采用不同的处理方式,线性也是这样。但是应该怎么來实现这个功能呢?这里采用以下两种方法:宏方法:采用宏方法,定义相关函数的使
4、用方法。并将函数的参数设置为void类型。在使用该函数时,只须使用强制类型转换为需要的数据类型,就能够正常使用。如在线性容器库屮的表示:#defineLIST_POISON1((void*)x)void*方法:除去上面的宏方法,另外一种方法就是(void*)方法。在运用这种方法时,其设计的方式与“宏方法”大致相同,我们在不知道需要知道希果的数据的类型,只需要将方法实现即可。如:taticinlinevoidhlist_del(structhlist_node*n){—hlist_del(n);n
5、->next=LIST_POISON1;n->pprev=LIST_POISON2;以上就是常常需要用到的方法,在了解这两种方法后,编写程序时的数据类型的问题就可以解决了。2常见容器类库提供的方法一览表方法名称功能Creat()创建容器Insert()想容器屮插入数据Remove()删除容器屮的数据Length()查询容器中的数据个数Clear()清空容器Front()传冋容器的第一个数据3现有方法存在的问题和改进建议觉得没有问题就不耍乱写4一个新的容器库实现实现的容器接口为了能更好的使用容器当
6、然得给容器定义许多接口,以方便使用。接口描述接口描述Insert()在给定位置之后插入新元索Next()取后继元素Erase()删除给定位置之后的元索Free()释放节点4.4容器使用演示代码:#include#include"list.h"//#includevoidprint_nod(void*data){Iman*x=(Iman*)data;if(x->name&&x->age&&x->xingbie){printf(n姓名:n);printStr(x
7、->name);printf("年龄:%d",*(x->age));printf(n性别:”);printStr(x->xingbie);}printfCAn11);}〃释放节点数据的函数voidfree_nod(void*data){Iman=(Iman*)data;free(m->name);free(m->age);free(m->xingbie);}〃节点比较函数intcompare_nod(void*iterl,void*iter2){Iman*xl=(Iman*)iterl;Iman
8、*x2=(Iman*)iter2;return*(xl->age)・*(x2->age);}〃节点匹配是否完全相同数据类型intcompare_nod12(void*iterl,void*iter2){Iman*xl=(Iman*)iterl;Iman*x2=(Iman*)iter2;if(xl->name==x2・>name&&x1->age==x2->age&&x1->xingbie==x2->xingbie)return1;}〃链接字符串函数char*lstrcat(char*sl,cha
此文档下载收益归作者所有