使用顺序存储的方式来存储线性表,花了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");
}
如果对大家有帮助,希望帅哥美女们给我点个关注点个赞,谢谢,如果有在哪里看不懂的也可以在评论区或者私信我都可以,我看到了,会第一时间为大家解答。