编写以下函数实现:

(1)doregister(n, arr), 从控制台输入n个会员信息,按性别存储两个链表(名字升序排序),每个链表的头节点存入指针数组arr中;

(2)unregister(arr, phone),输入一个电话号码,查找并注销会籍(从对应链表中删除节点);

主函数调用上述函数,完成功能测试。

输入样例:

第一行输入会籍数量;然后每行输入会籍信息;最后一行输入要注销会籍的电话号码;

5
lili 13455667788 1
haos 13555667788 1
qiul 13655667788 2
maom 13755667788 2
zhou 13855667788 1
13855667788

输出样例:

按性别分别输出所有会籍;

Males:
haos 13555667788
lili 13455667788
Females:
maom 13755667788
qiul 13655667788

代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>struct clubmem{char name[16];  // 名字 char phone[12]; // 电话 int gender;    // 1=男性, 2=女性 struct clubmem* next;   // 下一个节点
};void insert(struct clubmem **phead, struct clubmem *pnew)
{struct clubmem *head;head = *phead;if(head == NULL){head = pnew;*phead  = head;}//ifelse{if(strcmp(pnew -> name, head -> name) < 0){pnew -> next = head;head = pnew;*phead = head;}//ifelse{struct clubmem *p,*pold;pold = head;p = head -> next;while(p != NULL){if(strcmp(p -> name,pnew -> name) < 0){pold = p;p = p -> next;}else break;}//whilepnew -> next = p;pold -> next = pnew;}//else}//else
}//insert void doregister(int n, struct clubmem *group[])
{struct clubmem *pnew;int i;for(i = 0; i < n; i++){pnew = (struct clubmem *)malloc(sizeof(struct clubmem));pnew -> next = NULL;scanf("%s %s %d\n",pnew -> name, pnew -> phone, &pnew -> gender);if(pnew -> gender == 1)//男性insert(&group[0],pnew);else if(pnew -> gender == 2)//女性insert(&group[1],pnew);}
}//doregistervoid delete_p(struct clubmem **phead, char phone[])
{struct clubmem *head, *p,*pold;head = p = pold = *phead;if(strcmp(head -> phone,phone) == 0){head -> next = head;free(p);*phead = head;p = head -> next;}//ifelse{while(p != NULL){if(strcmp(p -> phone,phone) == 0){pold -> next = p -> next;free(p);p = pold -> next;}else{pold = p;p = p -> next;}}//while}//else
}//delete_pvoid unregister(struct clubmem *group[], char phone[])
{delete_p(&group[0],phone);delete_p(&group[1],phone);}//unregister// 输出所有会籍信息
void print(struct clubmem* head)
{struct clubmem* p = head;while(p != NULL){printf("%s %s\n", p->name, p->phone);p = p->next;}//while
}int main()
{int n=0;struct clubmem* head;struct clubmem* group[2] = {0}; // [0]指向男会员, [1]指向女会员 char phone[16]; scanf("%d", &n);doregister(n, group);        // 注册n个会籍信息 gets(phone);                 // 输入要注销会籍的名字unregister(group, phone);    // 查找并注销会籍信息 printf("Males:\n");          // 分别输出男女会员信息 print(group[0]);;printf("Females:\n");print(group[1]);
}

男女会籍注册(指针数组+链表+二级指针)相关推荐

  1. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  2. C语言指针(函数指针数组,二级指针)

    int (*p[num])( char*,int,int );int (*(*p)[num])(int a); 上一篇博客最后的两个例子的答案分别是:函数指针数组,函数指针数组的指针. 函数指针数组指 ...

  3. 【C语言指针】 指针+-整数、指针-指针、解引用、指针数组、二级指针、结构体声明、初始化、传参

    目录 一.指针 1.指针是什么 1.1.一个单元1个字节 2.指针和指针类型 2.1.指针类型的意义 ① 解引用 ② + -整数 例:把每个整形里放1 每个字节里放1 总结: 3.野指针 3.1.野指 ...

  4. 【C 语言】二级指针作为输入 ( 指针数组 | 将 二级指针 作为函数输入 | 抽象函数业务逻辑 )

    文章目录 一.打印 指针数组 中指针指向的字符串 二.字符串排序 三.代码示例 一.打印 指针数组 中指针指向的字符串 打印 指针数组 中指针指向的字符串 : 指针退化问题 : 传入二级指针 , 同时 ...

  5. 二维数组和二级指针关系浅析

    昨天写了关于一级指针的见解,即二级数组的用法和二级指针差不多,关于数组指针和指针数组这两个是不同的概念,这一点我们一定要清楚: 数组指针我们可以理解为指向数组的指针,就是一个指针: 指针数组则可以理解 ...

  6. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  7. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  8. 数组指针和指针数组,函数指针和指针函数,常量指针和指针常量,常量引用

    一.数组指针和指针数组 1.数组指针(行指针) 首先要知道数组指针是指向数组的指针.所以数组指针本质是个指针,只不过指向一个数组而已.格式为:T (*ptr)[]. 注意:"[]" ...

  9. 计算机二级指针,C语言——二级指针

    二级指针的概念 首先任何值都有地址,一级指针的值虽然是地址,但这个地址做为一个值亦需要空间来存放,是空间就具有地址,这就是存放地址这一值的空间所具有的地址,二级指针就是为了获取这个地址, 一级指针所关 ...

最新文章

  1. ElasticSearch 2 (38) - 信息聚合系列之结束与思考
  2. 【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )
  3. MPU6050姿态融合(转载)
  4. 引入mysql+命名空间_C#连接MySQL操作详细教程
  5. 解决ntfs格式的移动硬盘mount到Linux下时变成只读文件系统的问题
  6. 敏捷开发用户故事系列之一:何为用户故事
  7. 索引sql server_维护SQL Server索引
  8. 窗口封装类与Windows窗口实例的关系-3、CWnd如何处理窗口消息
  9. AppLinks使用详解
  10. 【原】对txt文本进行数据读取
  11. Java基础知识之笔记总结分享(超详细)入门必备
  12. 错误日志分析(dSYM)-2016
  13. 从硅谷“神秘”孵化器,看中美医疗创新差别在哪里
  14. 什么是功能性测试?-Alltesting|泽众云测试
  15. android 发送UDP广播,搜寻服务器建立socket链接
  16. iNode客户端“未收到服务器回应,即将强行下线,请检查终端能否正常访问网络或者与管理员联系”问题与解决方式...
  17. ATmi-G 公众号机器人 【永久免费】
  18. call 和 apply 方法
  19. win7 无显示器 服务器,win7显示器无信号怎么办?电脑显示器无信号修复方法
  20. 百度重要技术精英出走! 云计算和大数据首席架构师林仕鼎辞职!

热门文章

  1. php打开页面的快捷键,窗口切换快捷键是什么
  2. JavaScript在数组中寻找相同对象元素的问题
  3. 未能将管道连接到虚拟机: 所有的管道范例都在使用中。_梁化镇清理管道污泥技术工程服务2020欢迎您...
  4. 各种DAC的输出电压详细版
  5. 使用递归实现链表反转
  6. 华为智能安防余虎:安防进入了新时代
  7. 关于uniapp获取应用版本号
  8. Web前端学习笔记——LESS
  9. matlab调用函数出nan,求助:Matlab的fmincon函数出现RCOND = NaN
  10. winform生成exe俩秒钟就退出_《一秒钟》是给电影的情书,也是给普通人的情书...