算法列表 |
算法1:从顺序表中删除最小值元素 并用最后一个元素替换 函数返回最小值 |
算法2:设计一个高效算法,将顺序表L的所有元素逆序 要求: 空间复杂度为O(1) |
算法3: 编写一个算法删除顺序表中所有值为x的元素 要求: 时间复杂度O(n) 空间复杂度:O(1) |
算法4:删除顺序表中在给定值S到T之间的所有值(S<T) 要求: 如果表为空 或S>=T返回错误信息 |
考研复习 第一课:顺序表王道算法代码(2.2.3节续) |
/*
算法1:从顺序表中删除最小值元素 并用最后一个元素替换 函数返回最小值
*/
ElemType delMinValOfList(SqList &L)
{
if (L.length <= 0)
return false;
ElemType delVal = L.val[0];
int post = 0;
for (int i = 0; i < L.length; i++)
{
if (L.val[i] < delVal)
{
delVal = L.val[i];
post = i;
}
}
L.val[post] = L.val[L.length - 1];
L.length--;
return delVal;
}
/*
算法2:设计一个高效算法,将顺序表L的所有元素逆序
要求: 空间复杂度为O(1)
*/
bool reverseList(SqList &L)
{
if (L.length == 0)
return false;
for (int i = 0; i < L.length / 2; i++)
{
int tmp = L.val[i];
L.val[i] = L.val[L.length - 1 - i];
L.val[L.length - 1 - i] = tmp;
}
return true;
}
/*
算法3: 编写一个算法删除顺序表中所有值为x的元素
要求: 时间复杂度O(n) 空间复杂度:O(1)
*/
bool delAllNumOfList(SqList &L, ElemType e)
{
int p = 0; //设置一个哨兵
int count = 0;
if (L.length <= 0)
return false;
for (int i = 0; i < L.length; i++)
{
if (L.val[i] != e)
{
if (count > 0)
{
L.val[p++] = L.val[i];
}
else
p ++;
}
else
{
count++;
}
}
L.length -= count;
return true;
}
/*
算法4:删除顺序表中在给定值S到T之间的所有值(S<T)
要求: 如果表为空 或S>=T返回错误信息
*/
bool delNumRangeInlist(SqList &L, ElemType s, ElemType t)
{
if (L.length == 0 || s >= t)
return false;
int p = 0; //设置一个哨兵
int count = 0;
for (int i = 0; i < L.length; i++)
{
if (L.val[i]>s && L.val[i]<t)
{
count++;
}
else
{
if (count > 0)
{
L.val[p++] = L.val[i];
}
else
p++;
}
}
L.length -= count;
return true;
}