顺序表的应用——(通讯录)

news2024/9/21 1:47:57

目录

前提须知:

通讯录的结构:

通讯录的建立:

顺序表的重命名:

 顺序表数据类型的更改:

使用通讯录结构体新名字,进行类型重命名的问题:

头文件的添加:

通讯录的初始化和销毁:

 头文件部分:

源文件部分:

​编辑 

主函数部分:

添加联系人、删除联系人、修改联系人、查看通讯录、查找联系人: 

头文件声明部分:

 添加联系人:

源文件部分: 

 

主函数部分:

删除联系人: 

查找函数: 

源文件部分:

主函数部分:

​编辑 

 查看通讯录:

源文件:

图例: 

 主函数部分:



前提须知:

这是建立在之前顺序表的基础上完成的。

顺序表的简单介绍_明 日 香的博客-CSDN博客


通讯录的结构:

  • 如图所示:
  • 通讯录的结构是建立在顺序表上的,或者说顺序表内每一个元素其实都被一个结构体代替,这个结构体的内部成员是:姓名、性别、年龄、电话、住址。
  • 所以,我们这次的通讯录需要用到顺序表的各类操作,如头插、尾插、头删、尾删等。

通讯录的建立:

  •  在建立通讯录之前,我们首先建立两个文件,一个是通讯录的头文件,一个是通讯录的源文件。
  • 其中,使用通讯录的源文件,进行函数调用,调用顺序表的各类操作。
  • 且在通讯录的头文件中,进行通讯录结构体的建立。

↑  在通讯录的头文件中 建立 通讯录的结构体,并且为了使用方便,将通讯录 结构体 进行typedef重命名 为 CInfo 

顺序表的重命名:

  • 因为我们的通讯录底层还是需要使用顺序表进行完成的,所以我们在通讯录中重新定义顺序表的名字,以此方便我们进行查看。(在通讯录头文件中完成)
  • 顺序表的简单介绍_明 日 香的博客-CSDN博客 

 顺序表数据类型的更改:

  • 对顺序表中的类型进行更改,原先顺序表的空间地址类型需要进行改变,变为通讯录结构体类型
  • 同时,注意因为在通讯录头文件中,我们对通讯录结构体进行typedef重命名了,但是这里的类型重命名修改,要使用通讯录结构体的原名,否则会出错! 

使用通讯录结构体新名字,进行类型重命名的问题:

因为结构体中,字符和字符之间不能使用==进行比较是否相等! 

头文件的添加:

  • 分别在  顺序表的头文件   和  通讯录的源文件添加  通讯录的头文件 ! 

通讯录的初始化和销毁:

 头文件部分:

  • contact* 是指通讯录结构体类型的指针,或者说是顺序表的指针类型,因为我们在通讯录的头文件中进行了顺序表的重命名
  • pcon是顺序表的地址,因为通讯录的底层是顺序表,或者说通讯录就是顺序表,所以pcon指向的是顺序表的空间地址! 
  • pcon相当于顺序表中的sl ——顺序表的简单介绍_明 日 香的博客-CSDN博客

源文件部分:

  • 在通讯录的源文件中,分别调用了顺序表头文件中的初始化和销毁函数,而后顺序表的头文件又调用到了顺序表的源文件。 

主函数部分:

 

添加联系人、删除联系人、修改联系人、查看通讯录、查找联系人: 

头文件声明部分:

 添加联系人:

  •  进行联系人的添加,需要按照通讯录的结构进行添加。

源文件部分: 

  • CInfo info;  前者是通讯录结构体重命名后的名字 ,后者是通讯录结构体在这个函数内创造的变量 
  • 进行在通讯录中插入数据,这里使用的是尾插
  • 注意,这里的pcon指向的是顺序表,因为之前将顺序表重新命名了,在通讯录头文件中
  • 注意,只有年龄不是字符数组类型,所以需要取地址符号&

主函数部分:

 

删除联系人: 

  • 在此之前我们先设定一个查找联系人是否存在的函数

查找函数: 

  • 因为字符不能直接使用==所以我们使用函数strcmp进行字符和字符之间的对比
  • pcon->size表示的是顺序表这个数组的大小,因为顺序表是数组,所以在进行数组循环时,是不能超过数组大小这个数的。
  • 解释一下,这里pcon->a[i].name 中 [i]的原因是:因为顺序表这个数组中的每一个元素都是一个结构体,从而构成了一个通讯录,所以就相当于这个下标位置的结构体中的name成员的内容。
  • return i;和return -1 ;前者是返回下标,后者是返回-1 因为数组是没有-1这个下标位置所代表的元素的。

源文件部分:

  • 删除联系人调用的是之前 顺序表源文件中的 任意位置删除数据 的函数 
  • 使用findiex 接收查找函数传来的下标,并且进行判断,判断成功则需要删除联系人不存在,失败则需要删除的联系人存在。

主函数部分:

 查看通讯录:

  • 查看通讯录其实就是打印通讯录

源文件:

  • 这里是准备使用表格的形式进行打印 
图例: 

 

  • 使用循环,进行以此的打印,类似于打印数组的每一个元素,只不过这个数组的每一个元素都是结构体,所以相当于打印数组中每一个结构体类型元素的结构体成员。 

 主函数部分:


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

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

相关文章

【Linux】NTP时间服务器Chrony配置详解

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐开着拖拉机回家_大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的帮助🌸文…

CV计算机视觉每日开源代码Paper with code速览-2023.10.11

点击CV51,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构:Transformer】EViT: An Eagle Vision Transformer with Bi-Fovea Self-Attention 论文地址:https://arxiv.or…

Mysql分组查询每组最新的一条数据,查询用户的最新的一条记录

