首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

顺序线性表的遍历有关问题?

2012-09-16 
顺序线性表的遍历问题??这是顺序线性表的类template class ElemTypeclass SqList{protected:// 顺序表实

顺序线性表的遍历问题??
这是顺序线性表的类 

template <class ElemType> 
class SqList 

protected: 
// 顺序表实现的数据成员: 
int count; // 元素个数 
int maxSize; // 顺序表最大元素个数 
ElemType *elems; // 元素存储空间 

// 辅助函数 
bool Full() const; // 判断线性表是否已满 
void Init(int size); // 初始化线性表 

public: 
// 抽象数据类型方法声明及重载编译系统默认方法声明: 
SqList(int size = DEFAULT_SIZE); // 构造函数 
virtual ~SqList(); // 析构函数 
int Length() const; // 求线性表长度 
bool Empty() const; // 判断线性表是否为空 
void Clear(); // 将线性表清空 
void Traverse(void (*Visit)(const ElemType &)) const; // 遍历线性表 
StatusCode GetElem(int position, ElemType &e) const; // 求指定位置的元素 
StatusCode SetElem(int position, const ElemType &e); // 设置指定位置的元素值 
StatusCode Delete(int position, ElemType &e);// 删除元素 
StatusCode Insert(int position, const ElemType &e); // 插入元素 
SqList(const SqList <ElemType> &copy); // 复制构造函数 
SqList <ElemType> &operator =(const SqList <ElemType> &copy); // 赋值语句重载 
}; 

这是遍历顺序表的实现: 
template <class ElemType> 
void SqList <ElemType>::Traverse(void (*visit)(const ElemType &)) const 
// 操作结果:依次对线性表的每个元素调用函数(*visit) 

for (int curPosition = 1; curPosition <= Length(); curPosition++) 
{ // 对线性表的每个元素调用函数(*visit) 
(*visit)(elems[curPosition - 1]); 



我对于这个遍历函数的参数看不明白 
void (*visit)(const ElemType &) 
希望大家帮忙解释一下,谢谢了

[解决办法]
有点复杂,下去研究研究[color=#FF0000][/color]

[解决办法]
const ElemType &

首先 ElemType 是宏定义的一个数据类型替换 像int,double ,char 之类的 也是你的数组的类型
其次 & 说明所引用的实参不是经过复制传入函数的,而是直接传入,这样可以节省时间,还能够直接对传入的数据进行修改。 
最后 const 关键字说明 传入的参数不能够被修改。
就这样。
[解决办法]
函数指针,使用者可以定义一个void (*)(const ElemType &)类型的函数作为参数传进去,灵活的按照自己需要的方式处理数据
[解决办法]
这个函数就是对表中的每个数据进行访问的意思
你可以把它定义成你自己的动作

许多教科书上的代码都是伪代码!
你把它COPY下来,不一定能通过编译

热点排行