数据结构_基于链表的通讯录

顺序表的源代码需要略作修改,如下 将数据类型改为通讯录的结构体。注释掉打印,查找的函数。

SList.h

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include"Contact.h"

typedef PeoInfo SList_Datatype;

typedef struct SList_Node
{
	SList_Datatype Data;
	struct SList_Node* Next;
}STL_Node;

//void SLTPrint(STL_Node* phead);

//尾插
void SLTPushBack(STL_Node** pphead, SList_Datatype x);
//头插
void SLTPushFront(STL_Node** pphead, SList_Datatype x);
//尾删
void SLTPopBack(STL_Node** pphead);
//头删
void SLTPopFront(STL_Node** pphead);

//查找
//STL_Node* SLTFind(STL_Node* phead, SList_Datatype x);

//在指定位置之前插入数据
void SLTInsert(STL_Node** pphead, STL_Node* pos, SList_Datatype x);
//在指定位置之后插入数据
void SLTInsertAfter(STL_Node* pos, SList_Datatype x);

//删除pos节点
void SLTErase(STL_Node** pphead, STL_Node* pos);
//删除pos之后的节点
void SLTEraseAfter(STL_Node* pos);

//销毁链表
void SListDesTroy(STL_Node** pphead);

Contact.h

新建立一个结构体,存储联系人的数据。将链表重新给一个名字contact。

实现以下几个接口:

#pragma once

#define NAME_MAX 20
//前置声明
typedef struct SList_Node contact;
//用户数据
typedef struct PersonInfo
{
    char name[NAME_MAX];
    char tel[11];
}PeoInfo;

//初始化通讯录
void InitContact(contact** con);
//添加通讯录数据
void AddContact(contact** con);
//删除通讯录数据
void DelContact(contact** con);
//展示通讯录数据
void ShowContact(contact* con);
//查找通讯录数据
contact* FindContact(contact* con, char* find);
//修改通讯录数据
void ModifyContact(contact** con);
//销毁通讯录数据
void DestroyContact(contact** con);

Contact.c

因为我写过一遍通讯录(基于顺序表)所以再基于链表写一个的难度不是很大。

这里我要特别提醒自己和在看的各位:if(xxx == xxx) 中间一定记得用双等号,不要手滑搞成了 ‘=’(因为本人因为这个错误找了半小时bug,知道是这个原因的时候直接碎掉)

#define _CRT_SECURE_NO_WARNINGS 1
#include"Contact.h"
#include"SList.h"
#include<stdio.h>
#include<string.h>
//初始化通讯录
void InitContact(contact** con)
{
	contact* phead = NULL;
	*con = phead;
}
//添加通讯录数据
void AddContact(contact** con)
{
	PeoInfo newperson;
	printf("姓名:");
	scanf("%s", newperson.name);
	printf("电话:");
	scanf("%s",newperson.tel);
	SLTPushBack(con,newperson);
}
//删除通讯录数据
void DelContact(contact** con)
{
	char del[NAME_MAX];
	printf("要删除的联系人的姓名:");
	scanf("%s",del);
	
	contact* find = FindContact(*con, del);
	
	if (find == NULL)
	{
		printf("要删除的联系人不存在");
		return;
	}
	
	SLTErase(con, find);
}
//展示通讯录数据
void ShowContact(contact* con)
{
	assert(con);
	while (con)
	{
		printf("姓名:%s\n", con->Data.name);
		printf("电话:%s\n", con->Data.tel);
		con = con->Next;
	}
}
//查找通讯录数据
contact* FindContact(contact* con,char* find)
{
	contact* pcur = con;
	while (pcur)
	{
		if (strcmp(find, pcur->Data.name) == 0)
		{
			return pcur;
		}
		pcur = pcur->Next;
	}
	return NULL;
}
//修改通讯录数据
void ModifyContact(contact** con)
{
	printf("请输入要修改联系人的名字:");
	char mod[NAME_MAX];
	scanf("%s",mod);
	contact* find = FindContact(*con, mod);
	if (find == NULL)
	{
		printf("要修改的联系人不存在!");
		return;
	}
	PeoInfo newperson;
	printf("请输入修改后的名字、电话:");
	scanf("%s%s",newperson.name,newperson.tel);
	SLTInsertAfter(find,newperson);
	SLTErase(con,find);
}
//销毁通讯录数据
void DestroyContact(contact** con)
{
	SListDesTroy(con);
}

本博客旨在记录学习过程,以后忘了随时来看。

相关推荐

  1. 数据结构_基于通讯录

    2024-04-13 06:16:08       18 阅读
  2. 数据结构4:基于通讯录项目

    2024-04-13 06:16:08       20 阅读
  3. 数据结构_基于顺序通讯录

    2024-04-13 06:16:08       12 阅读
  4. 数据结构—单实现通讯录

    2024-04-13 06:16:08       14 阅读
  5. 数据结构】利用单再实现通讯录

    2024-04-13 06:16:08       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 06:16:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 06:16:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 06:16:08       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 06:16:08       20 阅读

热门阅读

  1. ChatGPT让论文写作更高效,让学术研究更精彩

    2024-04-13 06:16:08       17 阅读
  2. Conda 常用命令总结

    2024-04-13 06:16:08       19 阅读
  3. ChatGPT:打破论文写作传统,开启智能时代

    2024-04-13 06:16:08       18 阅读
  4. HiveSQL基础Day03

    2024-04-13 06:16:08       15 阅读
  5. 通过 Vue 3 组合式 API 优化 Uni-app 基础页面功能

    2024-04-13 06:16:08       42 阅读
  6. YOLOv9:下一代目标检测的革新

    2024-04-13 06:16:08       55 阅读