gpt4 book ai didi

c - 如何简化以下 C 代码?

转载 作者:行者123 更新时间:2023-11-30 16:19:21 25 4
gpt4 key购买 nike

我目前正在开发一个图书馆管理系统项目。

我实现了一个用于存储图书信息的哈希表和一个用于存储学生信息的哈希表。

在这个项目中名为 book.h/.c 和 Student.h/.c 的两个模块中,我有两个相同的函数来释放内存。

有什么方法可以在我的shared_func.h/.c中将这两个函数重写为一个函数,并在两个模块中调用它,而不在shared_func.h/.c中包含两个模块的头文件

任何帮助将不胜感激。

书.h

    typedef struct bnode {
...
some variables
struct bnode *next;

} Book;

void free_all_books();

书.c

#include "book.h"
static Student *book_table[MAX_SIZE] = {NULL};
....

void free_all_books()
{
for( i = 0; i < MAX_SIZE; i++ ) {
Book *head = book_table[i];
if( head == NULL ) {
continue;
} else {
Book *temp;
while ( head != NULL ) {
temp = head;
head = head->next;
free(temp);
}
}
}
}

学生.h

       typedef struct snode {
...
some variables
struct snode *next;

} Student;

void free_all_students();

学生.c

#include "student.h"
static Student *student_table[MAX_SIZE] = {NULL};
....

void free_all_students()
{
for( i = 0; i < MAX_SIZE; i++ ) {
Student *head = student_table[i];
if( head == NULL ) {
continue;
} else {
Student *temp;
while ( head != NULL ) {
temp = head;
head = head->next;
free(temp);
}
}
}
}

最佳答案

结构的第一个成员的地址也是结构的地址,因此您可以通过使用包含 next 成员的通用头结构并编写一个将释放的函数来利用这一事实通用节点。

给定:

typedef struct node 
{
struct node* next ;
} Node ;

然后:

typedef struct bnode 
{
Node node ;
...
some variables
...
} Book;

typedef struct bnode 
{
Node node ;
...
some variables
...
} Student ;

然后:

void free_all_nodes( Node* table, int max  )
{
for( int i = 0; i < max; i++ )
{
Node* head = table[i] ;
while ( head != NULL )
{
Node* temp = head ;
head = head->next;
free(temp);
}

table[i] = NULL ;
}
}

和:

void free_all_books()
{
free_all_nodes( (Node*)book_table, MAX_LEN ) ;
}

void free_all_students()
{
free_all_nodes( (Node*)student_table, MAX_LEN ) ;
}

关于c - 如何简化以下 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55641271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com