1.从顺序表中删除具有最小元素(假设唯一)并由函数返回被删除函数的值,空出的位置由最后一个元素填补,如果顺序表为空显示出错信息并退出运行。
思想:遍历顺序表,找到最小值的位置,将末尾元素保存到此次,删除末尾元素
bool Del_Min(sqList &L,ElemType &value){
if(L.length==0)//如果表为空,直接返回
return false;
value=L.data[0];//value用来记录最小值
int flag=0;//flag用来记录数据的位置
for(int i=0;i
2.设计一个高效算法,将顺序表中的所有元素逆置,要求算法的空间复杂度为O(1)
思想:扫描半个表将前半部分和后半部分进行交换
void Reverse(sqLit &L){
ElemType temp;//辅助变量
for(int i=0;i
3.长度为N的顺序表L,编写时间复杂度为O(n),空间复杂度为O(1),该算法删除链表中所有值为X的元素。
思想:用k记录值不为x的元素个数,一边扫描表,一边记录k值,将值不为x的元素向前放置在k的位置上。无重复是,k++,i++,有重复时只有i++.
void del_x(sqList &L,ElemType x){
int k=0;//记录值不等于x值元素的个数
for(int i=0;i
4.从顺序表中删除其值在定值为s与t之间(要求s 思想:找出值大于s和值大于t的第一个元素flag1,flag2.将后面的元素前移flag2-flag1个位置。 5.从无序链表中删除s到t之间的数 思想:将小于s和大于t的元素,筛选出来添加进新的表 6.从有序表中删除,所有值重复的元素,使得无重复值 7.将两个有序顺序表合为一个合并成一个有序表,返回合并后的表 8.已知一个一位数组中A[M+N],依次存放着两个线性表(a1,a2,,,am),(b1,b2,,,bn).编写一个函数将数组中的两个顺序表位置互换 思想:将(a1,a1...am,b1,b2,,,bn)逆置换——》(bn...b2,b1,am,,,,a2,a1)——》前n个逆置换,后m个逆置换 9,线性表(a1,a2,,,an)中的元素递增有序地存在计算机内,要求设计一个算法完成最少时间在表中查找值为x的元素,如果找到与其后继元素位置交换。如果找不到将其插入表中使得表仍然递增有序。 思想:因为要求最短时间所以用折半查找。 bool Del_s_t(Sqlist &L,ElemType s,ElemType t){
int count=0;
int flag1=-1;int flag2=-1;
if(s>=t||L.length==0){
printf("链表为空,或s,t输入错误");
return false;
}
for(int i=0;i
bool Del_s_t2(Sqlist &L,ElemType s,ElemType t){
sqList L1;//用来暂存链表中的数据
int k=0;
if(L.length==0||s>=t){
printf("链表为空,或者s与t输入错误");
return false;
}
for(int i=0;i
思想:因为是有序表,所以值相同的元素一定在连续的位置上。判断后面的元素值是否与前面的元素值相等,如果相等,将后面的元素前移,两个元素合并成一个元素。bool delete_same(sqList &L){
if(L.lenfth==0)
reruen false;
int i,j;
for(i=0;j=1;j
思想:按顺序比较表头值,将较小的存入新表,最后看哪个表有剩余,将剩余的部分加的新表后面bool Merge(Sqlist &A,Sqlist &B,Sqlist &C){
if(A.length+B.length>MaxSize){
//如果两个表长度之和大于链表空间最大长度,直接返回false
return false;
}
int i=0,j=0,k=0;
while(i
typedef int DataType;
//函数1将任意数组进行逆序
void Reverse(DataType A[],int left,int right,int arraySize){
if(left>right||right>arraySize){
return false;
}
int mid=(left+right)/2;
for(int i=0;i<=mid-left;i++){//将(a1,a2,,,am),(b1,b2,,,bn)进行逆序
DateType temp=A[left+i];
A[left+i]=A[right-i];
A[right-i]=temp;
}
}
//函数2调用函数1解题
void Exchenge(Date A[],int m,int n,int arraySizes){
Reverse(A,0,m+n-1,arraySize);
Reverse(A,0,n-1,arraySize);
Reverse(A,n,m+n-1,arraySize);
}
void SearchExchangeInsert(ElemType A[],EleamType x){
int low=0,high=n-1,mid;
int temp;
while(low