欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > [练习]简单结构体操作程序

[练习]简单结构体操作程序

2025/1/20 9:30:00 来源:https://blog.csdn.net/2401_83741734/article/details/145247317  浏览:    关键词:[练习]简单结构体操作程序

在学习C语言的过程中,我们经常会接触到各种数据结构的操作,其中数列(数组)是最基本也是最常用的一种。今天,我们分析一个简单的C语言程序,以及进行一定程度的改进。

程序概述

这个程序的主要目的是实现一个简单的数列操作,包括数列的内存分配、删除指定元素以及输出数列的功能。程序的核心是一个名为sequence的结构体,它包含数列的大小和指向数列元素的指针。通过几个函数的配合,程序完成了数列的创建、修改和输出。以下是程序的代码:

#include<stdio.h>
#include<stdlib.h>struct sequence {int size;int* arr;
};typedef struct sequence SEQ;SEQ memory();
void delete(SEQ seq);
void print_arr(SEQ seq);int main() {SEQ seq = memory();delete(seq);print_arr(seq);return 0;
}//接受数列[内存分配01]
#define ARR (seq.arr+i)
SEQ memory() {SEQ seq = {0,NULL};scanf_s("%d", &seq.size);seq.arr = (int*)calloc(seq.size, sizeof(int));for (int i = 0; i < seq.size; i++){scanf_s("%d", ARR);}return seq;
}//删除单元
void delete(SEQ seq) {int del;scanf_s("%d", &del);for (int i = 0; i < seq.size; i++){if (*ARR == del) *ARR = -1;}
}//输出单元
void print_arr(SEQ seq) {for (int i = 0; i < seq.size; i++){if(*ARR != -1)printf("%d ", *ARR);}}#undef ARR

代码解析

结构体定义

struct sequence {int size;int* arr;
};typedef struct sequence SEQ;

这里定义了一个sequence结构体,并为其创建了一个别名SEQ。结构体包含两个成员:size用于存储数列的大小,arr是一个指向整型数组的指针,用于存储数列的元素。

主函数main

int main() {SEQ seq = memory();delete(seq);print_arr(seq);return 0;
}

主函数是程序的入口。首先,通过调用memory函数创建一个数列,并将其赋值给变量seq。接着,调用delete函数删除数列中的指定元素,最后调用print_arr函数输出处理后的数列。

memory函数

#define ARR (seq.arr+i)
SEQ memory() {SEQ seq = {0,NULL};scanf_s("%d", &seq.size);seq.arr = (int*)calloc(seq.size, sizeof(int));for (int i = 0; i < seq.size; i++) {scanf_s("%d", ARR);}return seq;
}

memory函数用于创建一个数列并分配内存。它首先定义并初始化一个SEQ类型的变量seq,然后读取用户输入的数列大小,并使用calloc函数为数列分配内存。之后,通过循环读取用户输入的数列元素,并存储到seq.arr中。最后返回创建好的数列seq。

delete函数

void delete(SEQ seq) {int del;scanf_s("%d", &del);for (int i = 0; i < seq.size; i++) {if (*ARR == del) *ARR = -1;}
}

delete函数用于删除数列中的指定元素。它首先读取用户输入的要删除的元素值del,然后遍历数列,如果发现某个元素等于del,则将其值修改为-1,表示该元素被删除。

print_arr函数

void print_arr(SEQ seq) {for (int i = 0; i < seq.size; i++) {if(*ARR != -1)printf("%d ", *ARR);}
}

print_arr函数用于输出处理后的数列。它通过循环遍历数列,如果某个元素的值不等于-1(即未被删除),则输出该元素。

内存释放问题

其实代码基本实现了功能,但是有一个致命的问题,它没有进行内存释放,我们可以在main函数的末尾添加free(seq.arr);来释放内存,确保内存安全。

关注代码的质量,不断优化和改进,以写出更优秀的程序。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com