C++ 顺序表的基本操作(使用模版类)

本文介绍了在C++中使用模板类实现顺序表的基本操作,讨论了将函数定义放在SeqList.cpp中导致的问题,并提供了解决方案,即把函数声明和定义放在同一个头文件(Seqlist.h)中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、遇到问题:

       原因:类的函数定义不能放在SeqList.cpp中,必须放在Seqlist.h(类的函数声明和定义放在同一个文件下)中,否则

       会出现以下问题。

       

二、实现程序:

   1.SeqList.h

#ifndef SeqList_h
#define SeqList_h
#include <iostream>
using namespace std;

const int defaultSize = 100;

template<class T>
class SeqList{
public:
    SeqList(int sz = defaultSize); // 构造函数
    SeqList(SeqList<T>& L); // 复制构造函数
    ~SeqList(); // 析构函数
    int Size(); // 重载虚函数:计算表最大可容纳表项个数,限制权限,类外无法直接获取maxSize
    int Length(); // 计算表长度
    int Search(T x); // 搜索x在表中位置,函数返回表项序号
    int Locate(int i); // 定位第i个表项,函数返回表项序号
    bool getData(int i, T& x); // 取第i个表项的值
    void setData(int i, T x); // 用x修改第i个表项的值
    bool Insert(int i, T x); // 在第i个表项后插入元素x
    bool Remove(int i, T& x); // 删除第i个表项,通过x返回
    bool isEmpty(); // 判断表是否为空,空则返回true;否则,返回false
    bool isFull(); // 判断表满否,满则返回true;否则,返回false
    void Input(); // 输入数据建立表
    void Output(); // 打印表
    void Sort(); // 排序
    SeqList<T> operator=(SeqList<T>& L); // 表整体赋值
private:
    T *data; // 存放数组
    int maxSize; // 最大可容纳表项的项数
    int last; // 当前已存表项的最后位置(从0开始)
    void reSize(int newSize); // 改变数组空间大小
};

template <class T>
SeqList<T>::SeqList(int sz) {
    // 构造函数,通过指定参数sz定义数组的长度
    if(sz > 0) {
        maxSize = sz;
        last = -1; // 置表的实际长度为空
        data = new T[maxSize]; // 创建顺序表存储数组
        if(data == NULL) {
            cerr << "动态内存分配失败!" << endl;
            exit(1);
        }
    }
}

template <class T>
SeqList<T>::SeqList(SeqList<T>& L) {
    // 复制构造函数,用参数表中给出的已有顺序表初始化新建的顺序表
    // 如果没有定义复制构造函数,系统会自动建立一个复制构造函数
    maxSize = L.Size(); // 最大可容纳的个数
    last = L.Length() - 1; // 数组最后的位置
    T value;
    data = new T[maxSize]; // 创建顺序表存储数组
    if(data == NULL) {
        cerr << "动态内存分配失败!" << endl;
        exit(1);
    }
    for(int i = 1; i <= last+1; i++) {
        L.getData(i, value); // 取第i个位置的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值