动态通讯录(用顺序表实现)

2023-05-16

利用顺序表实现动态通讯录,实质就是一个动态顺序表,基本代码和顺序表大致
相同,涉及到结构体的创建,初始化,插入,删除,查找等功能。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
//定义一个通讯录内容
typedef struct communicate{
	char name[20];
	char sex[10];
	char num[15];
}com;
//定义一个通讯录
typedef struct note{
	com* array;    //通讯录中存的个体
	int capacity;  //容量
	int size;     //有效个数
}note;
//通讯录初始化
void note_Init(note* seq){
	assert(seq != NULL);  //传进来的通讯录不为空
	seq->capacity = 5;   //先设置一个容量为5的(可以随意设置)
	seq->array = (com*)malloc(sizeof(com)*seq->capacity); //申请内存空间
	seq->size = 0;  //有效个数为0
}
//销毁
void note_destory(note* seq){
	assert(seq != NULL);
	free(seq->array);
}
//判断+扩容
void note_check(note* seq){
	if (seq->size < seq->capacity){  //有效个数小于容量,不扩容
		return;
	}
	else if (seq->size == seq->capacity){  
		int newcapacity = seq->capacity + 2;  
		com* newarray = (com*)realloc(seq->array,sizeof(com)*newcapacity);
		seq->array = newarray;
		seq->capacity = newcapacity;
	}
}

//添加号码
void note_insert(note* seq){
	note_check(seq);      //先判断容量
	printf("请输入姓名:");
	scanf("%s", seq->array[seq->size].name);
	printf("\n");
	printf("请输入性别:");
	scanf("%s", seq->array[seq->size].sex);
	printf("\n");
	printf("请输入学号:");
	scanf("%s", seq->array[seq->size].num);
	printf("\n");
	seq->size++;
	printf("添加成功!\n");
}

//查找(按姓名)
void name_search(note* seq){
	assert(seq->size > 0);  
	char sname[20];
	printf("请输入姓名:\n");
	scanf("%s", sname);
	for (int i = 0; i < seq->size; i++){
		if (strcmp(sname,seq->array[i].name)==0){
			printf("找到了该联系人:\n");
			printf("%s  %s  %s \n", seq->array[i].name,
				seq->array[i].sex, seq->array[i].num);
			return;
		}

	}
		printf("未找到有效数据\n");
		
}
//查找(按号码)与按姓名查找代码基本相同,不再敲出
void num_search(note* seq){}
//删除
void note_eraser(note* seq){
	assert(seq ->size> 0);
	printf("请输入想删除的人:\n");
	char sname[20];
	scanf("%s",sname);
	
	for (int i = 0; i < seq->size; i++){
		if (strcmp(sname, seq->array[i].name) == 0){	
		   //循环,用后一组的值覆盖前一组的值
			for (int j = i; j < seq->size-1; j++){
				seq->array[j] = seq->array[j+1];
			}
			seq->size--;
		}
		else{
			printf("未找到有效数据,删除失败!\n");
		}
	}
}

//打印
void note_print(note* seq){
	assert(seq->size > 0);
	for (int i = 0; i < seq->size; i++){
		printf("%s\t%s\t%s\t ", seq->array[i].name, 
			seq->array[i].sex, seq->array[i].num);
		printf("\n");
	}
}
void menu(){
	printf("*********************\n");
	printf("   1.添加联系人\n");
	printf("   2.删除联系人\n");
	printf("   3.按姓名查找联系人\n");
	printf("   4.按号码查找联系人\n");
	printf("   5.打印联系人\n");
	printf("   6.退出程序\n");
}

