目录
1.王道代码题:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值,空出的位置由最后一个元素填补,若顺序表为空,则显示出错误信息并退出运行。
2.王道代码题:设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)
其他-王道数据结构算法题-顺序表题 , 如下
顺序表-删除所有值为x的数据元素+删除值在给定值s与t之间所有元素
1.王道代码题:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值,空出的位置由最后一个元素填补,若顺序表为空,则显示出错误信息并退出运行。
代码实现:
/*
从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。
空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行
*/
#include<iostream>
using namespace std;
#define Max 50
struct SqList{
int a[Max];
int length;
};
bool listdelete(SqList &s,int &ele)
{
if(s.length==0)
return false;
int minn=s.a[0];
int flag=0;
for(int i=1;i<s.length;i++)
{
if(s.a[i]<minn)
{
minn=s.a[i];flag=i;
}
}
ele=s.a[flag];
s.a[flag]=s.a[s.length-1];
return true;
}
int main()
{
SqList s={{2,3,4,6,7,1,8,9},8};
cout<<"原先数组为:"<<endl;
for(int i=0;i<s.length;i++) cout<<s.a[i]<<" ";
cout<<endl;
int k=0;
if(listdelete(s,k))
{
cout<<"最小元素k="<<k<<endl;
cout<<"修改之后的线性表为:"<<endl;
for(int i=0;i<s.length;i++)
{
cout<<s.a[i]<<" ";
}
cout<<endl;
}
else{
cout<<"错误"<<endl;
}
return 0;
}
若顺序表为空,显示错误信息:
2.王道代码题:设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)
代码实现:
//逆置线性表
#include<iostream>
using namespace std;
#define Max 50
struct SqList{
int a[Max];
int length;
};
void reverse(SqList &L)
{
for(int i=0;i<L.length/2;i++)
{
int v=L.a[i];
L.a[i]=L.a[L.length-i-1];
L.a[L.length-i-1]=v;
}
}
int main()
{
SqList L={{1,4,6,3,2,8,7},7};
int i;
for(i=0;i<L.length;i++) cout<<L.a[i]<<" ";
cout<<endl;
reverse(L);
for(i=0;i<L.length;i++) cout<<L.a[i]<<" ";
cout<<endl;
return 0;
}