#ifndef SEQLIST_H
#define SEQLIST_H
#include<iostream>
using namespace std;
const int Maxsize = 100;
template<typename T>
class SeqList
{
public:
SeqList();//构造空链表
SeqList(T a[], int n); //构造长度为n的链表
~SeqList();
int Length(){ return length; };//求线性表的长度
T Get(int i);//按位查找
int Locate(T x);
void Insert(int i, T x);//插入操作中,在第i个元素插入x
T Delete(int i);//删除第i个元素
void PrintList();//输出线性表
private:
T data[Maxsize];
int length;
};
template<typename T>
SeqList<T>::SeqList()//构造空链表
{
length = 0;
}
template<typename T>
SeqList<T>::SeqList(T a[], int n) //构造长度为n的链表
{
int i;
if (n > Maxsize)throw"参数非法";
for (i = 0; i < n; i++)
data[i] = a[i];
length = n;
}
template<typename T>
SeqList<T>::~SeqList()
{
//delete[]data;
}
template<typename T>
T SeqList<T>::Get(int i)//按位查找
{
if (i<1 && i>length)throw"查找位置非法";
else
return data[i - 1];
}
template<typename T>
int SeqList<T>::Locate(T x)
{
int i;
for (i = 0; i < length;i++)
if (data[i] == x)return i + 1;
return 0;
}
template<typename T>
void SeqList<T>::Insert(int i, T x)//插入操作中,在第i个元素插入x
{
int j;
if (length >= Maxsize)throw"上溢";
if (i<1 || i>length + 1)throw"位置";
for (j = length; j >= i; j--)
data[j] = data[j - 1];
data[i - 1] = x;
length++;
}
template<typename T>
T SeqList<T>::Delete(int i)//删除第i个元素
{
int j;
if (length == 0)throw"下溢";
if (i<1 || i>length)throw"位置";
T x = data[i-1];
for (j = i; j < length; j++)
data[j - 1] = data[j];
length--;
return x;
}
template<typename T>
void SeqList<T>::PrintList()//输出线性表
{
int i;
for (i = 0; i < length; i++)
cout <<" "<<data[i];
cout << endl;
}
#endif
****************************************************************************************************************
#include"SeqList.h"
#include<iostream>
using namespace std;
void main()
{
int a[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 };
int m, n;
SeqList<int> zxh(a,10);
cout << "构造的函数数组:";
zxh.PrintList();
cout << "请输入您要插入的数字及其位置:";
cin >> m >> n;
zxh.Insert(n,m);
cout << "更改后函数数组:";
zxh.PrintList();
cout << "请输入您想删除的元素的位置:";
cin >> m;
zxh.Delete(m);
cout << "更改后函数数组:";
zxh.PrintList();
cout << "请输入您想查找的元素的位置:";
cin >> m;
cout << "您查询的元素:";
cout << zxh.Get(m) << endl;;
cout << "请输入您要查询的元素:";
cin >> m;
cout << "您要查询的元素的位置:";
cout << zxh.Locate(m) << endl;;
}
上面代码是线性表的主要能实现的功能,这个代码是学数据结构的基础代码。他主要调动了学者对线性表的认识,在刚开是编写的时候,我没有那个数组的构造函数,只有一个初始化的构造函数。在调用插入函数的时候我就一直没有办法实现元素的插入,因为在初始话的时候length变成了0,这就无法在线性表中进行插入。因为我是学完整张才回来便携的。我以为他和栈中的出栈入栈是一个原理。结果显示是我想错了。在线性表中length=0是初始化但是我们还是要在给他开辟一个长度供他实现基本操作的。最后一个问题就是在析构函数中我也是犯了同样的错误,在线性表中的析构函数是不需要任何东西的。