c语言动态顺序表输入元素逆置
时间: 2023-05-30 18:05:31 浏览: 108
动态顺序表是指顺序表的长度可以动态增长或缩短,其实现方式是使用动态内存分配函数(如malloc、realloc、free)来动态分配、释放内存。
输入元素逆置即将输入的元素按照与输入顺序相反的顺序存储到顺序表中。下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define INIT_SIZE 10 // 初始分配大小
#define INCREMENT 5 // 增量
typedef struct {
int *data; // 动态数组
int length; // 当前长度
int size; // 当前分配的存储容量
} SqList; // 动态顺序表
// 初始化动态顺序表
void initList(SqList *L) {
L->data = (int *)malloc(INIT_SIZE * sizeof(int)); // 分配初始存储空间
if (L->data == NULL) {
printf("Error: memory allocation failed!\n");
exit(1);
}
L->length = 0;
L->size = INIT_SIZE;
}
// 在动态顺序表中插入元素
void insert(SqList *L, int e) {
if (L->length == L->size) { // 空间已满,需重新分配内存
L->data = (int *)realloc(L->data, (L->size + INCREMENT) * sizeof(int));
if (L->data == NULL) {
printf("Error: memory reallocation failed!\n");
exit(1);
}
L->size += INCREMENT;
}
L->data[L->length++] = e; // 插入元素
}
// 逆置动态顺序表中的元素
void reverse(SqList *L) {
int i, temp;
for (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;
}
}
// 输出动态顺序表中的元素
void printList(SqList L) {
int i;
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SqList L;
int i, n;
initList(&L); // 初始化动态顺序表
printf("Please input the number of elements: ");
scanf("%d", &n);
printf("Please input the elements: ");
for (i = 0; i < n; i++) {
int e;
scanf("%d", &e);
insert(&L, e); // 插入元素
}
printf("The original list is: ");
printList(L);
reverse(&L); // 逆置元素
printf("The reversed list is: ");
printList(L);
free(L.data); // 释放内存
return 0;
}
```
在上述代码中,initList函数用于初始化动态顺序表,insert函数用于在动态顺序表中插入元素,reverse函数用于逆置动态顺序表中的元素,printList函数用于输出动态顺序表中的元素。在main函数中,首先输入元素个数和元素值,然后调用insert函数将元素插入动态顺序表中,输出原始的动态顺序表,接着调用reverse函数逆置动态顺序表中的元素,最后输出逆置后的动态顺序表。最后,需要调用free函数释放动态分配的内存。
阅读全文