前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >[练习]简单结构体操作程序

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

作者头像
siy2333
发布2025-02-05 12:49:35
发布2025-02-05 12:49:35
3000
代码可运行
举报
文章被收录于专栏:来自csdn的博客来自csdn的博客
运行总次数:0
代码可运行

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

程序概述

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

代码语言:javascript
代码运行次数:0
复制
#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

代码解析

结构体定义

代码语言:javascript
代码运行次数:0
复制
struct sequence {
    int size;
    int* arr;
};typedef struct sequence SEQ;

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

主函数main

代码语言:javascript
代码运行次数:0
复制
int main() {
    SEQ seq = memory();
    delete(seq);
    print_arr(seq);
    return 0;
}

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

memory函数

代码语言:javascript
代码运行次数:0
复制
#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函数

代码语言:javascript
代码运行次数:0
复制
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函数

代码语言:javascript
代码运行次数:0
复制
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);来释放内存,确保内存安全。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 程序概述
  • 代码解析
    • 结构体定义
    • 主函数main
    • memory函数
    • delete函数
    • print_arr函数
  • 内存释放问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档