赞
踩
以下内容仅作为课程学习的参考
实现线性表,演示线性表的基本操作结果。
基于顺序表实现线性表ADT
基于链表实现线性表ADT
线性表的物理实现有顺序表与链表两种,顺序表更简单易用,所以先进行线性表顺序表的实现。
思考过程:
数据对象:选择模板类函数template 实现数据对象的多用性。
数据关系:线性关系。
基本操作:实现较为常见的基本操作,如插入、删除、当前位置移动等基本操作。
实现模块:
① 输入模块:建立简单的交互界面,通过序号的输入实现操作(如下图)。
② 功能模块
③ 输出模块:根据对应的功能操作进行输出。
【1】采用虚类继承方法构造线性表,实现对应功能。
分析及解决:构造虚基类,通过虚类继承的方法构造顺序表,增加了程序的可拓展性。
【2】使用模板template 实现数据对象的多用性。出现报错报错(GCC): error: need ‘typename’ before ‘E::xxx’ because ‘E’ is a dependent scope
分析及解决:通过查询,得知了这样两个概念——
从属名称(dependent names): 模板(template)内出现的名称, 相依于某个模(template)参数, 如E t;
嵌套从属名称(nested dependent names):从属名称在class内呈嵌套装, 如E::const_iterator ci;
如果不特定指出typename, 嵌套从属名称, 有可能产生解析(parse)歧义.
所以,任何时候在模板(template)中指涉一个嵌套从属类型名称, 需要在前一个位置, 添加关键字typename;进行如下操作解决了问题:
【3】什么是demo程序?如何实现?
分析及解决:demo程序是用来测试线性表ADT的实现是否成功,所以决定通过使用简单的交互对实现的功能进行全面的测试,依次来检查线性表的实现是否存在错误。
链表的实现需要用到指针进行操作,对于指针的掌握及使用提出要求,虽然实现过程比较数组来说比较复杂,但却灵活。
思考过程:
数据对象:选择模板类函数template 实现数据对象的多用性。
数据关系:线性关系。
基本操作:实现较为常见的基本操作,如插入、删除、当前位置移动等基本操作。
实现模块:
① 输入模块:建立简单的交互界面,通过序号的输入实现操作(如下图)。
② 功能模块
③ 输出模块:根据对应的功能操作进行输出。
【1】在使用链表实现时,怎么分配新的内存?
分析及解决:查阅资料,可以知道new是C++中的操作符,当我们使用关键字new在堆上动态创建一个对象时,它做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。所以,使用new来进行分配内存操作。
【2】指针指向?前驱结点的next指针域?后继结点的prev指针域?
分析及解决:每个结点都存有一个数据和两个指针,指针分别指向前驱结点和后继结点,如图:
需要了解这一点之后,才能对指针的指向进行分析。指针的最后一个指向代表着该结点的next(prev)指针的指向,例如:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。