第1章第1节练习题2 逆置顺序表

问题描述

设计一个高效的算法,将顺序表的所有元素逆置,要求算法的空间复杂度为 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! \n");
    }else{
        printf("Illege! \n");
    }
    return 0;
}


int Reverse(SqList *L)
{
    ElemType temp;
    if(L->length==0){
        printf("illegal!\n");
        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\t",L->data[i]);
    }
    printf("\n");
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值