有订单表和用户表,如何获取用户的最新的一条订单记录? 订单表 CREATE TABLE orders (id int(11) NOT NULL AUTO_INCREMENT,uid int(10) NOT NULL DEFAULT 0,created_at datetime(0) NOT NULL,PRIMARY KEY (id) USING BTREE ) ENGINE InnoDB ;INSERT …

Python大数据之Python进阶(七)线程的注意点

线程的注意点 学习目标 能够说出线程的注意点 1. 线程的注意点介绍 线程之间执行是无序的主线程会等待所有的子线程执行结束再结束线程之间共享全局变量线程之间共享全局变量数据出现错误问题 2. 线程之间执行是无序的 import threading import timedef task():time.sleep…

17.(开发工具篇Gitlab)如何在Gitlab配置ssh key

前言: Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置 一、git 配置 (1)打开 git 命令窗口 (2)配置用户名(填自己的姓名) git config --global user.name “chenbc” (3)配置用户邮箱(填自己的邮箱) git config …

有没有普通人也能赚钱的副业?挖漏洞兼职!

如何开展副业?网络安全月入过万! ​ 随着大数据和人工智能的兴起。各行业对信息安全和网络安全服务的需求量呈指数级的暴增。 这不最近,一个做运维的朋友在学网络安全。他告诉我,他靠挖漏洞赚钱上个月月入过万了,好香啊…

Unity 设置Inspect上问号的跳转链接

设置Inspect上问号的跳转链接 只需要在Class上添加特性:HelpURL即可!

《进化优化》第1章 绪论

文章目录 1.1 术语1.2 又一本关于进化算法的书1.3 先修课程1.4 家庭作业1.5 符号1.6 本书的大纲 1.1 术语 一些作者称进化算法为进化计算。另一些人称进化算法为基于种群的优化。一些作者称进化算法为计算机智能或计算智能。专家系统模仿演绎推理,进化算法则模仿归…

视频如何截取高清gif?高清gif一键制作

Gif动图表情包作为当下最受欢迎的一种图片格式,一般是在网上或是与友人的聊天中获取的。其实,制作gif动图的方法也很简单,一段视频就能够从中截取到很多gif动图。只需要使用gif动态图片制作(https://www.gif.cn/)工具&…

腾讯云上创建 对象存储cos

1. 登录腾讯云, 找到对象存储cos 2. 创建存储桶 3. 获取4个配置参数 桶名称 / 地域secretId / secretKey

若依以及flowbale达梦国产化数据库改造_全网最细

Springboot与flowable—达梦国产化改造 文章目录 Springboot与flowable—达梦国产化改造1、相关软件下载1.1 下载可视化工具 2 、源代码运行2.1 导入sql2.2 打开项目,导入pom依赖2.3 修改配置2.3.1 修改数据库配置2.3.2 修改redis配置2.3.3 运行后端2.3.4 运行前端 …

【SpringMVC篇】探索请求映射路径,Get请求与Post请求

🎊专栏【SpringMVC】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🌺请求映射路径⭐报错原因⭐解决方法 🌺…

OpenCV实现答题卡自动打分!

目录 1,主要原理以及函数介绍 全部代码,以 2 , 实现过程 3,结果展示 1,主要原理以及函数介绍 ap argparse.ArgumentParser() 创建一个ArgumentParser对象,并将其赋值给变量ap。这个对象可以接受我们的脚…

基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】

基于springboot实现教师人事档案管理系统演示 摘要 教师人事档案管理系统理工作是一种繁琐的,务求准确迅速的信息检索工作。随着计算机信息技术的飞速发展,人类进入信息时代,社会的竞争越来越激烈,教师人事档案就越显示出其不可或…

JAVA开发者全家桶工具

一、前言 作为JAVA开发者,编码的时间其实只占平时工作的时间不到30%。作为项目管理和团队协作,平时处理的杂事其实很多,当然也是开发工作的一部分,比如写文档,任务管理,代码review、程序部署等等。这一节介…

墨西哥专线正清和双清包税有什么区别?

在国际贸易中,物流运输是一个至关重要的环节。对于从中国发往墨西哥的商品,物流公司通常会提供不同的运输方式和服务,如正清和双清包税等。那么,这两种方式有何不同呢? 首先,我们来看什么是“正清”和“双清”。 “正…

docker 登录本地仓库harbor问题

1、报错如下: 添加目标harbor 仓库的hosts vim /etc/hosts 2、报错如下: 添加修改/etc/docker/daemon.json文件中的 insecure-registries vim /etc/docker/daemon.json 然后 systemctl daemon-reload systemctl restart docker再次登录

【Hello Algorithm】暴力递归到动态规划(二)

暴力递归到动态规划(二) 背包问题递归版本动态规划 数字字符串改字母字符串递归版本动态规划 字符串贴纸递归版本动态规划 **特别需要注意的是 我们使用数组之前一定要进行初始化 不然很有可能会遇到一些意想不到的错误 比如说在Linux平台上 new出来的in…

易点易动让企业实现低值易耗品的智能化采购管理

对于企业而言,低值易耗品的采购和管理是一项重要的任务。然而,传统的采购管理方式往往繁琐且耗时,容易导致资源浪费和效率低下。为了解决这些问题,我们推出了易点易动采购管理系统,它以其高效、便捷和智能化的特点&…

怎样提取视频中的音频?分享一个一学就会的方法~

每次遇到视频中有好听的背景音乐都会想要保存下来,用于自己的视频创作。于是怎样单独提取视频中的音频部分就成了难题,今天教大家一个简单实用的视频提取音频办法,看完记得点赞收藏哦~ 第一步:打开【音分轨】APP&#…