C++顺序表class?

问题描述:
在学习C++模板部分的知识,程序里面用last来表示已保存表项的最后位置,且在初始化时令last=-1,表示初始化为一个空表(我的理解是只有一个元素,表中最后位置就是0,所以-1就表示一个空表,应该是这样吧)我的问题是,书中在成员函数定义时并无对last进行新的赋值操作,而程序给我的感觉就是last已经表示此时表项的最后位置了,然而last在初始化明明已经被赋值为-1了,这样成员函数还能实现其功能吗?不知道是我哪里理解错了,麻烦大神指点~!
下面是程序代码:

#include<iostream>
using namespace std;
template<typename T,int size>class seqlist{
    Tslist[size]; //存放顺序表的数组,注意是T slist[size],在这里T后有空格就变成了‘1.’,估计是网页bug。。
    int Maxsize; //最大可容纳项数
    int last;  //已存表项的最后位置
public:
    seqlist(){last=-1;Maxsize=size;}  //构造函数,初始化为空表
    //下面都是一些成员函数声明或定义
    int Length()const{return last+1;} //计算表长度
    int Find(T&x)const; //寻找x在表中的位置(下标)
    bool IsIn(T&x); //...
    ... ...
};
//下面是前面声明的成员函数的定义
template<typename T,int size>int seqlist<T,size>::Find(T & x)const{
    int i=0;
    while(i<=last && slist[i]!=x)i++;  //顺序查找是否有x
    if(i>last) return -1; //未找到,返回-1
    else return i;    //找到,返回位置
}  

以这个成员函数的定义为例,last表示的就是表项的最后位置,但程序中并没有对last进行新的赋值操作,如 last=size-1; 这样last还是初始化时的值-1,不是吗?不解,求大神解答~
下面是书中该例全部代码:
图片描述

图片描述
图片描述
图片描述

阅读 1.9k
1 个回答

注意在insert()中, last是有++操作的, 所以你在用这个顺序表插入的时候last会自己更新.

且在初始化时令last=-1,表示初始化为一个空表(我的理解是只有一个元素,表中最后位置就是0,所以-1就表示一个空表,应该是这样吧)

last = -1只是说明里面没有元素. 这是在构造函数里完成的.

至于你在find()里提到的疑惑, 是因为你肯定先要insert(), 再find(), 这时last已经不是-1了, 因为合法的insert()过了.

PS: 不过这本书的码风很糟糕, 窝觉得或许你该找好一点的材料学习(不过讲道理, 数据结构/算法的书基本码风都一塌糊涂...至少国外的书是这样(除了clrs这样用伪码的), 国内不清楚.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题