C++ 线性表模板的使用

SeqList.h

#pragma once
#include <iostream>

const int MAXSIZE = 100;
template <class T>
class SeqList
{
public:
    // 无参数的构造函数
    SeqList();
    //有参数的构造函数,使用含有n个元素的数组,并且长度为n
    SeqList(const T a[], int n);        
    ~SeqList();

    // 按次序遍历顺序表的各个元素
    void PrintList();

    // 在第i 位置插入x
    void Insert(int i, T x);

    //删除顺序表中的第i个元素
    T Delete(int i);

    //获取顺序表上的第i个元素
    T Get(int i);

    //查找顺序表上值为x的元素
    int Locate(T x);

private:
    int length;
    T data[MAXSIZE];
};

#include <iostream>

template <class T>
SeqList<T>::SeqList(const T a[], int n){
    if (n > MAXSIZE)
        throw "数组长度超过顺序表最大长度";
    for (int i = 0; i < n; i++){
        data[i] = a[i];
    }
    length = n;

}

template <class T>
int SeqList<T>::Locate(T x)
{
    for (int i = 0; i < length; i++){
        if (x == data[i])
            return i + 1;
    }
    return -1;
}

template <class T>
T SeqList<T>::Get(int i)
{
    if (i<0 || i>length)
        throw "查找位置非法";
    return data[i - 1];
}

template <class T>
T SeqList<T>::Delete(int i)
{
    if (0 == length)
        throw "下溢异常";
    if (i<1 || i>length)
        throw "位置异常";
    T x = data[i-1];
    for (int j = i; j < length; j++){
        data[j - 1] = data[j];
    }
    length--;
    return x;

}

template <class T>
void SeqList<T>::Insert(int i, T x)
{
    if (length >= MAXSIZE)
        throw "上溢异常";
    if (i<1 || i>length + 1)
        throw "位置异常";
    i = i - 1;
    for (int j = length; j >= i; j--)
    {
        data[j] = data[j - 1];
    }
    data[i] = x;
    length++;

}

template <class T>
void SeqList<T>::PrintList()
{
    std::cout << "按序号依次遍历线性表中的各个元素" << std::endl;
    for (int i = 0; i < length; i++){
        std::cout << data[i] << " ";
    }
    std::cout << std::endl;
}

template <class T>
SeqList<T>::~SeqList()
{

}

template <class T>
SeqList<T>::SeqList()
{

}

main.cpp

#include "SeqList.h"
#include <stdlib.h>

int main(){

    int a[7] = { 1, 2, 3, 4, 5, 6, 7 };
    SeqList<int> list(a, 7);
    list.PrintList();

    list.Insert(1, 0);
    list.PrintList();

    int x = list.Delete(8);
    std::cout << "删除的元素:" << x << std::endl;
    list.PrintList();

    int p = list.Locate(4);
    std::cout << "元素4的位置:" << p << std::endl;

    system("pause");
    return 0;
}

运行结果
这里写图片描述

原文地址:https://www.cnblogs.com/laohaozi/p/8266527.html