线性表( Linear List )的定义
线性表是零个或多个具有相同类型的数据元素的有限序列。 数据元素的个数定义为线性表的 长度 。长度等于零时称为空表,一个非空表通常记为 L = ( a 1 , a 2 ,……, a n ) 其中, a i ( 1 ≤ i ≤ n )称为数据元素, 下标 i 表示该元素在线性表中的位置或序号, 称元素 a i 位于表的第 i 个位置,或称 a i 是表中的第 i 个元素。
1.顺序表
特点:
线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,
作用:
线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
顺序存储的实现:一维数组存储顺序表中的数据
设顺序表的每个元素占用 c 个存储单元,则第 i 个元素的存储地址为:
LOC ( a i ) = LOC ( a 1 ) + ( i - 1 ) × c
实现:
#include<iostream>
using namespace std;
const int MaxSize = 100;
template <typename T>
class SeqList
{
private:
T data[MaxSize]; //存放元素
int length; //线性表长度
public:
SeqList();
SeqList(T a[], int n);
~SeqList();
int Length();
T Get(int i);
int Locate(T x);
void insert(int i, T x);
T Delete(int i);
void Display();
};
template<typename T>
SeqList<T>::SeqList()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> data[i];
}
length = n;
}
template<typename T>
SeqList<T>::SeqList(T a[], int n)
{
if (n < MaxSize)
{
throw "参数非法";
}
else
{
for (int i = 0; i < n; i++)
{
data[i] = a[i];
length = n;
}
}
}
template<typename T>
SeqList<T>::~SeqList()
{
}
template<typename T>
int SeqList<T>::Length()
{
return length;
}
template<typename T>
T SeqList<T>::Get(int i)
{
if (i<1 && i>length)
{
throw "查找位置非法