企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 问题描述 > 设计一个高效的算法,将顺序表的所有元素逆置,要求算法的空间复杂度为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"); } ~~~