线性表的定义
线性表是n个数据元素的有限序列。
线性表的顺序存储结构
静态分配
#define MAXSIZE 100 // 最大容量
typedef struct{
ElemType data[MAXSIZE]; // 数组元素
int length; // 当前长度
}SqList;
动态分配
#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
#define LISTINCREMENT 10 // 线性表存储空间的分配增量
typedef struct {
ElemType* elem; // 存储空间基址
int length; // 当前长度
int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;
基本操作(静态分配)
初始化顺序表
void InitSqList(SqList &L) // 初始化顺序表
{
for (int i = 0; i < MAXSIZE; i++)
{
L.data[i] = 0;
}
L.length = 0;
}
插入元素
bool SqListInsert(SqList &L, int i, int e) // 插入操作:在L中第i个位置之前插入值为e的数据元素
{
if (i < 1 || i > L.length + 1) // 判断插入位置i是否合理
{
return false;
}
if (L.length >= MAXSIZE) // 顺序表数据已存满
{
return false;
}
for (int j = L.length; j >= i; j--) // 将第i个位置后的元素后移
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e; // 在L中第i个位置之前插入值为e的数据元素
L.length++; // 长度+1
return true;
}
删除元素
bool SqListDelete(SqList &L, int i, int &e) // 删除操作:删除L中第i个元素并返回该元素的值
{
if (i < 1 || i > L.length) // 判断删除位置i是否合理
{
return false;
}
e = L.data[i - 1];
for (int j = i; j < L.length; j++) // 将第i个位置后的元素前移
{
L.data[j - 1] = L.data[j];
}
L.length--; // 长度-1
return true;
}
遍历顺序表元素
void PrintSqList(SqList L) // 遍历顺序表中元素的值
{
for (int i = 0; i < L.length; i++)
{
cout << L.data[i] << " ";
}
cout << endl;
}
判断顺序表是否为空
bool SqListEmpty(SqList L) // 判断顺序表是否为空
{
if (L.length == 0)
{
return true;
}
return false;
}
查询顺序表长度
int SqListLLength(SqList L) // 查询顺序表长度
{
return L.length;
}