线性表的顺序存储

使用顺序存储的方式来存储线性表,花了5 、6个小时写的代码(写是很快,但出现了低级的错误,浪费我很多时间),希望能帮到大家。

#include<iostream>
using namespace std;
const int Maxsize = 100;       //定义一数组长度为100,目的是用来存储顺序表
template <class Datatype>
class Seqlist {
public:
    Seqlist();
    Seqlist(Datatype a[], int n);
    int Length();
    Datatype Get(int i);
    int Locate(Datatype x);
    void Inset(int i, Datatype x);
    Datatype Delete(int i);
    int Empty();
    void Printlist();
    void Showpart();
private:
    Datatype data[Maxsize];
    int length;
};

//建立空顺序表
template <class Datatype>
Seqlist<Datatype>::Seqlist() {
    length = 0;
}

//创建一个长度为n的顺序表
template<class Datatype>
Seqlist<Datatype>::Seqlist(Datatype a[], int n) {
    if (n > Maxsize) throw "参数非法";
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        data[i] = a[i];
    }
    length = n;

}

//求顺序表的长度
template <class Datatype>
int Seqlist<Datatype>::Length() {
    cout << length << endl;
    return length;

}

//查找第i个元素的值
template <class Datatype>
Datatype Seqlist<Datatype>::Get(int i) {
    if (i < 1 && i > length) throw"查找位置非法";
    else {
        cout << data[i - 1] << endl;;
    }
}

//查找值为x在哪个位置
template <class Datatype>
int Seqlist<Datatype>::Locate(Datatype x) {
    for (int i = 0; i < length; i++) {
        if (data[i] == x) {
            cout << i + 1 << endl;
        }
    }
    return 0;

}

//在i位置插入值为x
template <class Datatype>
void Seqlist<Datatype>::Inset(int i, Datatype x) {
    if (length == Maxsize) throw"上溢";
    if (i < 1 || i > length + 1) throw"插入位置非法";
    for (int a = length; a >= i; a--) {
        data[a] = data[a - 1];
    }
    data[i - 1] = x;
    length++;
}

//删除第i个元素
template <class Datatype>
Datatype Seqlist<Datatype>::Delete(int i) {
    if (length == 0)throw "下溢";
    if (i < 1 || i > length) throw "删除位置非法";
    Datatype x = data[i - 1];
    for (int a = i; a < length; a++) {
        data[a - 1] = data[a];
    }
    length--;
    return x;
}

//判空操作
template <class Datatype>
int Seqlist<Datatype>::Empty() {
    if (length == 0)
    {
        cout << "为空" << endl;
            return 1;
    }
    else {
        cout << "不为空" << endl;
        return 0;
    }
    
}

//遍历操作
template <class Datatype>
void Seqlist<Datatype>::Printlist() {
    for (int i = 0; i < length; i++) {
        cout << data[i] << " ";
    }

}

//显示所有功能
template <class Datatype>
void Seqlist<Datatype>::Showpart() {
    cout << "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" << endl;
    cout << "$$$$   1、求顺序表的长度           $$$$$" << endl;
    cout << "$$$$   2、查找第i个元素的值        $$$$$" << endl;
    cout << "$$$$   3、查找值为x在哪个位置      $$$$$" << endl;
    cout << "$$$$   4、在i位置插入值为x         $$$$$" << endl;
    cout << "$$$$   5、删除第i个元素            $$$$$" << endl;
    cout << "$$$$   6、判空操作                 $$$$$" << endl;
    cout << "$$$$   7、遍历操作                 $$$$$" << endl;
    cout << "$$$$   8、退出功能                 $$$$$" << endl;
    cout << "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" << endl;
}
int main() {
    int a[4];
    Seqlist<int> list(a, 4);
    int num;
    list.Showpart();
    while (true) {

        cin >> num;
        switch (num) {
        case 1:
            list.Length();
            break;
        case 2:
            
            list.Get(2);
            break;
        case 3:
            
            list.Locate(4);
            break;
        case 4:
            
            list.Inset(2, 10);
            break;
        case 5:
            int i;
            cin >> i;
            list.Delete(i);
            break;
        case 6:
            list.Empty();
            break;
        case 7:
            list.Printlist();
            break;
        case 8:
            return 0;
        default:
            break;

        }
    }
    system("pause");

}

如果对大家有帮助,希望帅哥美女们给我点个关注点个赞,谢谢,如果有在哪里看不懂的也可以在评论区或者私信我都可以,我看到了,会第一时间为大家解答。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前行人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值