用指针和动态内存分配的方法输入10,2,30, 4,5,按输入顺序逆置排序,输出排序后的元素,即输出5,4,30,2,10

简介: 用指针和动态内存分配的方法输入10,2,30, 4,5,按输入顺序逆置排序,输出排序后的元素,即输出5,4,30,2,10

该问题涉及到了指针和动态内存分配的运用,以及对数组进行排序和逆序输出的实现。以下是一个基于C语言的技术博客,包含了对输入数据进行排序和逆序输出的详细代码案例。

首先,我们需要引入头文件 stdio.hstdlib.h 以使用标准输入输出函数和动态内存分配函数。

c复制代码
 #include <stdio.h>  
 #include <stdlib.h>

接下来,我们需要定义一个结构体 struct Number,用于存储输入的数字数据。同时,我们还需要定义一个指向该结构体的指针 struct Number *numbers,以便进行动态内存分配和排序操作。

c复制代码
 struct Number {  
 int number;
 };
 struct Number *numbers;

在主函数中,我们需要先使用 malloc() 函数为 numbers 分配足够的内存空间,以存储输入的数字数据。这里我们使用了 sizeof() 函数计算结构体 Number 的大小,并分配了能够存储 10 个 Number 结构体的内存空间。

c复制代码
 int main() {
 int count = 10;
 numbers = (struct Number *)malloc(count * sizeof(struct Number));
 if (numbers == NULL) {
 printf("Memory allocation failed.\n");
 return 1;
 }

接下来,我们需要从标准输入中读取 10 个数字数据,并将它们存储到 numbers 中。这里我们使用了循环和指针操作来实现。

c复制代码
 for (int i = 0; i < count; i++) {
 printf("Enter number %d: ", i + 1);
 scanf("%d", &(numbers[i].number));
 }

然后,我们需要对这些数字数据进行排序。这里我们使用了冒泡排序算法,通过比较相邻元素的大小,并进行交换操作来实现排序。排序完成后,我们就可以输出这些数字数据了。为了实现逆序输出,我们还需要将数组进行倒序排列。

c复制代码
 for (int i = 0; i < count - 1; i++) {
 for (int j = i + 1; j < count; j++) {
 if (numbers[i].number > numbers[j].number) {
 int temp = numbers[i].number;
 numbers[i].number = numbers[j].number;
 numbers[j].number = temp;
 }
 }
 }
 for (int i = count - 1; i >= 0; i--) {
 printf("%d ", numbers[i].number);
 }

最后,我们需要释放动态内存以避免内存泄漏。这里我们使用了 free() 函数来实现。

c复制代码
 free(numbers);
 return 0;

完整的代码如下:

c复制代码
 #include <stdio.h>  
 #include <stdlib.h>  
 struct Number {  
 int number;
 };
 int main() {
 int count = 10;
 struct Number *numbers = (struct Number *)malloc(count * sizeof(struct Number));
 if (numbers == NULL) {
 printf("Memory allocation failed.\n");
 return 1;
 }
 for (int i = 0; i < count; i++) {
 printf("Enter number %d: ", i + 1);
 scanf("%d", &(numbers[i].number));
 }
 for (int i = 0; i < count - 1; i++) {
 for (int j = i + 1; j < count; j++) {
 if (numbers[i].number > numbers[j].number) {
 int temp = numbers[i].number;
 numbers[i].number = numbers[j].number;
 numbers[j].number = temp;
 }
 }
 }
 for (int i = count - 1; i >= 0; i--) {
 printf("%d ", numbers[i].number);
 }
 free(numbers);
 return 0;
 }
目录
相关文章
|
6天前
|
存储 设计模式 Java
JavaSE 面向对象程序设计初级 2024方法变量封装javabean结合内存图详解
JavaSE 面向对象程序设计初级 2024方法变量封装javabean结合内存图详解
14 7
|
1天前
|
Java
指针赋值的几种方法
指针赋值的几种方法
|
2天前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
10 0
|
3天前
|
存储 缓存 算法
详解JVM内存优化技术:压缩指针
详解JVM内存优化技术:压缩指针
|
28天前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
5天前
|
缓存 监控 Java
Java中的内存泄漏及其排查方法
Java中的内存泄漏及其排查方法
|
9天前
|
存储 C语言
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
|
2月前
|
C++ 索引
使用指针减法管理内存
使用指针减法管理内存
|
10天前
|
安全 Java 编译器
Go的内存对齐和指针运算详解和实践
Go的内存对齐和指针运算详解和实践
|
11天前
|
存储 编译器
指针?地址?内存?
指针?地址?内存?
10 0