我想问一下exchange函数中,如果前面元素个数大于后面len-m个元素,那互换的时候前面位置也放不开后面元素呀

逆置法元素位置exchange函数怎么写
我想问一下exchange函数中,如果前面元素个数大于后面len-m个元素,那互换的时候前面位置也放不开后面元素呀
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- sy-sy- 2023-10-07 14:22关注
对于你的问题,可能是题目描述不清晰带来的误解
exchange
原地逆置算法是一种常见的算法,用于将数组中的元素逆置,也就是把第一个元素和最后一个元素交换,把第二个元素和倒数第二个元素交换,以此类推,直到整个数组逆序。
用下面的例子说明如何通过三次逆置到达交换的目的
12345678
m为3
第一次逆置
321 45678
第二次逆置
321 87654
第三次逆置
45678123原帖代码如下
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 1000005 typedef struct { int data[MAXSIZE]; int listSize; } seqlist; void init_list(seqlist *list, int len) // 初始化并创建顺序表 { list->listSize = len; for (int i = 0; i < list->listSize; i++) { scanf("%d", &list->data[i]); } } void exchange(seqlist *list, int n, int m) // 逆置函数 { int i, j; for (i = n,j = m; i <= j; i++, j--) { int t = list->data[i]; list->data[i] = list->data[j]; list->data[j] = t; } } int main() { int len; seqlist* list; int t; list = (seqlist*)malloc(sizeof(seqlist)); scanf("%d", &len); init_list(list, len); scanf("%d", &t); while(t--) { int m; scanf("%d", &m); // 注意数组下标 exchange(list, 0, m-1); // 逆置前m个 exchange(list, m, list->listSize-1); // 逆置后len-m个 exchange(list, 0, list->listSize-1); // 整体逆置 for (int i = 0; i < list->listSize; i++) { if (i == list->listSize-1) { printf("%d\n", list->data[i]); } else { printf("%d ", list->data[i]); } } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥100 对接美团闪购医药接口相关问题
- ¥15 嵌入式软件电子烟开发
- ¥15 职场 Excel 查重问题
- ¥20 multisim方波发生电路产生的波形异常,学校没讲模电就留了实验qwq
- ¥15 求怎么用idea2021.3.2创建web项目并配置tomcat
- ¥100 or-tools的相关问题
- ¥15 有可能用平板通过拓展坞来烧录程序吗(keil5的那种)
- ¥15 状态图的并发态问题咨询
- ¥15 PFC3D,plot
- ¥15 VAE模型编程报错无法解决