当前位置: 首页 > news >正文

单链表应用

基于单链表实现通讯录项目

//Contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
#include"list.h"//初始化通讯录
void InitContact(contact** con)
{con = NULL;}
//添加通讯录数据
void AddContact(contact** con)
{PeoInfo info;printf("address:");scanf_s("%s", info.address, ADDR_MAX);printf("name:");scanf_s("%s", info.name, NAME_MAX);printf("sex:");scanf_s("%s", info.sex, SEX_MAX);printf("tel:");scanf_s("%s", info.tel, TEL_MAX);printf("age:");scanf_s("%d", &info.age);SLTPushBack(con, info);
}
//删除通讯录数据
void DelContact(contact** con)
{SListDesTroy(con);
}
//展示通讯录数据
void ShowContact(contact* con)
{SLTPrint(con);
}
//查找通讯录数据
void FindContact(contact* con)
{PeoInfo info;info.name[NAME_MAX];scanf_s("%s", info.name, NAME_MAX);printf("%p\n", SLTFind(con, info));
}
//修改通讯录数据
void ModifyContact(contact** con)
{PeoInfo info;info.name[NAME_MAX];scanf_s("%s", info.name, NAME_MAX);SLTNode* find = SLTFind(*con, info);if (find){printf("address:");scanf_s("%s", find->val.address, ADDR_MAX);printf("name:");scanf_s("%s", find->val.name, NAME_MAX);printf("sex:");scanf_s("%s", find->val.sex, SEX_MAX);printf("tel:");scanf_s("%s", find->val.tel, TEL_MAX);printf("age:");scanf_s("%d", &find->val.age);printf("修改完成\n");return;}else{printf("没找到");}
}
//销毁通讯录数据
void DestroyContact(contact** con)
{SListDesTroy(con);
}
//Contact.h
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#define NAME_MAX 100
#define SEX_MAX 4
#define TEL_MAX 11
#define ADDR_MAX 100//前置声明
typedef struct SListNode contact;//用户数据
typedef struct PersonInfo
{char name[NAME_MAX];char sex[SEX_MAX];int age;char tel[TEL_MAX];char address[ADDR_MAX];
}PeoInfo;//初始化通讯录
void InitContact(contact** con);
//添加通讯录数据
void AddContact(contact** con);
//删除通讯录数据
void DelContact(contact** con);
//展示通讯录数据
void ShowContact(contact* con);
//查找通讯录数据
void FindContact(contact* con);
//修改通讯录数据
void ModifyContact(contact** con);
//销毁通讯录数据
void DestroyContact(contact** con);
//list.c
#include"list.h"
#include<stdlib.h>
#include<string.h>
void SLTPrint(SLTNode* phead)
{printf("address   name       sex        tel           age\n");while (phead){printf("%s   %8s   %8s   %8s      %8d\n", (*phead).val.address, (*phead).val.name, (*phead).val.sex, (*phead).val.tel, (*phead).val.age);phead = phead->next;}
}
SLTNode* buyNode(SLTDataType x)
{SLTNode* node = (SLTNode*)malloc(sizeof(SLTNode));node->next = NULL;node->val = x;return node;
}
//头部插入删除/尾部插入删除
void SLTPushBack(SLTNode** pphead, SLTDataType x)
{SLTNode* node = buyNode(x);if (*pphead == NULL){*pphead = node;return;}SLTNode* cur = (*pphead);while (cur->next){cur = cur->next;}cur->next = node;
}
void SLTPushFront(SLTNode** pphead, SLTDataType x)
{SLTNode* node = buyNode(x);if (pphead == NULL){*pphead = node;return;}node->next = (*pphead);(*pphead) = node;
}
void SLTPopBack(SLTNode** pphead)
{SLTNode* cur = (*pphead);if (cur->next == NULL){free(cur);cur = NULL;return;}SLTNode* prev = NULL;while (cur->next){prev = cur;cur = cur->next;}free(cur);prev->next = NULL;
}
void SLTPopFront(SLTNode** pphead)
{SLTNode* cur = (*pphead);if (cur->next == NULL){free(cur);return;}SLTNode* prev = cur;cur = cur->next;free(prev);prev = NULL;
}//查找
SLTNode* SLTFind(SLTNode* phead, SLTDataType x)
{while (phead){if (!strcmp(phead->val.name, x.name)){return phead;}phead = phead->next;}return NULL;
}
//在指定位置之前插入数据
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
{SLTNode* cur = (*pphead);SLTNode* node = buyNode(x);if (cur == pos){SLTPushFront(pphead, x);return;}while (cur->next == pos){cur = cur->next;}node->next = cur->next;cur->next = node;
}
//删除pos节点
void SLTErase(SLTNode** pphead, SLTNode* pos)
{SLTNode* cur = (*pphead);if (cur == pos){SLTPopFront(pphead);return;}while (cur->next == pos){cur = cur->next;}SLTNode* next = cur->next;cur->next = next->next;free(next);next = NULL;
}
//在指定位置之后插入数据
void SLTInsertAfter(SLTNode* pos, SLTDataType x)
{SLTNode* node = buyNode(x);SLTNode* next = pos->next;pos->next = node;node->next = next;
}
//删除pos之后的节点
void SLTEraseAfter(SLTNode* pos)
{SLTNode* next = pos->next;while (next){SLTNode* nnext = next->next;free(next);next = nnext;}pos->next = NULL;
}
//销毁链表
void SListDesTroy(SLTNode** pphead)
{SLTNode* cur = (*pphead);while (cur){SLTNode* next = cur->next;free(cur);cur = next;}*pphead = NULL;pphead = NULL;}
//list.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"Contact.h"
typedef PeoInfo SLTDataType;
typedef struct SListNode
{SLTDataType val;struct SListNode* next;
}SLTNode;void SLTPrint(SLTNode* phead);
SLTNode* buyNode(SLTDataType x);
//头部插入删除/尾部插入删除
void SLTPushBack(SLTNode** pphead, SLTDataType x);
void SLTPushFront(SLTNode** pphead, SLTDataType x);
void SLTPopBack(SLTNode** pphead);
void SLTPopFront(SLTNode** pphead);//查找
SLTNode* SLTFind(SLTNode* phead, SLTDataType x);
//在指定位置之前插入数据
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);
//删除pos节点
void SLTErase(SLTNode** pphead, SLTNode* pos);
//在指定位置之后插入数据
void SLTInsertAfter(SLTNode* pos, SLTDataType x);
//删除pos之后的节点
void SLTEraseAfter(SLTNode* pos);
//销毁链表
void SListDesTroy(SLTNode** pphead);
//test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"list.h"
int main()
{SLTNode* ps = 0;InitContact(&ps);AddContact(&ps);AddContact(&ps);AddContact(&ps);ShowContact(ps);printf("-------------------------------------------------\n");/*DelContact(&ps);ShowContact(ps);printf("-------------------------------------------------\n");*/FindContact(ps);printf("-------------------------------------------------\n");ModifyContact(&ps);ShowContact(ps);printf("-------------------------------------------------\n");DestroyContact(&ps);return 0;
}

