C语言实现简易通讯录2.0(动态内存管理)

我们在前文中介绍了如何实现简易通讯录,但是我们发现,如果直接在栈区开辟一个1000个大小为PeoInfo结构体大小的空间,而我们只使用了那么几个,不免有些过于浪费,于是我们考虑使用动态内存开辟来让空间使用更加合理。

具体不再赘述,需要动态修改的内容只在几个函数中有所改变,代码中已经加注 动态版本: 的部分就是需要修改的部分。完整代码如下:

addressBook.h文件:

#pragma once

//头文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_NAME 20
#define MAX_SEX 6
#define MAX_TELE 12
#define MAX_ADDR 20
#define MAX 1000

#define INIT_SZ 3
#define CAP_ADD 2

enum fun
{
   
	EXIT,//从0开始,EXIT = 0
	ADD,//1
	DEL,//2
	SEARCH,//3
	MODIFY,//4
	PRINT,
	SORT
};



//个人信息结构体:
typedef struct PeoInfo
{
   
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}PeoInfo;

通讯录结构体:静态版本
//typedef struct Book
//{
   
//	PeoInfo data[MAX];//
//	int size;//记录当前通讯录中有效的信息个数
//}Book;

//通讯录结构体:动态版本
typedef struct Book
{
   
	PeoInfo* data;//动态版本:记录个人信息
	int size;//记录当前通讯录中有效的信息个数
	int cap;//记录当前的最大容量,以便满了通过动态内存管理来扩充
}Book;

//菜单函数声明:
void menu(void);
void menu_ins(void);

//初始化通讯录函数声明
void InitMsg(Book*);

//增加通讯录信息函数声明:
void AddMsg(Book* );

//打印通讯录信息函数声明:
void PrintMsg(Book* );

//删除通讯录信息函数声明:
void DelMsg(Book* );

//查找通讯录信息函数声明:
void SearchMsg(Book*);

//修改通讯录信息函数声明:
void ModMsg(Book*);

//排序通讯录信息函数声明:
void SortMsg(Book*);

//通讯录动态空间释放函数声明:
void DestroyMsg(Book*);

addressBook.c文件:

//
//本文件包括  各功能函数:


#include "addressBook.h"

//菜单显示:
void menu()
{
   
	printf("********************************\n");
	printf("******  1.增加    2.删去  ******\n");
	printf("******  3.搜索	  4.修改   *****\n");
	printf("******  5.浏览	  6.排序   *****\n");
	printf("******       0.退出  ***********\n");
	printf("********************************\n");
}
//菜单说明:
void menu_ins()
{
   
	printf("菜单说明\n");
	printf("增加:增加通讯录信息\n");
	printf("删去:输入姓名,删去该姓名对应的通讯录信息\n");
	printf("搜索:输入姓名,搜索并打印该姓名对应的通讯录信息\n");
	printf("修改:输入姓名,修改该姓名对应的通讯录信息\n");
	printf("浏览:打印出全部通讯录信息\n&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值