国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)——基于單鏈表實(shí)現(xiàn)通訊管理系統(tǒng)

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)——基于單鏈表實(shí)現(xiàn)通訊管理系統(tǒng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、前言

這個(gè)通訊錄是基于單鏈表實(shí)現(xiàn)的,關(guān)于單鏈表,之前已經(jīng)做過完整的實(shí)現(xiàn)方法——數(shù)據(jù)結(jié)構(gòu)——單鏈表(C語(yǔ)言版)
用單鏈表實(shí)現(xiàn)的通訊錄其實(shí)和用順序表實(shí)現(xiàn)的通訊錄類似,可以參考該文章——基于動(dòng)態(tài)順序表的應(yīng)用——通訊錄


完成該通訊錄需要引進(jìn)經(jīng)過修改后的單鏈表的文件

SList.h

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include  "Contact.h"

typedef PeoInfo SLTDateType;

typedef struct SListNode
{
	SLTDateType date;
	struct SListNode* next;
}SLTNode;

//尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x);

//頭插
void SLTPushFront(SLTNode** pphead, SLTDateType x);

//尾刪
void SLTPopBack(SLTNode** pphead);

//頭刪
void SLTPopFront(SLTNode** pphead);

//在指定位置之前插入數(shù)據(jù)
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x);

//在指定位置之后插入數(shù)據(jù)
void SLTInsertAfter(SLTNode* pos, SLTDateType x);

//刪除pos結(jié)點(diǎn)
void SLTErase(SLTNode** pphead, SLTNode* pos);

//刪除pos之后的結(jié)點(diǎn)
void SLTEraseAfter(SLTNode* pos);

//銷毀鏈表
void SListDesTroy(SLTNode** pphead);

SList.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "SList.h"

//申請(qǐng)新的結(jié)點(diǎn)
SLTNode* SLTBuyNode(SLTDateType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	if (newnode == NULL)
	{
		printf("malloc fail!");
		exit(1);
	}
	newnode->date = x;
	newnode->next = NULL;
	return newnode;
}

//尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x)
{
	assert(pphead);
	SLTNode* newnode = SLTBuyNode(x);
	//空鏈表 和 非空鏈表
	if (*pphead == NULL)
	{
		*pphead = newnode;
	}
	else
	{
		SLTNode* ptail = *pphead;
		while (ptail->next)
		{
			ptail = ptail->next;
		}
		ptail->next = newnode;
	}
}

//頭插
void SLTPushFront(SLTNode** pphead, SLTDateType x)
{
	assert(pphead);
	SLTNode* newnode = SLTBuyNode(x);
	newnode->next = *pphead;
	*pphead = newnode;
}

//尾刪
void SLTPopBack(SLTNode** pphead)
{
	assert(pphead && *pphead);
	//只有一個(gè)結(jié)點(diǎn)
	if ((*pphead)->next == NULL)
	{
		free(*pphead);
		*pphead = NULL;
	}
	//多個(gè)結(jié)點(diǎn)
	else
	{
		SLTNode* prev = *pphead;
		SLTNode* ptail = *pphead;

		while (ptail->next)
		{
			prev = ptail;
			ptail = ptail->next;
		}
		free(ptail);
		ptail = NULL;
		prev->next = NULL;
	}
}

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

//在指定位置之前插入數(shù)據(jù)
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x)
{
	assert(pphead && *pphead);
	assert(pos);
	if (*pphead == pos)
	{
		SLTPushFront(pphead, x);
	}
	else
	{
		SLTNode* newnode = SLTBuyNode(x);
		SLTNode* prev = *pphead;
		while (prev->next != pos)
		{
			prev = prev->next;
		}
		prev->next = newnode;
		newnode->next = pos;
	}
	
}

//在指定位置之后插入數(shù)據(jù)
void SLTInsertAfter(SLTNode* pos, SLTDateType x)
{
	assert(pos);
	SLTNode* newnode = SLTBuyNode(x);
	newnode->next = pos->next;
	pos->next = newnode;
}

