//注意,Get和Delete等方法
// 要从1开始,否则报错
#pragma once
#include <iostream> //引用输入输出流库函数的头文件
using namespace std;
const int MaxSize = 100; //100只是示例性的数据,可以根据实际问题具体定义
template <class DataType> //定义模板类SeqList
class SeqList
{
friend ostream& operator<<<DataType>(ostream& os,SeqList<DataType>& mySeqList);
public:
SeqList() {length = 0;} //无参构造函数,建立一个空的顺序表
SeqList(DataType a[], int n); //有参构造函数,建立一个长度为n的顺序表
~SeqList();
int Length() {return length;} //求线性表的长度
DataType Get(int i); //按位查找,在线性表中查找第i个元素
int Locate(DataType x ); //按值查找,在线性表中查找值为x的元素序号
void Insert(int i, DataType x); //插入操作,在线性表中第i个位置前插入值为x的元素
DataType Delete(int i); //删除操作,删除线性表的第i个元素
private:
DataType data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
template<class DataType>
ostream& operator<<(ostream& os,SeqList<DataType>& mySeqList)
{
for(int i=0;i<mySeqList.length;i++)
os<<mySeqList.data[i]<<" ";
os<<endl;
return os;
}
template <class DataType>
SeqList<DataType>::SeqList(DataType a[], int n)
{
if (n > MaxSize) throw "参数非法";
for (int i = 0; i < n; i++)
data[i] = a[i];
length = n;
}
template <class DataType>
DataType SeqList<DataType> :: Get(int i)
{
if (i < 1 && i > length) throw "查找位置非法";
else return data[i - 1];
}
template <class DataType>
int SeqList<DataType> :: Locate(DataType x)
{
for (int i = 0; i < length; i++)
if (data[i] == x) return i+1; //下标为i的元素等于x,返回其序号i+1
return 0; //退出循环,说明查找失败
}
template<class DataType>
void SeqList<DataType>::Insert(int i, DataType x)
{
if (length >= MaxSize) throw "上溢";
if (i < 1 || i > length + 1) throw "位置";
for(int j=length; j>=i; j--)
data[j] = data[j-1]; //注意第j个元素存在数组下标为j-1处
data[i - 1] = x;
length++;
}
template <class DataType>
DataType SeqList<DataType> :: Delete(int i)
{
if (length == 0) throw "下溢";
if (i < 1 || i > length) throw "位置";
DataType x = data[i - 1]; //取出位置i的元素
for (int j = i; j < length; j++)
data[j - 1] = data[j]; //注意此处j已经是元素所在的数组下标
length--;
return x;
}
template<class DataType>
SeqList<DataType>::~SeqList()
{
}
顺序表 C++
最新推荐文章于 2024-05-14 22:04:37 发布