#include <stdio.h>
#define MaxSize 10 // 定义最大长度
/**
* 静态顺序表的基本操作
*/
typedef struct
{
int data[MaxSize]; // 用静态的 “数组” 存放数据元素
int length;
} SeqList;
// 初始化顺序表
void InitList(SeqList &L)
{
for (int i = 0; i < MaxSize; i++)
L.data[i] = 0; // 将所有的元素设置为默认初始值
L.length = 0; // 顺序表初始长度为 0
}
// // 数据插入 在位序i的位置插入数据(数组索引 i-1的位置)
// void ListInsert(SeqList &L, int i, int e)
// {
// // 判断 i 的合法值 1<i<length
// for (int j = 0; j < L.length; j--)
// {
// L.data[j] = L.data[j - 1]; // 将第i个元素及之后的元素后移
// }
// L.data[i - 1] = e; // 在i的位置插入 e
// L.length++; // 长度加 1
// }
bool ListInsert(SeqList &L, int i, int e)
{
if (i < 1 || i > L.length + 1)
{
return false;
}
if (L.length >= MaxSize) // 存储空间满了
{
return false;
}
for (int j = L.length; j >= i; j--)
{
L.data[j] = L.data[j - 1]; // 将第i个元素及之后的元素后移
}
L.data[i - 1] = e; // 在i的位置插入 e
L.length++; // 长度加 1
return true;
}
/// @brief
/// @param L 要删除的数据表
/// @param i 删除的索引
/// @param e 返回删除的那个数据元素
/// @return
bool ListDelete(SeqList &L, int i, int &e)
{
if (i < 1 || i > L.length)
{
return false;
}
e = L.data[i - 1];
for (int j = i; j < L.length; j++)
{
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
// 查找 (此处 i为位序)
int GetElem(SeqList L, int i)
{
return L.data[i - 1];
}
// 查找第一个元素值等于e的元素,并返回其位序
int LocateElem(SeqList L, int e)
{
for (int i = 0; i < L.length; i++)
{
if (L.data[i] == e)
{
return i + 1;
}
return 0;
}
}
int main()
{
SeqList L; // 声明一个顺序表
InitList(L); // 初始化顺序表
printf("%d\n", ListInsert(L, 1, 2));
ListInsert(L, 2, 4);
ListInsert(L, 3, 6);
ListInsert(L, 4, 8);
ListInsert(L, 5, 10);
ListInsert(L, 6, 11);
ListInsert(L, 7, 12);
ListInsert(L, 8, 13);
ListInsert(L, 9, 14);
for (int i = 0; i < MaxSize; i++)
{
printf("data[%d]=%d\n", i, L.data[i]);
}
int e = -1;
if (ListDelete(L, 3, e))
printf("已经删除第三个元素,删除元素值为= %d\n", e);
else
printf("位序 i不合法,删除失败 %d\n", e);
printf("\n\n删除后表中保存的值:\n");
for (int i = 0; i < L.length; i++)
{
printf("data[%d]=%d\n", i, L.data[i]);
}
LocateElem(L, 11); // 在表 L中,查找值为11的位序
return 0;
}