//刪除pos結(jié)點(diǎn)
void SLTErase(SLTNode** pphead, SLTNode* pos)
{
	assert(pphead && *pphead);
	assert(pos);
	if (pos == *pphead)
	{
		SLTPopFront(pphead);
	}
	else
	{
		SLTNode* prev = *pphead;
		while (prev->next != pos)
		{
			prev = prev->next;
		}
		prev->next = pos->next;
		free(pos);
		pos = NULL;
	}
	
}

//刪除pos之后的結(jié)點(diǎn)
void SLTEraseAfter(SLTNode* pos)
{
	assert(pos && pos->next);
	SLTNode* del = pos->next;
	pos->next = del->next;
	free(del);
	del = NULL;
}

//銷毀鏈表
void SListDesTroy(SLTNode** pphead)
{
	assert(pphead && *pphead);
	SLTNode* pcur = *pphead;
	
	while (pcur)
	{
		SLTNode* next = pcur->next;
		free(pcur);
		pcur = next;
	}
	*pphead = NULL;
}

二、通訊錄的實(shí)現(xiàn)

通訊錄項(xiàng)目

創(chuàng)建一個(gè)通訊錄項(xiàng)目,包含以下文件:

數(shù)據(jù)結(jié)構(gòu)——基于單鏈表實(shí)現(xiàn)通訊管理系統(tǒng),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)

Contact.h 通訊錄的頭文件,包含通訊錄的聲明以及相關(guān)函數(shù)的聲明
Contact.c 通訊錄函數(shù)的具體實(shí)現(xiàn)方法
contact.txt 保存通訊錄中的數(shù)據(jù)

SList.h 單鏈表的聲明
SList.c 單鏈表函數(shù)的聲明

test.c 測(cè)試代碼,也可以當(dāng)菜單文章來源地址http://www.zghlxwxcb.cn/news/detail-850746.html

Contact.h

#pragma once
#define NAME_MAX 100
#define SEX_MAX 4
#define TEL_MAX 11
#define ADDR_MAX 100

//聯(lián)系人的數(shù)據(jù)
//姓名 性別 年齡 電話 地址
typedef struct PersonInfo
{
	char name[NAME_MAX];
	char sex[SEX_MAX];
	int age;
	char tel[TEL_MAX];
	char addr[ADDR_MAX];
}PeoInfo;

//前置聲明
typedef struct SListNode contact;

//初始化通訊錄
void InitContact(contact** con);

//添加通訊錄數(shù)據(jù)
void AddContact(contact** con);

//刪除通訊錄數(shù)據(jù)
void DelContact(contact** con);

//展示通訊錄數(shù)據(jù)
void ShowContact(contact* con);

//查找通訊錄數(shù)據(jù)
void FindContact(contact* con);

//修改通訊錄數(shù)據(jù)
void ModifyContact(contact** con);

//銷毀通訊錄數(shù)據(jù)
void DestroyContact(contact** con);

載入數(shù)據(jù)

//載入數(shù)據(jù)
void LoadContact(contact** con)
{
	FILE* pf = fopen("contact.txt", "r");
	//判斷讀取是否成功
	if (pf == NULL)
	{
		perror("fopen fail!");
		return;
	}
	//循環(huán)讀取數(shù)據(jù)
	PeoInfo info;
	while (fread(&info, sizeof(PeoInfo), 1, pf))
	{
		SLTPushBack(con, info);
	}
	printf("歷史數(shù)據(jù)導(dǎo)入通訊錄成功!\n");
}

初始化通訊錄

//初始化通訊錄
void InitContact(contact** con)
{
	LoadContact(con);
}

添加通訊錄數(shù)據(jù)

