前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单链表实现通讯录

单链表实现通讯录

作者头像
发布2024-04-30 21:21:42
690
发布2024-04-30 21:21:42
举报
文章被收录于专栏:转自CSDN转自CSDN

SL.h 单链表基文件

代码语言:javascript
复制
#pragma once

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<string.h>
typedef struct PersonInfo* SLTDataType;

typedef struct SListNode
{
	SLTDataType Mumber;
	struct SListNode* next;
}SLTNode;

void SLTPrint(SLTNode* phead);

void SLInit(SLTNode** pphead);

//void SLTPushBack(SLTNode** pphead, SLTDataType x); //用不到

void SLTPushFront(SLTNode** pphead, SLTDataType x);

//void SLTPopBack(SLTNode** pphead); //用不到 不代表我不会写

void SLTPopFront(SLTNode** pphead);

SLTNode* SLTFind(SLTNode* phead);

//void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x); //用不到

//void SLTInsertAfter(SLTNode* pos, SLTDataType x); //用不到

void SLTErase(SLTNode** pphead, SLTNode* pos);

//void SLTEraseAfter(SLTNode** pphead); //用不到

void SListDesTroy(SLTNode** pphead);

 SL.c文件

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include"Mumber.h"

//typedef struct PersonInfo
//{
//    char name[NAME_MAX];
//    char sex[SEX_MAX];
//    int age;
//    char tel[TEL_MAX];
//    char addr[ADDR_MAX];
//}PeoInfo;

void SLTPrint(SLTNode* phead)
{
	assert(phead);
	printf("名字:%s 性别:%s 年龄:%d 电话:%s 住址:%s\n", phead->Mumber->name, phead->Mumber->sex, phead->Mumber->age, phead->Mumber->tel, phead->Mumber->addr);
}

void SLInit(SLTNode** pphead)
{
	SLTNode* new = (SLTNode*)malloc(sizeof(SLTNode));
	if (new == NULL)
	{
		perror("malloc fail!");
		exit(1);
	}
	*pphead = new;
	(*pphead)->next = NULL;
	(*pphead)->Mumber = NULL;
}

void SListDesTroy(SLTNode** pphead)
{
	assert(pphead&&*pphead);
	SLTNode* prve = *pphead;
	while (prve)
	{
		SLTNode* next = prve->next;
		free(prve);
		prve = next;
	}
	*pphead = NULL;
}

SLTNode* SLTBuyNode(SLTDataType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	if (newnode == NULL)
	{
		perror("malloc fail!");
		exit(1);
	}
	newnode->Mumber = x;
	newnode->next = NULL;
	return newnode;
}

void SLTPushFront(SLTNode** pphead, SLTDataType x)
{
	SLTNode* newnode = SLTBuyNode(x);
	newnode->next = (*pphead)->next;
	(*pphead)->next = newnode;
}

void SLTPopFront(SLTNode** pphead)
{
	assert(pphead && *pphead && (*pphead)->next);
	SLTNode* del = (*pphead)->next;
	(*pphead)->next = (*pphead)->next->next;
	free(del);
}

SLTNode* SLTFind(SLTNode* phead)//特供版
{
	assert(phead && phead->next);
	printf("请输入要查找的名字:");
	char name[NAME_MAX] = { 0 };
	scanf("%s", &name);
	phead = phead->next;
	while (phead)
	{
		if (strcmp(phead->Mumber->name, name) == 0)
			return phead;
		phead = phead->next;
	}
	printf("我找不到,你确定你给我了?");
	return NULL;
}

 通讯录头文件

代码语言:javascript
复制
#pragma once
#include"SL.h"
#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 addr[ADDR_MAX];
}PeoInfo;

//初始化通讯录
void InitContact(contact** con);//ok
//添加通讯录数据
void AddContact(contact** con);//这里只给头插了 ok
//删除通讯录数据
void DelContact(contact** con);//头删除 他没让我写指定位置删除 ok
//展示通讯录数据
void ShowContact(contact* con);//ok
//查找通讯录数据
void FindContact(contact* con);//ok
//修改通讯录数据
void ModifyContact(contact** con);//只是修改 没说删
//销毁通讯录数据
void DestroyContact(contact** con);//销毁 ok

通讯录c文件

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include"Mumber.h"

void InitContact(contact** con)
{
	SLInit(con);
}
void DestroyContact(contact** con)
{
	SListDesTroy(con);
}
void ContExchange(SLTDataType *x)//这里写窄了 没办法用于修改内容
{
	PeoInfo* mumber = (PeoInfo*)malloc(sizeof(PeoInfo));
	if(mumber == NULL)
	{
		perror("malloc fail!");
		exit(1);
	}
	*x = mumber;
	printf("名字: 性别: 年龄: 电话: 住址:\n");
	scanf("%s %s %d %s %s", (*x)->name, (*x)->sex,&(*x)->age,(*x)->tel,(*x)->addr);
}
void AddContact(contact** con)
{
	PeoInfo* mumber = NULL;
	ContExchange(&mumber);
	SLTPushFront(con, mumber);
}
void ShowContact(contact* con)
{
	assert(con);
	do
	{
		con = con->next;
		SLTPrint(con);
	} while (con->next);
}
void DelContact(contact** con)
{
	assert(con && *con && (*con)->next);
	//先删除对应的内容 然后在链表内删除结点
	free((*con)->next->Mumber);
	(*con)->next->Mumber = NULL;
	SLTPopFront(con);
}
void FindContact(contact* con)
{
	assert(con&&con->next);
	contact* find = SLTFind(con);
	while (find == NULL)
	{
		find = SLTFind(con);
	}
	SLTPrint(find);
}
void ModifyContact(contact** con)
{
	assert(con && *con&&(*con)->next);
	contact* find = SLTFind(*con);
	while (find == NULL)
	{
		find = SLTFind(con);
	}
	SLTPrint(find);
	printf("名字: 性别: 年龄: 电话: 住址:\n");
	scanf("%s %s %d %s %s", find->Mumber->name, find->Mumber->sex, &find->Mumber->age, find->Mumber->tel, find->Mumber->addr);
}

测试文件

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include"Mumber.h"

//void test()
//{
//	contact* mumber;
//	//初始化
//	InitContact(&mumber);
//	//插入三个
//	AddContact(&mumber);
//	AddContact(&mumber);
//	AddContact(&mumber);
//	//头删除 //删除最近加入的
//	//DelContact(&mumber);
//	//查找
//	FindContact(mumber);
//	//修改
//	ModifyContact(&mumber);
//	//展示
//	ShowContact(mumber);
//	//摧毁
//	DestroyContact(&mumber);
//}

void meau()
{
	printf("***************************************\n");
	printf("*1.插入通讯录         2.删除刚输入的人*\n");
	printf("*3.展示通讯录         4.修改某个人数据*\n");
	printf("*             0.推出通讯录            *\n");
	printf("***************************************\n");
}


void main()
{
	int n = 0;
	contact* mumber;
	InitContact(&mumber);
	do
	{	
		meau();
		scanf("%d", &n);
		switch (n)
		{
		case 1:   AddContact(&mumber); break;
		case 2:   DelContact(&mumber); break;
		case 3:   ShowContact(mumber); break;
		case 4:ModifyContact(&mumber); break;
		case 0:DestroyContact(&mumber); break;
		default: scanf("%d", &n);
		}
	} while (n);
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档