int main(){
	menu();
	note p;
	note_Init(&p);
	while (true)
	{
		int i;
		scanf("%d", &i);
		if (i == 1){
			note_insert(&p);
		}
		else if (i==2){
			note_print(&p);
		}
		else if (i == 3){
			name_search(&p);
		}
		else if(i==4){
			note_eraser(&p);
		}
		else if (i == 6){
			break;
		}
		else{
			printf("输入选项有误\n");
		}

	}
	system("pause");
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态通讯录(用顺序表实现) 的相关文章

随机推荐

  • java 字符数组使用toString变为乱码的原因(其实不是乱码)

    java 字符数组使用toString变为乱码 xff08 其实是地址 xff09 我在网上搜了一下这个小白容易犯的问题并没有人解答过 因为String字符串可以通过toCharArray xff08 xff09 得到字符数组 xff0c
  • 中国天气网api接口

    一 中国天气网API 中国天气网官方api接口已经停止更新 xff0c 因此许多以前的博客上的api接口已经失效 因为最近布置了一个关于天气预报的作业 xff0c 因此以作记录找到的api 1 1 Json格式的预报 请求方式 xff1a
  • 关于计蒜客普及组的一道救援题(个人认为应该不涉及算法)

    不涉及任何算法的信息学题目 救援 xff0c 见下 xff1a 救生船从大本营出发 xff0c 营救若干屋顶上的人回到大本营 xff0c 屋顶数目以及每个屋顶的坐标和人数都将由输入决定 xff0c 求出所有人都到达大本营并登陆所用的时间 在
  • 全网最全PDF压缩方法by 忘小寒——标题党警告

    全网最全PDF压缩方法by 忘小寒 标题党警告 全网最全PDF压缩方法by 忘小寒压缩方法1压缩方法2个人经验 全网最全PDF压缩方法by 忘小寒 先用方法1 2试一下 xff0c 都试过了还是不行的话请看最后的个人经验 压缩方法1 如何将
  • python安装出现 DLL load failed while importing xxx, warning:retrying (retry等问题

    DLL load failed while importing xxx找不到指定程序 1 xxx所在库的dll文件和C windows System32的dll文件冲突 解决办法 xff1a 将python安装目录 Lib xxx包 全路径
  • BJFU_数据结构习题_243入栈和出栈的基本操作

    欢迎登录北京林业大学OJ系统 http www bjfuacm com 243入栈和出栈的基本操作 描述 输入一个整数序列a1 a2 a3 an 当ai不等于 1时将ai进栈 xff1b 当ai 61 1时 xff0c 输出栈顶元素并将其出
  • 沙盒软件无法使用的解决办法

    span class token number 1 span 卸载 windwos Sandbox span class token number 2 span 重启 span class token number 3 span 打开命令提
  • 网络基础知识OTN/PTN

    PTN xff1a 骨干层 汇聚层 接入层 OTN 核心层 骨干层 国产OTN 华为6800 xff0c 中兴ZXMP M720 xff0c 烽火FONST3000 国产PTN xff1a 华为OptiX PTN3900 1900 烽火Ci
  • 杨辉三角

    输入数据包含多个测试实例 xff0c 每个测试实例的输入只包含一个正整数n xff08 1 lt 61 n lt 61 30 xff09 xff0c 表示将要输出的杨辉三角的层数 对应于每一个输入 xff0c 请输出相应层数的杨辉三角 xf
  • 远程装好anaconda然后环境变量也设置好后为什么还是无法使用conda命令?

    没有用source bashrc重开 xff01 重新登陆自己账户可能是没用的 xff01 首先用vim bashrc检查自己的环境变量有没有成功设置 xff08 没有的话就设置一下 xff0c 但是一般实验室电脑按anaconda默认装并
  • Appimage无法打开的bug

    Appimage无法打开的bug 程序XXX AppImage突然就打不开了 报错 xff1a appimagetool x86 64 AppImage fusermount span class token function mount
  • Mysql分组查询时间最近的一条数据

    需求描述 现有图书馆借书记录表如下 xff1a 需要分组查询每个学生最近一次借书的记录 借书记录表 borrow books record student id xff08 学号 xff09 student name xff08 姓名 xf
  • ubuntu20.04安装Linux原生的微信

    在优麒麟下有Linux原生的微信 xff0c 虽然功能简陋了一些 xff0c 但是有比没有强 xff0c 基本的聊天需求是可以被满足的 ubuntu下是没提供这个的 xff0c 需要去优麒麟的官网 xff0c 找到优麒麟的应用下载 xff0
  • 【arm64 飞腾】银河麒麟/统信UOS/ubuntu20.0.4系统离线安装mysql

    一 安装环境 xff1a 1 亲测银河麒麟 统信UOS ubuntu20系统离线安装mysql5 7成功 2 mysql数据库5 7 arm64 deb 安装版 3 mysql下载地址 xff1a wget下载失败的可以使用作者分享的网盘下
  • 8、btrfs文件系统、压缩工具

    btrfs文件系统 Btrfs B tree Butter FS Better FS GPL Oracle 2007 CoW ext3 ext4 xfs 核心特性 xff1a 多物理卷支持 xff1a btrfs可由多个底层物理卷组成 xf
  • Linux下如何对gbk编码格式的文件名进行转码

    Linux下如何对gbk编码格式的文件名进行转码 背景 xff1a 将window下的excel模板文件上传到Linux上是 xff0c 中文文件名乱码 将文件名称转码 xff0c 需要用到convmv xff0c Linux中安装命令如下
  • STM32开发板, 用FlyMcu串口下载后程序烧录成功,但板子没有反应

    学习目标 xff1a 之前一直在看论文 xff0c 现在想做点实际的东西 xff0c 开始着手学习下stm32开发板 xff08 正点原子 xff09 xff0c 一点点进步了 xff01 xff01 记录下玩板子中遇到的问题 xff0c
  • 数学方法证明辗转相除法(欧几里得算法):gcd(a,b)=gcd(b,a%b)

    纯数学方法证明辗转相除法 xff08 欧几里得算法 xff09 xff1a gcd a b 61 gcd b a b 1 首先 设gcd a b 61 gcd b a b 61 d 2 构造k与c 得到a 61 kb 43 c 其中c 61
  • text

    这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题 xff0c 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右SmartyP
  • 动态通讯录(用顺序表实现)

    利用顺序表实现动态通讯录 xff0c 实质就是一个动态顺序表 xff0c 基本代码和顺序表大致 相同 xff0c 涉及到结构体的创建 xff0c 初始化 xff0c 插入 xff0c 删除 xff0c 查找等功能 define CRT SE