// 添加通訊錄數(shù)據(jù)
void AddContact(contact** con)
{
	PeoInfo info;
	printf("請(qǐng)輸入聯(lián)系人的姓名:\n");
	scanf("%s", info.name);

	printf("請(qǐng)輸入聯(lián)系人的性別:\n");
	scanf("%s", info.sex);

	printf("請(qǐng)輸入聯(lián)系人的年齡:\n");
	scanf("%d", &info.age);

	printf("請(qǐng)輸入聯(lián)系人的電話:\n");
	scanf("%s", info.tel);

	printf("請(qǐng)輸入聯(lián)系人的地址:\n");
	scanf("%s", info.addr);

	SLTPushBack(con, info);
}

通過姓名查找聯(lián)系人

//通過姓名查找聯(lián)系人
contact* FindByName(contact* con, char name[])
{
	contact* pcur = con;
	while (pcur)
	{
		if (strcmp(pcur->date.name, name) == 0)
		{
			return pcur;
		}
		pcur = pcur->next;
	}
	return NULL;
}

刪除通訊錄數(shù)據(jù)

//刪除通訊錄數(shù)據(jù)
void DelContact(contact** con)
{
	char name[NAME_MAX];
	printf("請(qǐng)輸入要?jiǎng)h除的聯(lián)系人的姓名->");
	scanf("%s", name);
	contact* pos = FindByName(*con, name);
	if (pos != NULL)
	{
		SLTErase(con, pos);
		printf("刪除成功!\n");
	}
	else
	{
		printf("刪除失??!沒有該聯(lián)系人!\n");
	}
}

展示通訊錄數(shù)據(jù)

//展示通訊錄數(shù)據(jù)
void ShowContact(contact* con)
{
	printf("%6s %6s %6s %6s %6s\n", "姓名", "性別", "年齡", "電話", "地址");
	contact* pcur = con;
	while (pcur)
	{
		printf("%6s %6s %6d %6s %6s\n",
			pcur->date.name,
			pcur->date.sex,
			pcur->date.age,
			pcur->date.tel,
			pcur->date.addr);
		pcur = pcur->next;
	}
}

查找通訊錄數(shù)據(jù)

//查找通訊錄數(shù)據(jù)
void FindContact(contact* con)
{
	char name[NAME_MAX];
	printf("請(qǐng)輸入要查找的聯(lián)系人的姓名->");
	scanf("%s", name);
	contact* pos = FindByName(con, name);
	if (pos == NULL)
	{
		printf("沒有該聯(lián)系人!\n");
	}
	else
	{
		printf("找到了!該聯(lián)系人的信息如下:\n");
		printf("%6s %6s %6s %6s %6s\n", "姓名", "性別", "年齡", "電話", "地址");
		printf("%6s %6s %6d %6s %6s\n",
			pos->date.name,
			pos->date.sex,
			pos->date.age,
			pos->date.tel,
			pos->date.addr);
	}
}

修改通訊錄數(shù)據(jù)

//修改通訊錄數(shù)據(jù)
void ModifyContact(contact** con)
{
	char name[NAME_MAX];
	printf("請(qǐng)輸入要修改的聯(lián)系人的姓名->");
	scanf("%s", name);
	contact* pos = FindByName(*con, name);
	if (pos == NULL)
	{
		printf("沒有該聯(lián)系人!\n");
	}
	else
	{
		printf("開始修改!\n");
		printf("聯(lián)系人的新姓名為:\n");
		scanf("%s", pos->date.name);

		printf("聯(lián)系人的新性別為:\n");
		scanf("%s", pos->date.sex);

		printf("聯(lián)系人的新年齡為:\n");
		scanf("%d", &pos->date.age);

		printf("聯(lián)系人的新電話為:\n");
		scanf("%s", pos->date.tel);

		printf("聯(lián)系人的新地址為:\n");
		scanf("%s", pos->date.addr);

		printf("修改成功!\n");
	}
}

保存通訊錄

