用结构体写一个简单的通讯录

一个简单的通讯录

通讯录应该具备简单的一些功能
1 增添联系人
2 删除联系人
3 查找联系人
4 修改联系人
5 按名字给联系人排序
6 查看通讯录
除此之外,应该在实现上还应该具备一些其他的功能函数
比如 初始化通讯录在这里插入图片描述
这些都是功能函数,而整个函数入口应该为main
在这里插入图片描述
为了更加清晰,更加鲜明的体现功能区域,将所有的宏定义,和一些声明我放在一个头文件中。
在这里插入图片描述

要创建一个通讯录,我们要抽象化一个人,将这个人的一些信息放在一个结构体中
在这里插入图片描述
而一个通讯录中不可能只有一个人,所以需要一个结构体数组,来装你要存入的数据
在这里插入图片描述
并创建一个整形变量sz来记录当前通讯录当前存入了多少个人

而在整个main()中只有一个函数test(),我们将整个函数功能的选择放在这里,虽然switch语句并不好,但在这里,依然用switch进行选择
在这里插入图片描述

在这里插入图片描述
本来选择用switch时,应该用一个整形来进行选择,但在这里,我用了一个枚举类型,来更直观的进行选择
在这里插入图片描述
枚举类型,从上至下,对应的数字应该为 0,1,2,3,4,5,6

接下来就是每个功能函数的实现

初始化通讯录

在这里插入图片描述
首先传结构体指针过来,需要判断有效性,用assert断言判断,初始化通讯录
人数为0,并给结构体数组中每个元素赋值0,此处用memset内存建立函数实现。

增添联系人

在这里插入图片描述

查看通讯录

将已经录入的信息打印一遍
在这里插入图片描述

内部查找函数

因为进行下来的操作时都有一个操作就是查找所以,先写一个内部的查找函数
在这里插入图片描述

删除联系人

在这里插入图片描述
此处就要用到上述写的内部查找函数

查找联系人

在这里插入图片描述
找到之后打印一遍,给用户一个友好的提示

修改联系人

在这里插入图片描述

按名字给联系人排序

此处用的是冒泡排序
在这里插入图片描述
到此,所有功能都已实现,但此通讯录是一个静态通讯录,不能根据具体的实际情况进行扩容。

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

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

相关文章

c动态内存管理

动态内存管理 我们之前要开辟内存用的方法都是定义变量,比如 但是上述开辟内存的方法有两个特点 1空间开辟大小是固定的 2数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配 malloc和free c中提供一个动态内存开辟函数 这…

右移函数(字符串,数组)

右移函数 以上是数组右移,将int换成char 把数组内容改成字符串就行。

c中指针简介

