前言:无论是哪一种数据结构,最核心的部分是增删改查
增:插入操作
思路:
1.判断插入位置是否在表内?表是否满了?是否为空表?(违规操作)
2.从后开始,每个元素依次往后移动一位,腾出位置
3.将目标元素插入空出的位置
bool ListInsert(SqList& L, int i, ElemType e)
{
if (i<1 || i>L.length + 1)//顺序表之外
return false;
if (L.length== 0)//如果是空表
return false;
if (L.length >= MaxSize)//如果表满了
return false;
for (int j = L.length; j >= i; j--)
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length++;
return true;
}
删:删除操作
思路:
1.判断表是否满了?是否为空表?(违规操作)
2.删除某一元素后,后面的元素依次前移,填补空缺
bool ListDelete(SqList& L, int i, ElemType& e)
{
if (i<1 || i>L.length + 1)
return false;
if (L.length == 0)
return false;
e = L.data[i - 1];
for (int j = i; j< L.length; j++)
{
L.data[j - 1] = L.data[j];
}
return true;
}
查:按值查找
思路:
从第一个元素开始遍历(寻找),直到找到与目标值相等的元素
int LocateElem(SqList L, ElemType e)
{
for (int i = 1; i < L.length; i++)
{
if (L.data[i] == e)
return i + 1;
}
}
注:线性表中改的操作就是查找到元素之后,多加一个修改元素值操作
打印输出:
void PrintList(SqList& L)
{
for(int i=0;i<L.length;i++)
printf("%3d", L.data[i]);
printf("\n");
}
注意:在函数内加&符号,表示要修改原先线性表L内的元素。同理,&e表示要修改原本元素e的值。