//保存通訊錄
void SaveContact(contact* con)
{
	FILE* pf = fopen("contact.txt", "w");
	if (pf == NULL)
	{
		perror("fopen fail!");
		return;
	}
	//將通訊錄數(shù)據(jù)寫入文件
	contact* pcur = con;
	while (pcur)
	{
		fwrite(&(pcur->date), sizeof(pcur->date), 1, pf);
		pcur = pcur->next;
	}
	printf("通訊錄保存成功!\n");
}

銷毀通訊錄數(shù)據(jù)

//銷毀通訊錄數(shù)據(jù)
void DestroyContact(contact** con)
{
	//在銷毀通訊錄之前,保存數(shù)據(jù)
	SaveContact(*con);
	SListDesTroy(con);
}

三、所有源代碼

Contact.h

#pragma once
#define NAME_MAX 100
#define SEX_MAX 4
#define TEL_MAX 11
#define ADDR_MAX 100

//聯(lián)系人的數(shù)據(jù)
//姓名 性別 年齡 電話 地址
typedef struct PersonInfo
{
	char name[NAME_MAX];
	char sex[SEX_MAX];
	int age;
	char tel[TEL_MAX];
	char addr[ADDR_MAX];
}PeoInfo;

//前置聲明
typedef struct SListNode contact;

//初始化通訊錄
void InitContact(contact** con);

//添加通訊錄數(shù)據(jù)
void AddContact(contact** con);

//刪除通訊錄數(shù)據(jù)
void DelContact(contact** con);

//展示通訊錄數(shù)據(jù)
void ShowContact(contact* con);

//查找通訊錄數(shù)據(jù)
void FindContact(contact* con);

//修改通訊錄數(shù)據(jù)
void ModifyContact(contact** con);

//銷毀通訊錄數(shù)據(jù)
void DestroyContact(contact** con);

Contact.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"
#include "SList.h"

//載入數(shù)據(jù)
void LoadContact(contact** con)
{
	FILE* pf = fopen("contact.txt", "r");
	//判斷讀取是否成功
	if (pf == NULL)
	{
		perror("fopen fail!");
		return;
	}
	//循環(huán)讀取數(shù)據(jù)
	PeoInfo info;
	while (fread(&info, sizeof(PeoInfo), 1, pf))
	{
		SLTPushBack(con, info);
	}
	printf("歷史數(shù)據(jù)導(dǎo)入通訊錄成功!\n");
}

//初始化通訊錄
void InitContact(contact** con)
{
	LoadContact(con);
}

// 添加通訊錄數(shù)據(jù)
void AddContact(contact** con)
{
	PeoInfo info;
	printf("請(qǐng)輸入聯(lián)系人的姓名:\n");
	scanf("%s", info.name);

	printf("請(qǐng)輸入聯(lián)系人的性別:\n");
	scanf("%s", info.sex);

	printf("請(qǐng)輸入聯(lián)系人的年齡:\n");
	scanf("%d", &info.age);

	printf("請(qǐng)輸入聯(lián)系人的電話:\n");
	scanf("%s", info.tel);

	printf("請(qǐng)輸入聯(lián)系人的地址:\n");
	scanf("%s", info.addr);

	SLTPushBack(con, info);
}

//通過姓名查找聯(lián)系人
contact* FindByName(contact* con, char name[])
{
	contact* pcur = con;
	while (pcur)
	{
		if (strcmp(pcur->date.name, name) == 0)
		{
			return pcur;
		}
		pcur = pcur->next;
	}
	return NULL;
}

//刪除通訊錄數(shù)據(jù)
void DelContact(contact** con)
{
	char name[NAME_MAX];
	printf("請(qǐng)輸入要?jiǎng)h除的聯(lián)系人的姓名->");
	scanf("%s", name);
	contact* pos = FindByName(*con, name);
	if (pos != NULL)
	{
		SLTErase(con, pos);
		printf("刪除成功!\n");
	}
	else
	{
		printf("刪除失?。]有該聯(lián)系人!\n");
	}
}

