考研数据结构(每日一题)day03

100 阅读1分钟

考研数据结构(每日一题)

题目:设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。

算法图解:

Snipaste_2022-02-17_15-14-04.png

算法思想:

将顺序表前面一半的元素依次和后面一半元素交换

完整代码:

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);
    }
}