牛骨文教育服务平台(让学习变的简单)

问题描述

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

算法思想

扫描顺序表L的前半部分,并且同时与L的后半部分交换。

算法描述

int 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;
    }
    return 0;
}

具体代码见附件

附件

#include<stdio.h>
#define MaxSize 100
typedef int ElemType;

typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

int Reverse(SqList *);
void Print(SqList *);

int main(int argc, char* argv[])
{
    SqList SL;
    SL.length=10;
    for(int i=0;i<SL.length;i++){
        SL.data[i]=i;
    }

    int flag;
    Print(&SL);
    flag=Reverse(&SL);
    Print(&SL);

    if(flag==0){
        printf("Success! 
");
    }else{
        printf("Illege! 
");
    }
    return 0;
}

int Reverse(SqList *L)
{
    ElemType temp;
    if(L->length==0){
        printf("illegal!
");
        return -1;
    }
    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;
    }
    return 0;
}

void Print(SqList *L)
{
    for(int i=0;i<L->length;i++){
        printf("%d	",L->data[i]);
    }
    printf("
");
}