//展示通訊錄數(shù)據(jù)
void ShowContact(contact* con)
{
	printf("%6s %6s %6s %6s %6s\n", "姓名", "性別", "年齡", "電話", "地址");
	contact* pcur = con;
	while (pcur)
	{
		printf("%6s %6s %6d %6s %6s\n",
			pcur->date.name,
			pcur->date.sex,
			pcur->date.age,
			pcur->date.tel,
			pcur->date.addr);
		pcur = pcur->next;
	}
}

//查找通訊錄數(shù)據(jù)
void FindContact(contact* con)
{
	char name[NAME_MAX];
	printf("請(qǐng)輸入要查找的聯(lián)系人的姓名->");
	scanf("%s", name);
	contact* pos = FindByName(con, name);
	if (pos == NULL)
	{
		printf("沒有該聯(lián)系人!\n");
	}
	else
	{
		printf("找到了!該聯(lián)系人的信息如下:\n");
		printf("%6s %6s %6s %6s %6s\n", "姓名", "性別", "年齡", "電話", "地址");
		printf("%6s %6s %6d %6s %6s\n",
			pos->date.name,
			pos->date.sex,
			pos->date.age,
			pos->date.tel,
			pos->date.addr);
	}
}

//修改通訊錄數(shù)據(jù)
void ModifyContact(contact** con)
{
	char name[NAME_MAX];
	printf("請(qǐng)輸入要修改的聯(lián)系人的姓名->");
	scanf("%s", name);
	contact* pos = FindByName(*con, name);
	if (pos == NULL)
	{
		printf("沒有該聯(lián)系人!\n");
	}
	else
	{
		printf("開始修改!\n");
		printf("聯(lián)系人的新姓名為:\n");
		scanf("%s", pos->date.name);

		printf("聯(lián)系人的新性別為:\n");
		scanf("%s", pos->date.sex);

		printf("聯(lián)系人的新年齡為:\n");
		scanf("%d", &pos->date.age);

		printf("聯(lián)系人的新電話為:\n");
		scanf("%s", pos->date.tel);

		printf("聯(lián)系人的新地址為:\n");
		scanf("%s", pos->date.addr);

		printf("修改成功!\n");
	}
}

//保存通訊錄
void SaveContact(contact* con)
{
	FILE* pf = fopen("contact.txt", "w");
	if (pf == NULL)
	{
		perror("fopen fail!");
		return;
	}
	//將通訊錄數(shù)據(jù)寫入文件
	contact* pcur = con;
	while (pcur)
	{
		fwrite(&(pcur->date), sizeof(pcur->date), 1, pf);
		pcur = pcur->next;
	}
	printf("通訊錄保存成功!\n");
}

//銷毀通訊錄數(shù)據(jù)
void DestroyContact(contact** con)
{
	//在銷毀通訊錄之前,保存數(shù)據(jù)
	SaveContact(*con);
	SListDesTroy(con);
}

SList.h

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include  "Contact.h"

typedef PeoInfo SLTDateType;

typedef struct SListNode
{
	SLTDateType date;
	struct SListNode* next;
}SLTNode;

//尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x);

//頭插
void SLTPushFront(SLTNode** pphead, SLTDateType x);

//尾刪
void SLTPopBack(SLTNode** pphead);

//頭刪
void SLTPopFront(SLTNode** pphead);

//在指定位置之前插入數(shù)據(jù)
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x);

//在指定位置之后插入數(shù)據(jù)
void SLTInsertAfter(SLTNode* pos, SLTDateType x);

//刪除pos結(jié)點(diǎn)
void SLTErase(SLTNode** pphead, SLTNode* pos);

//刪除pos之后的結(jié)點(diǎn)
void SLTEraseAfter(SLTNode* pos);

//銷毀鏈表
void SListDesTroy(SLTNode** pphead);

SList.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "SList.h"



