【代码分享】

通讯录2

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>struct contacts
{char name[20];int age;char gender[10];char phone[12];char address[40];
};
typedef struct contacts ABDataType;typedef struct AddressBook
{ABDataType* c;int size;int capacity;
}AB;//初始化
void ABInit(AB* p);//添加联系人
void ABAdd(AB* p, ABDataType* q);//打印通讯录
void ABPrint(AB* p);//删除联系人
void ABDele(AB* p, int n);//排序联系人
void ABSort(AB* p, int n);//查找联系人
int ABFind(AB* p, char* q);//修改联系人
void ABModify(AB* p, ABDataType* q, int n);//打印某个联系人
void ABPrint2(AB* p, int n);
#define _CRT_SECURE_NO_WARNINGS#include"ABook.h"
//初始化
void ABInit(AB*p)
{assert(p);p->c = (ABDataType*)malloc(sizeof(ABDataType)*4);p->capacity = 4;p->size = 0;
}//增容函数
bool ADDcapacity(AB* p)
{assert(p);ABDataType* tmp = p->c;tmp= (ABDataType*)realloc(tmp,sizeof(ABDataType)*p->capacity*2);if (tmp == NULL)return false;p->c = tmp;p->capacity = p->capacity * 2;return true;
}//添加联系人
void ABAdd(AB* p, ABDataType*q)
{assert(p);assert(q);if (p->size == p->capacity){//增容并判断是否增容成功assert(ADDcapacity(p));}p->c[p->size]= *q;p->size++;
}//打印通讯录
void ABPrint(AB* p)
{assert(p);int i = 0;if (p->size == 0)printf("通讯录为空!");printf("|姓名                |年龄|性别      |电话        |地址\n");for (i = 0; i < p->size; i++){printf("|%-20s|%-4d|%-10s|%-12s|%-40s", p->c[i].name, p->c[i].age, p->c[i].gender, p->c[i].phone, p->c[i].address);printf("\n");}
}//打印某个联系人
void ABPrint2(AB* p, int n)
{assert(p);printf("|姓名                |年龄|性别      |电话        |地址\n");printf("|%-20s|%-4d|%-10s|%-12s|%-40s", p->c[n].name, p->c[n].age, p->c[n].gender, p->c[n].phone, p->c[n].address);printf("\n");
}//删除联系人
void ABDele(AB* p, int n)
{int i = n;for (i = n; i < p->size - 1; i++){p->c[i] = p->c[i + 1];}p->size--;
}void ABQSort(AB* p, int left, int right)
{if (left >= right)return 0;int prev = left;int next = left + 1;int keyi = left;while (next <= right){if (strcmp(p->c[next].name, p->c[keyi].name) < 0 && ++prev != next){ABDataType tmp = p->c[next];p->c[next] = p->c[prev];p->c[prev] = tmp;}next++;}ABDataType tmp = p->c[keyi];p->c[keyi] = p->c[prev];p->c[prev] = tmp;keyi = prev;ABQSort(p, left, keyi - 1);ABQSort(p, keyi + 1, right);
}//排序联系
void ABSort(AB* p,int n)
{assert(p);ABQSort(p, 0, n - 1);
}//查找联系人
int ABFind(AB* p, char*q)
{assert(p);assert(q);int i = 0;for (i = 0; i < p->size; i++){if (strcmp(p->c[i].name, q) == 0)return i;}return -1;
}//修改联系人
void ABModify(AB* p, ABDataType* q,int n)
{assert(p);assert(q);p->c[n] = *q;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​LeetCode解法汇总2859. 计算 K 置位下标对应元素的和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 给你一个下…

C语言实战系列二:简单超市收银系统

从一个简单的超市收银系统&#xff0c;我们来练习一个系统如何设计&#xff0c;然后如何实现的思路。 在Ubuntu环境下使用C语言编写一个简单的超市收银系统。以下是一个基本的示例&#xff0c;涵盖了商品管理、购物车、交易处理等功能。 代码 #include <stdio.h> #inc…

css不规则的文本环绕

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>不规则的文本环绕</title><style>.b…

flyway使用配置参数和注意事项介绍

文章目录 业务场景参数介绍initSqlsbaselineOnMigratebaselineVersiontargetvalidateOnMigrate SQL注意事项 业务场景 对于生产环境&#xff0c;随着项目版本迭代&#xff0c;数据库结构也会变动。如果一个项目在多个地方实施部署&#xff0c;且版本不一致&#xff0c;就需要一…

触发器和存储过程的区别

目录 触发器&#xff08;Trigger&#xff09; 定义和用途&#xff1a; 执行方式&#xff1a; 作用范围&#xff1a; 参数传递&#xff1a; 示例&#xff1a; 存储过程&#xff08;Stored Procedure&#xff09; 定义和用途&#xff1a; 执行方式&#xff1a; 作用范围…

CSS之粘性定位

让我为大家介绍一下粘性定位吧&#xff01; 大家应该都了解过绝对定位&#xff0c;它是相对于父级定位 那么粘性定位相对于谁呢&#xff1f; 它相对于overflow:hidden; 如果没找到就会跟fixed固定定位一样&#xff0c;相对于视口 <!DOCTYPE html> <html lang"en…

rust 引用/mut 的所有权

在任意给定时间&#xff0c;要么 只能有一个可变引用&#xff0c;要么 只能有多个不可变引用。 不可变引用&#xff08;shared reference&#xff09;实现了Copy trait&#xff0c;不会发生所有权转移可变引用&#xff08;mutable reference&#xff09;未实现&#xff0c;会发…

C++ 利用容器适配器,仿函数实现栈,队列,优先级队列(堆),反向迭代器,deque的介绍与底层

C 利用容器适配器,仿函数实现栈,队列,优先级队列【堆】,反向迭代器,deque的介绍与底层 一.容器适配器的介绍二.利用容器适配器实现栈和队列1.stack2.queue 三.仿函数介绍1.什么是仿函数2.仿函数的使用3.函数指针的使用1.函数指针的用处2.利用函数指针完成回调3.利用仿函数完成回…

Compose | UI组件(二) | Text() 文本组件

文章目录 Text() 简介Text() 参数说明Text() 显示文字fontSize 文字大小textAlign 文字对齐方式style 文字样式fontFamily 文字字体AnnotatedString 多样式文字maxLines 设置文本单行显示SelectionContainer 选中文字 总结 Text() 简介 显示文字的组件 Text() 参数说明 Comp…

免 费 小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

cg插画设计行业怎么样,如何学习插画设计

插画设计行业是一个充满创意和艺术性的行业&#xff0c;随着数字化时代的不断发展&#xff0c;cg插画的应用范围越来越广泛&#xff0c;市场需求也在逐年增长。以下是一些关于acg插画设计行业的现状和发展趋势&#xff1a; 市场需求不断增长&#xff1a;随着广告、媒体、影视、…

HCIA学习作业二

要求&#xff1a;基于192.168.1.0/24进行合理划分&#xff0c;要求全网通 [AR3]display ip interface brief [AR3]display ip routing-table [AR1]display ip interface brief [AR1]display ip routing-table [AR2]display ip interface brief [AR2]display ip routing-tab…

Element-plus修改样式

场景 通过样式穿透修改前端element组件样式。 实现 1.button按钮 ::v-deep .el-button { border-radius: 0; border: 0; background-color: rgba(0, 194, 255) !important; color: black; } 2.form表单 ::v-deep .el-form { text-align: left; .el-form-item { text-align: lef…

Hadoop3.x源码解析

文章目录 一、RPC通信原理解析1、概要2、代码demo 二、NameNode启动源码解析1、概述2、启动9870端口服务3、加载镜像文件和编辑日志4、初始化NN的RPC服务端5、NN启动资源检查6、NN对心跳超时判断7、安全模式 三、DataNode启动源码解析1、概述2、初始化DataXceiverServer3、初始…

C# 在矩形内获取一个指定大小的矩形(两个矩形的中心点是重合的)

C# 在矩形内获取一个指定大小的矩形&#xff08;两个矩形的中心点是重合的&#xff09; 示例1&#xff1a; using System.Drawing;public class RectangleUtils {public static Rectangle GetInnerRectangle(Rectangle outerRectangle, Size innerSize){// 计算内部矩形的左上…

MySQL的数据锁表(data_locks 表)

data_locks 表显示了持有和请求的数据锁。关于哪些锁请求被哪些持有的锁阻塞的信息。 示例数据锁信息&#xff1a; mysql> SELECT * FROM performance_schema.data_locks\G *************************** 1. row ***************************ENGINE: INNODBENGINE_LOCK_ID:…

《WebKit 技术内幕》学习之十一(2):多媒体

2 视频 2.1 HTML5视频 在HTML5规范定义中&#xff0c;Web开发者可以使用“video”元素来播放视频资源。视频中有个重要的问题就是视频编码格式&#xff0c;对此&#xff0c;目前标准中包含了三种编码格式&#xff0c;它们分别是Ogg、MPEG4和WebM。其中Ogg是由Xiph.org组织开…

PyQt中的信号/槽以及纯python实现信号/槽设计模式

1.信号与槽的基本概念 在PyQt中&#xff0c;信号是一种对象间通信的机制。当某个特定事件发生时&#xff0c;一个信号被发射。槽是接收信号的方法&#xff0c;当信号被发射时&#xff0c;与之连接的槽会被调用。这种机制使得不同部分的代码能够松耦合地交流。 2.PyQt中的信号与…

【模拟算法系列】详解5道题

本文讲解模拟算法系列的5道经典题&#xff0c;在讲解题目的同时提供AC代码&#xff0c;点击题目即可打开对应OJ链接 目录 模拟算法的介绍 1、替换所有的问号 2、提莫攻击 3、 Z 字形变换 4、外观数列 5、数青蛙 模拟算法的介绍 题目中明确告诉你要干什么&#xff0c;思路…

C++ //练习 3.3 请说明string类的输入运算符和getline函数分别是如何处理空白字符的。

C Primer&#xff08;第5版&#xff09; 练习 3.3 练习 3.3 请说明string类的输入运算符和getline函数分别是如何处理空白字符的。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 cin读取并忽略有效字符之前所有的空白字符&…