编辑代码

#include <stdio.h>  
#include <stdlib.h>  
  
#define INITIAL_CAPACITY 10  // 初始容量,这个值应该足够大以容纳要插入的数组  
  
typedef struct {  
    int *data;  // 指向动态分配的数组的指针  
    int size;   // 当前存储的元素数量  
    int capacity; // 数组的容量  
} SeqList;  
  
// 初始化顺序表  
void initSeqList(SeqList *list) {  
    list->data = (int *)malloc(INITIAL_CAPACITY * sizeof(int));  
    list->size = 0;  
    list->capacity = INITIAL_CAPACITY;  
}  
  
// 在顺序表末尾添加元素(简化版插入,不指定位置)  
void append(SeqList *list, int value) {  
    if (list->size >= list->capacity) {  
        int newCapacity = list->capacity * 2;  
        int *newData = (int *)realloc(list->data, newCapacity * sizeof(int));  
        if (!newData) {  
            printf("Memory allocation failed\n");  
            exit(1); // 或者其他错误处理  
        }  
        list->data = newData;  
        list->capacity = newCapacity;  
    }  
    list->data[list->size] = value;  
    list->size++;  
}  
  
// 打印顺序表的内容  
void display(SeqList *list) {  
    for (int i = 0; i < list->size; i++) {  
        printf("%d ", list->data[i]);  
    }  
    printf("\n");  
}  
  
// 释放顺序表占用的内存  
void freeSeqList(SeqList *list) {  
    free(list->data);  
    list->data = NULL;  
    list->size = 0;  
    list->capacity = 0;  
}  

// // 平移元素
// void reverse(SeqList *list, int p){
//     int copy[list->size];
//     // 复制一份数组
//     for(int j = 0; j < list->size; j++) {
//         copy[j] = list->data[j];
//     }
//     for(int i = 0; i < list->size; i++){
//         // 计算要平移插入的位置
//         int index = (i + p) % list->size;
//         // 插入
//         list->data[index] = copy[i];
//     }

// }


void reverse(SeqList *list, int l, int r) {
    int low = l, high = r;
    int temp;
    while(low<=high){
        temp = list->data[low];
        list->data[low] = list->data[temp];
        list->data[temp] = temp;
        low++;
        high--;
    }

}
  
int main() {  
    SeqList list;  
    initSeqList(&list);  
  
    int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};  
    int arraySize = sizeof(array) / sizeof(array[0]);  
  
    // 将数组中的元素添加到顺序表中  
    for (int i = 0; i < arraySize; i++) {  
        append(&list, array[i]);  
    }  
  
    printf("顺序表的内容:\n");  
    display(&list);  
  
    reverse(&list, 2);
    display(&list);
    // 释放内存  
    freeSeqList(&list);  
  
    return 0;  
}