//申請(qǐng)新的結(jié)點(diǎn)
SLTNode* SLTBuyNode(SLTDateType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	if (newnode == NULL)
	{
		printf("malloc fail!");
		exit(1);
	}
	newnode->date = x;
	newnode->next = NULL;
	return newnode;
}

//尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x)
{
	assert(pphead);
	SLTNode* newnode = SLTBuyNode(x);
	//空鏈表 和 非空鏈表
	if (*pphead == NULL)
	{
		*pphead = newnode;
	}
	else
	{
		SLTNode* ptail = *pphead;
		while (ptail->next)
		{
			ptail = ptail->next;
		}
		ptail->next = newnode;
	}
}

//頭插
void SLTPushFront(SLTNode** pphead, SLTDateType x)
{
	assert(pphead);
	SLTNode* newnode = SLTBuyNode(x);
	newnode->next = *pphead;
	*pphead = newnode;
}

//尾刪
void SLTPopBack(SLTNode** pphead)
{
	assert(pphead && *pphead);
	//只有一個(gè)結(jié)點(diǎn)
	if ((*pphead)->next == NULL)
	{
		free(*pphead);
		*pphead = NULL;
	}
	//多個(gè)結(jié)點(diǎn)
	else
	{
		SLTNode* prev = *pphead;
		SLTNode* ptail = *pphead;

		while (ptail->next)
		{
			prev = ptail;
			ptail = ptail->next;
		}
		free(ptail);
		ptail = NULL;
		prev->next = NULL;
	}
}

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

//在指定位置之前插入數(shù)據(jù)
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x)
{
	assert(pphead && *pphead);
	assert(pos);
	if (*pphead == pos)
	{
		SLTPushFront(pphead, x);
	}
	else
	{
		SLTNode* newnode = SLTBuyNode(x);
		SLTNode* prev = *pphead;
		while (prev->next != pos)
		{
			prev = prev->next;
		}
		prev->next = newnode;
		newnode->next = pos;
	}
	
}

//在指定位置之后插入數(shù)據(jù)
void SLTInsertAfter(SLTNode* pos, SLTDateType x)
{
	assert(pos);
	SLTNode* newnode = SLTBuyNode(x);
	newnode->next = pos->next;
	pos->next = newnode;
}

//刪除pos結(jié)點(diǎn)
void SLTErase(SLTNode** pphead, SLTNode* pos)
{
	assert(pphead && *pphead);
	assert(pos);
	if (pos == *pphead)
	{
		SLTPopFront(pphead);
	}
	else
	{
		SLTNode* prev = *pphead;
		while (prev->next != pos)
		{
			prev = prev->next;
		}
		prev->next = pos->next;
		free(pos);
		pos = NULL;
	}
	
}

//刪除pos之后的結(jié)點(diǎn)
void SLTEraseAfter(SLTNode* pos)
{
	assert(pos && pos->next);
	SLTNode* del = pos->next;
	pos->next = del->next;
	free(del);
	del = NULL;
}

