0
点赞
收藏
分享

微信扫一扫

顺序表基本操作(查找,插入和删除)

#define MaxSize 50
struct SqList
{
int data[MaxSize] = { 1,2,3,4,4 };
int length = 5;
};
//查找
int ListLocate(SqList L, int e)
{
for (int i = 0; i < L.length; i++)
{
if (L.data[i]==e)
{
return i + 1;//返回e的位置
}
}
return 0;//查找失败
}
//查找元素在表头,时间复杂度为O(1)
// 查找元素在表尾部或不存在,时间复杂度为O(1)

//插入新元素
bool ListInsert(SqList& L, int i, int e)
{
if (i<1 || i>L.length + 1 || L.length >= MaxSize)
{
return false;//判断I的范围是否有效或当前空间是否已满
}
for (int j = L.length - 1; j >= i - 1; j--)//从最后一个元素开始移直到第i个元素,下标从0开始所以-1
{
L.data[j + 1] = L.data[j];//后移腾出e的位置
}
L.data[i - 1] = e;//存放e,下标从0开始所以-1
L.length++;//顺序表长度+1
return true;
}
//在表头插入(i=1),元素后移语句将执行n次,时间复杂度为O(n)
//在表尾插入(i=n+1),元素后移语句将不执行,时间复杂度为O(1)

//删除元素
bool ListDelete(SqList& L, int i, int& e)
{
if (i<1 || i>L.length)
{
return false;//判断I的范围是否有效
}
e = L.data[i - 1];//删除的元素赋值给e
for (int j = i; j < L.length; j++)//从下一个元素开始前移直到最后一个
{
L.data[j - 1] = L.data[j];
}
L.length--;//顺序表长度-1
return true;
}
//删除表尾元素,无须移动元素,时间复杂度为O(1)
//删除表头元素,须移动表头外元素,时间复杂度为O(n)

举报

相关推荐

0 条评论