考研数据结构(每日一题)
题目:设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。
算法图解:
算法思想:
将顺序表前面一半的元素依次和后面一半元素交换
完整代码:
1.常规写法(交换两个数):
void Reverse(Sqlist &L){
Elemtype temp; //交换的辅助变量
for(int i = 0; i < L.length / 2; i++){
temp = L.data[i];
L.data[i] = L.data[L.length-i-1];
L.data[L.length-i-1] = temp;
}
}
2.递归法:
void reverse (int *A,int low,int high){
if(low < high){
swap(A[low],A[high]);
reverse(A,low + 1,high - 1);
}
}