//銷毀鏈表
void SListDesTroy(SLTNode** pphead)
{
	assert(pphead && *pphead);
	SLTNode* pcur = *pphead;
	
	while (pcur)
	{
		SLTNode* next = pcur->next;
		free(pcur);
		pcur = next;
	}
	*pphead = NULL;
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "SList.h"
//測(cè)試代碼——菜單
void menu()
{
	printf("****************通訊錄*******************\n");
	printf("******1.添加聯(lián)系人    2.刪除聯(lián)系人*******\n");
	printf("******3.修改聯(lián)系人    4.查找聯(lián)系人*******\n");
	printf("******5.展示聯(lián)系人    0. 退出************\n");
	printf("*****************************************\n");
}

int main()
{
	int input = 0;
	contact* con = NULL;
	//初始化
	InitContact(&con);
	do
	{
		menu();
		printf("選擇你的操作->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			AddContact(&con);
			break;
		case 2:
			DelContact(&con);
			break;
		case 3:
			ModifyContact(&con);
			break;
		case 4:
			FindContact(con);
			break;
		case 5:
			ShowContact(con);
			break;
		case 0:
			printf("退出通訊錄...\n");
			break;
		default:
			printf("輸入錯(cuò)誤!請(qǐng)重新輸入!\n");
			break;
		}
	} while (input != 0);
	//銷毀通訊錄;
	DestroyContact(&con);
	return 0;
}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)——基于單鏈表實(shí)現(xiàn)通訊管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)設(shè)計(jì)(單鏈表):通訊錄管理

    python數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)設(shè)計(jì)(單鏈表):通訊錄管理

    目錄 摘要 一、課程設(shè)計(jì)目的及內(nèi)容 創(chuàng)新功能: 二、算法及設(shè)計(jì)過程分析 1.總流程 2.主界面 3.文件處理與生成單鏈表 4.查看所有聯(lián)系人信息 5.查看人數(shù) 6.查找聯(lián)系人(以姓名或號(hào)碼為依據(jù)) 7.對(duì)姓名或號(hào)碼輸入進(jìn)行模糊查找 ?8.添加聯(lián)系人 9.刪除聯(lián)系人? 10.合并兩個(gè)通

    2024年01月16日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)——基于順序表實(shí)現(xiàn)通訊錄

    數(shù)據(jù)結(jié)構(gòu)——基于順序表實(shí)現(xiàn)通訊錄

    1)?少能夠存儲(chǔ)100個(gè)?的通訊信息 2)能夠保存??信息:名字、性別、年齡、電話、地址等 3)增加聯(lián)系?信息 4)刪除指定聯(lián)系? 5)查找制定聯(lián)系? 6)修改指定聯(lián)系? 7)顯?聯(lián)系?信息 我們之前創(chuàng)建的順序表可以實(shí)現(xiàn)連續(xù)存儲(chǔ)數(shù)據(jù)(類型可以為整型、字符等),但無(wú)

    2024年02月05日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)--學(xué)生通訊錄管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)--學(xué)生通訊錄管理系統(tǒng)

    文章目錄 一、問題描述 二、系統(tǒng)功能設(shè)計(jì) 三、各個(gè)代碼部分 四、整體代碼及其運(yùn)行 五、總結(jié) 學(xué)生通訊錄管理系統(tǒng)--C語(yǔ)言實(shí)現(xiàn) 在現(xiàn)實(shí)中,用學(xué)號(hào)和姓名來記錄學(xué)生需要花費(fèi)大量的紙質(zhì)材料,并且出現(xiàn)容易丟失、查找困難等問題。 “學(xué)生通訊管理系統(tǒng)”是為了幫助老師、同

    2024年02月11日
    瀏覽(98)
  • 【(數(shù)據(jù)結(jié)構(gòu))— 單鏈表的實(shí)現(xiàn)】

    【(數(shù)據(jù)結(jié)構(gòu))— 單鏈表的實(shí)現(xiàn)】

    概念: 鏈表是?種 物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)、 非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的 邏輯順序 是通過鏈表中的 指針鏈接 次序?qū)崿F(xiàn)的 。 鏈表的結(jié)構(gòu)跟???廂相似,淡季時(shí)?次的?廂會(huì)相應(yīng)減少,旺季時(shí)?次的?廂會(huì)額外增加?節(jié)。只需要將???的某節(jié)?廂去掉/加上,不會(huì)影響

    2024年02月08日
    瀏覽(102)
  • 【數(shù)據(jù)結(jié)構(gòu)】單鏈表完整代碼實(shí)現(xiàn)

    前置文章:順序表的代碼實(shí)現(xiàn) 每個(gè)結(jié)點(diǎn)除了存放數(shù)據(jù)元素外,還要存儲(chǔ)指向下一個(gè)結(jié)點(diǎn)的指針。 不要求大片連續(xù)空間 改變?nèi)萘糠奖?不可隨機(jī)存取 要耗費(fèi)一定空間存放指針 代碼結(jié)構(gòu): 定義單鏈表結(jié)構(gòu) 初始化單鏈表 單鏈表的取值方法 單鏈表的查找方法 單鏈表的插入方法 單

    2024年02月07日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)之單鏈表及其實(shí)現(xiàn)!

    數(shù)據(jù)結(jié)構(gòu)之單鏈表及其實(shí)現(xiàn)!

    目錄 ?編輯 1.? 順序表的問題及思考 2.鏈表的概念結(jié)構(gòu)和分類 2.1 概念及結(jié)構(gòu) 2.2 分類 3. 單鏈表的實(shí)現(xiàn) 3.1 新節(jié)點(diǎn)的創(chuàng)建 3.2 打印單鏈表 3.3 頭插 3.4 頭刪 3.5 尾插 3.6 尾刪 3.7 查找元素X 3.8 在pos位置修改 3.9 在任意位置之前插入 3.10 在任意位置刪除 3.11 單鏈表的銷毀 4. 完整代碼

    2024年03月12日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】單鏈表的實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】單鏈表的實(shí)現(xiàn)

    ??個(gè)人主頁(yè):平凡的小蘇 ??學(xué)習(xí)格言:別人可以拷貝我的模式,但不能拷貝我不斷往前的激情 ??C語(yǔ)言專欄:https://blog.csdn.net/vhhhbb/category_12174730.html ??數(shù)據(jù)結(jié)構(gòu)專欄:https://blog.csdn.net/vhhhbb/category_12211053.html ? ? ? ? 家人們更新不易,你們的??點(diǎn)贊??和?關(guān)注?真的對(duì)我

    2023年04月09日
    瀏覽(93)
  • 【數(shù)據(jù)結(jié)構(gòu)】-- 單鏈表的實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】-- 單鏈表的實(shí)現(xiàn)

    在前面我們學(xué)習(xí)了順序表,順序表在數(shù)組的基礎(chǔ)上提供了很多現(xiàn)成的方法,方便了我們對(duì)數(shù)據(jù)的管理,但是我們也發(fā)現(xiàn)順序表有著許多不足: 在處理大型的數(shù)據(jù)時(shí),需要頻繁的增容且在中間刪除或插入數(shù)據(jù)時(shí)需要遍歷順序表,這些性質(zhì)導(dǎo)致了順序表的 效率較低 。這時(shí)我們就

    2024年04月27日
    瀏覽(110)
  • 【數(shù)據(jù)結(jié)構(gòu)—單鏈表的實(shí)現(xiàn)】

    【數(shù)據(jù)結(jié)構(gòu)—單鏈表的實(shí)現(xiàn)】

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 目錄 前言 1. 鏈表的概念及結(jié)構(gòu) 2. 單鏈表的實(shí)現(xiàn) 2.1單鏈表頭文件——功能函數(shù)的定義 2.2單鏈表源文件——功能函數(shù)的實(shí)現(xiàn) 2.3 單鏈表源文件——功能的測(cè)試 3.具體的理解操作圖 4. 鏈表的分類 總結(jié) 世上

    2024年02月05日
    瀏覽(93)
  • 【數(shù)據(jù)結(jié)構(gòu)】Golang 實(shí)現(xiàn)單鏈表

    通過指針將一組零散的內(nèi)存塊串聯(lián)在一起 , 把內(nèi)存塊稱為鏈表的“ 結(jié)點(diǎn) ”。 記錄下個(gè)結(jié)點(diǎn)地址的指針叫作 后繼指針 next ,第一個(gè)結(jié)點(diǎn)叫作 頭結(jié)點(diǎn) ,把最后一個(gè)結(jié)點(diǎn)叫作 尾結(jié)點(diǎn) 。 定義單鏈表 在 golang 中可以通過結(jié)構(gòu)體定義單鏈表: 操作單鏈表 使用 golang 實(shí)現(xiàn)單鏈表常用

    2024年02月10日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包