c中指针简介 首先我们来看一下指针的一些基本概念 ![在这里插入图片描述](https://img 而对于指针的应用,平常有一些形式,总结了一下大概有这几种用法 对于以上的几种用法,我依次给出详尽的解释 //这是一个普通的整型变量 1 //首先从P 处开…

判断一个字符串是否另一个字符串的右移后的

首先我们把需要判断的字符串传进来,开辟一块大小为两个字符串的长度总和加1的动态的空间,然后后字符串拷贝函数将一个字符串拷贝到开辟空降中,再将这个字符串再次连接到这块动态的空间中,等于就是将一个字符串拷贝了两遍。然后比较…

不带头结点的链表基础操作(初始化,增删改查)

链表是什么? **链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括…

链表面试题1:反转单链表,不带头结点。

三个指针p1,p2,p3,p1指向头结点的前一个结点,也就时指空,p2指向头结点,p3指向头结点下一个结点。 p3指向p2的下一个,让p2指针域指向p1,让p1挪到p2上,再让p2指向p3.

链表面试题2:编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前

我们可以,用两个新链表,一个存比基准值大的,另一个存比基准值小的。然后再拼接在一起。 用尾插的方法,首先说小的,创建两个指针,一个头,一个尾,再创建个指针跑链表,扫描…

栈和队列的基本操作(栈和队列的区别)

数据结构中的栈与内存中的栈的不同 一、数据结构中的堆栈 在数据结构中的堆栈,实际上堆栈是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。 1.栈就像装数据的桶或箱子 我们先从大家比较熟悉的栈说起吧,它是一种具有后进先…

链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。

链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。 首先我们的思想是将得一个链表和第二个链表的每个结点进行比较,谁小谁就插入到新链表的最后。 首先我们要判段链表是否为空,…

双向链表的操作(创建,插入,删除)

双向链表的代码看似复杂,其实很简单,只要画图便可明白, 删除 假如要删除的结点叫pos. pos->prev->nextpos->next; pos->next->prevpos->prev; free(pos);

二叉树的操作(前,中,后序遍历也叫深度优先遍历,非空结点的个数)递归实现

定义一个二叉树的结点 二叉树的前序遍历, 先访问根结点,再访问左,再访问右。 每次访问都要先看根结点是否为空,然后打印根结点,把此时根结点的左结点作为下一次递归的根结点,当把左结点遍历完后&#xff0…

二叉树的相关题(叶子结点个数,最大深度,找特殊值结点(值不重复),判断两个树是否相同,判断两个数是否为镜像树,是否为子树,)

叶子结点就是没有孩子结点,所以当当前根结点没有孩子结点的时候,就返回1,就是找到一个叶子结点,然后访问完每个不为空的结点就行,每次访问都是把当前结点的左/右结点作为新的结点,来判断。 求最大深度&…

为何线程有PID?

在linux下用 top -H -p <pid> 查询某个进程的线程 按理说&#xff0c;都是某个进程下的线程&#xff0c; 应该进程id PID一样啊&#xff0c;但实际却都不一样 实际是被PID的名字给弄混了&#xff0c;线程进程都会有自己的ID&#xff0c;这个ID就叫做PID&#xff0c;P…

用c语言构建二叉树(重点)

结点创建 二叉树创建 我们以‘#’为NULL&#xff0c;我们要把输入进来的一个字符串转变为二叉树&#xff0c;所以我们要记住递归的每一步走到数组了哪个位置 所以我们要记住创建过程中用掉的前序个数&#xff0c;并返回&#xff0c;除此之外&#xff0c;还要加上当时的那个结点…

二叉树的广度优先遍历(层序遍历)

先定义一个二叉树的结点 再创建二叉树&#xff0c;这里就不写了&#xff0c;之前的有创建二叉树的博客。 层序遍历 用到栈的思想&#xff0c; 1 先让根 节点进队列&#xff0c;2 然后读队顶元素&#xff0c;3 让他出队列4 打印它的值5 让队顶元素的左右子树进栈&#xff0…

用前序中序创建二叉树(用中序后序创建二叉树)

定义二叉树结点 比如就拿这个二叉树 前序中序创建 因为前序遍历的顺序是 根 &#xff0c; 左 &#xff0c;右。 中序的遍历是 左 根 右。 我们会很不好想&#xff0c;但我们可以用前序和中序把上面那个二叉树的遍历一边 前序遍历&#xff1a;ABDEHCFG中序遍历&#xff1a;D…

Epoll详解及源码分析

文章来源&#xff1a;http://blog.csdn.net/chen19870707/article/details/42525887 Author&#xff1a;Echo Chen&#xff08;陈斌&#xff09; Email&#xff1a;chenb19870707gmail.com Blog&#xff1a;Blog.csdn.net/chen19870707 Date&#xff1a;Jan.7th, 2015 1…

非递归实现二叉树(前序,中序,后序)c/c++实现

这里还是用到栈的思想&#xff0c;为了方便用了c的一些内容&#xff0c;把出栈&#xff0c;进栈&#xff0c;读栈顶元素用一个个函数封装起来了&#xff0c;前面做了一些处理来使用这些函数。 前序非递归 思想&#xff1a;一直走左边&#xff0c;依次进栈。等左边为空的时候&…

Linux 中统计一个进程的线程数

如果你想看到 Linux 中每个进程的线程数&#xff0c;有以下几种方法可以做到这一点。 方法一: /proc proc 伪文件系统&#xff0c;它驻留在 /proc 目录&#xff0c;这是最简单的方法来查看任何活动进程的线程数。 /proc 目录以可读文本文件形式输出&#xff0c;提供现有进程和系…

Linux_linux基础命令(增删查,权限,Linux下的重要目录,重要命令(. du, df, top, free, pstack, su, sudo).安装gcc/g++, gdb, vim )

r&#xff1a;表示可读w&#xff1a;表示可写x&#xff1a;表示可执行也可以用数字表示这一点我们会在修改文件权限说明。对于文件夹的rwx表示&#xff1a;r表示可读及可以查看文件夹内容可以ls查看w表示可写及可以向文件夹中传送内容如文件x表示可执行及可以向文件夹中可以cd进…