运行结果:

 

谢谢观看 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Android】UI拓展之滑动菜单、悬浮按钮、CoordinatorLayout布局等
  • excel透视图、看板案例(超详细)
  • 保姆级Maven安装、配置、版本查询教程(包含配置本地仓库、阿里云私服、环境变量)
  • PWM(Pulse-width modulation)脉冲宽度调制
  • 计算机毕业设计PySpark+Scrapy农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop
  • Leetcode3243. 新增道路查询后的最短距离 I
  • C#——类与结构
  • MySQL-进阶篇-锁(全局锁、表级锁、行级锁)
  • 两个月冲刺软考——关系模式中的候选关键字与如何分解为无损连接并保持函数依赖的解法(例题讲解,看完必会)
  • 面向对象程序设计原则——里氏替换原则(LSP)
  • 1098 Insertion or Heap Sort
  • 复旦NLP团队新作:大规模语言模型从理论到实践PDF版
  • WHAT - 通过 react-use 源码学习 React(Lifecycles 篇)
  • macos OneNote 2016 for Mac 官方pkg下载地址 - macos 10.15 Catalion 可用Onenote版本官方下载地址
  • 红帽与SUSE对RHEL/CentOS 7系列延长生命周期支持策略:保障企业Linux系统的持续安全与稳定
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 「译」Node.js Streams 基础
  • 30天自制操作系统-2
  • oldjun 检测网站的经验
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SQLServer插入数据
  • Swift 中的尾递归和蹦床
  • Vue 2.3、2.4 知识点小结
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue UI框架库开发介绍
  • Web设计流程优化:网页效果图设计新思路
  • 大数据与云计算学习:数据分析(二)
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何编写一个可升级的智能合约
  • 入门到放弃node系列之Hello Word篇
  • 思考 CSS 架构
  • 2017年360最后一道编程题
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • (19)夹钳(用于送货)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (苍穹外卖)day03菜品管理
  • (第二周)效能测试
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十六)一篇文章学会Java的常用API
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)为什么要选择C++
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .bat批处理出现中文乱码的情况
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net Redis的秒杀Dome和异步执行
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .Net 知识杂记
  • .NET 直连SAP HANA数据库
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...