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

【C語言】實現(xiàn)動態(tài)版通訊錄

這篇具有很好參考價值的文章主要介紹了【C語言】實現(xiàn)動態(tài)版通訊錄。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【C語言】實現(xiàn)動態(tài)版通訊錄

??內(nèi)容專欄:【C語言】進階部分

??本文概括: 結(jié)合自定義類型、動態(tài)內(nèi)存管理知識,對靜態(tài)版本的通訊錄進行優(yōu)化。

??本文作者:花 碟

??發(fā)布時間:2023.4.2

?

目錄

前言:

一、靜態(tài)版本代碼實現(xiàn):

二、動態(tài)通訊錄?

三、代碼整理?


前言:

前面我們學過了結(jié)構(gòu)體、枚舉等自定義類型的學習,寫了一個靜態(tài)版本的通訊錄【傳送門】點擊進入靜態(tài)版通訊錄界面,我們知道,我們寫的通訊錄其實本質(zhì)用的是一個結(jié)構(gòu)體數(shù)組,數(shù)組的大小是固定的,這時我們就可以使用動態(tài)內(nèi)存管理相關知識,對內(nèi)存空間進行一個合理的分配,而不至于一下開辟一個較大的數(shù)組空間,用的時候卻很少,造成了內(nèi)存浪費的問題等。如果在內(nèi)存不夠時,也可以進行申請一定的空間來存儲數(shù)據(jù)。

一、靜態(tài)版本代碼實現(xiàn):

這里我就直接將完整代碼放過來,具體分析,可以點擊傳送門鏈接,看實現(xiàn)思路哦~~

test.c文件代碼(測試通訊錄的相關功能)

#include "contact.h"
void Menu()
{
	printf("********************************\n");
	printf("******   0.exit 1.add     ******\n");
	printf("******  2.delete  3.modify******\n");
	printf("******  4.search 5.show    *****\n");
	printf("******      6.sort         *****\n");
	printf("********************************\n");

}

enum Option
{
	EXIT,
	ADD,
	DELETE,
	MODIFY,
	SEARCH,
	SHOW,
	SORT
};
int main()
{
	Contact con;//創(chuàng)建一個名為con的結(jié)構(gòu)體變量
	InitContact(&con);
	int input = 0;
	do
	{
		Menu();
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&con);
			break;
		case DELETE:
			DeleteContact(&con);
			break;
		case MODIFY:
			ModifyContact(&con);
			break;
		case SEARCH:
			SearchContact(&con);
			break;
		case SHOW:
			ShowContact(&con);
			break;
		case SORT:
			SortContact(&con);
			break;
		case EXIT:
			printf("退出通訊錄\n");
			break;
		default:
			printf("輸入有誤,請重新輸入\n");
			break;
		}
	} while (input);

}

contact.h文件(用來聲明函數(shù)、結(jié)構(gòu)體變量)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 15
#define MAX_ADDR 20
#define MAX 20 

//創(chuàng)建個人信息
typedef struct PeoInfo
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}PeoInfo;

//靜態(tài)版本的通訊錄
//聲明一個通訊錄結(jié)構(gòu)體
typedef struct Contact
{
	PeoInfo data[MAX];
	int sz;
}Contact;

//初始化結(jié)構(gòu)體
void InitContact(Contact* pc);
//添加聯(lián)系人
void AddContact(Contact* pc);
//顯示通訊錄
void ShowContact(const Contact* pc);
//刪除指定聯(lián)系人
void DeleteContact(Contact* pc);
//查找指定聯(lián)系人
void SearchContact(const Contact* pc);
//修改指定聯(lián)系人
void ModifyContact(Contact* pc);
//排序通訊錄
void SortContact(Contact* pc);

contact.c文件(用來具體實現(xiàn)函數(shù)內(nèi)部的功能)

#define  _CRT_SECURE_NO_WARNINGS 
#include"contact.h"

//靜態(tài)版本
//初始化通訊錄
void InitContact(Contact* pc)
{
	pc->sz = 0;
	memset(pc->data, 0, sizeof(pc->data));

}
 
//添加聯(lián)系人
void AddContact(Contact* pc)
{
	//CheckContact(pc);
	if (pc->data == pc->sz)
	{
		printf("通訊錄已滿,無法添加聯(lián)系人\n");
		return;
	}
	printf("請輸入姓名:>");
	scanf("%s", pc->data[pc->sz].name);
	printf("請輸入年齡:>");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("請輸入性別:>");
	scanf("%s", pc->data[pc->sz].sex);
	printf("請輸入電話:>");
	scanf("%s", pc->data[pc->sz].tele);
	printf("請輸入地址:>");
	scanf("%s", pc->data[pc->sz].addr);
	printf("添加成功\n");
	pc->sz++;
}
//顯示通訊錄
void ShowContact(const Contact* pc)
{
	printf("%-15s %-5s %-5s %-15s %-20s\n","姓名", "年齡", "性別", "電話", "地址");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-15s %-5d %-5s %-15s %-20s\n", pc->data[i].name, pc->data[i].age,
			pc->data[i].sex,pc->data[i].tele, pc->data[i].addr);
	}
}

//查找姓名
static int Findname(Contact* pc, char name[])
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (0 == strcmp(pc->data[i].name, name))
		{
			return i;//找到返回i
		}
	}
	return -1;//沒找到返回-1
}
//刪除指定聯(lián)系人
void DeleteContact(Contact* pc)
{
	if (0 == pc->sz)
	{
		printf("通訊錄為空,無法刪除聯(lián)系人\n");
			return;
	}
	printf("請輸入姓名:>");
	char name[MAX_NAME] = { 0 };
	scanf("%s",name);
	//查找姓名
	int pos = Findname(pc,name);

	//刪除
	if (-1 == pos)
	{
		printf("聯(lián)系人不存在\n");
		return;
	}
	int i = 0;
	for (i = pos; i < pc->sz; i++)
	{
		pc->data[pos] = pc->data[pos + 1];
	}
	printf("刪除成功\n");
	pc->sz--;
}
//查找指定聯(lián)系人
void SearchContact(const Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入姓名:>");
	scanf("%s", name);
	int pos = Findname(pc, name);
	if (-1 == pos)
	{
		printf("聯(lián)系人不存在\n");
		return;
	}
	printf("%-15s %-5s %-5s %-15s %-20s\n", "姓名", "年齡", "性別", "電話", "地址");
	printf("%-15s %-5d %-5s %-15s %-20s\n", pc->data[pos].name, pc->data[pos].age,
		pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
}
//修改指定聯(lián)系人
void ModifyContact(Contact* pc)
{
	printf("請輸入要修改人的姓名:>");
	char name[MAX_NAME] = { 0 };
	scanf("%s", name);
	int pos = Findname(pc, name);
	if (-1 == pos)
	{
		printf("聯(lián)系人不存在\n");
		return;
	}
	printf("請輸入姓名:>");
	scanf("%s", pc->data[pos].name);
	printf("請輸入年齡:>");
	scanf("%d", &(pc->data[pos].age));
	printf("請輸入性別:>");
	scanf("%s", pc->data[pos].sex);
	printf("請輸入電話:>");
	scanf("%s", pc->data[pos].tele);
	printf("請輸入地址:>");
	scanf("%s", pc->data[pos].addr);
	printf("修改成功\n");
}
//通過名字來排序
int cmp_by_name(const void* e1,const void* e2)
{
	return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}
//排序通訊錄
void SortContact(Contact* pc)
{
	qsort(pc->data, pc->sz,sizeof(PeoInfo),cmp_by_name);

	printf("排序成功\n");
}

二、動態(tài)通訊錄?

我們將動態(tài)的版本的通訊錄修改為:默認能夠存放3個人的信息,不夠的話,每次增加2個人的信息

在contact.h文件中,我們宏定義 DEFAULT_SZ 表示?默認3個人的信息

INC_SZ 表示?容量不夠時,每次增加2個人的信息

#define DEFAULT_SZ 3
#define INC_SZ 2

在contact.h文件中。聲明結(jié)構(gòu)體部分:我們要讓動態(tài)申請的內(nèi)存空間可大可小,一定需要malloc函數(shù)來申請空間,所以我們應該將結(jié)構(gòu)體數(shù)組修改為一個結(jié)構(gòu)體指針data,指針類型是PeoInfo*,data指向了存放數(shù)據(jù)的空間,定義sz變量用來記錄當前通訊錄中的信息個數(shù),capacity變量用來記錄通訊錄的容量。

//動態(tài)版本的通訊錄
typedef struct Contact
{
	PeoInfo* data;//data指向了存放數(shù)據(jù)的空間
	int sz;//記錄通訊錄中的有效信息個數(shù)
	int capacity;//記錄通訊錄的容量
}Contact;

在contact.c文件中,初始化通訊錄函數(shù)里面的部分就需要大改了,我們需要首先開辟默認3個元素大小的空間,元素類型是PeoInfo* ,即malloc的參數(shù)為DEFAULT_SZ*sizeof(PeoInfo),

我們拿一個ptr的結(jié)構(gòu)體指針接收,如果ptr為NULL,就打印報錯的信息(strerror需要引用<string.h>頭文件,errno需要引用<errno.h>),然后返回空,不為NULL的話,就將ptr賦給data,元素的起始地址就為data,sz初始化為0,capacity容量初始化為默認值。

//靜態(tài)版本
初始化通訊錄
//void InitContact(Contact* pc)
//{
//	pc->sz = 0;
//	memset(pc->data, 0, sizeof(pc->data));
//
//}

//動態(tài)版本
//初始化通訊錄
void InitContact(Contact* pc)
{
	PeoInfo* ptr= (PeoInfo* )malloc(DEFAULT_SZ * sizeof(PeoInfo));
	if (ptr == NULL)
	{
		printf("通訊錄初始化失敗::%s", strerror(errno));
		return;
	}
	else
	{
		pc->data = ptr;
		pc->sz = 0;
		pc->capacity = DEFAULT_SZ;
	}	
}
在contact.c文件中,添加聯(lián)系人函數(shù)里面我們也需要進行大幅度改動。pc->data這里就不是靜態(tài)版本的數(shù)組了,我們直接將這個if語句給屏蔽掉,直接寫一個CheckContact函數(shù)用來判斷通訊錄是否滿了?是否需要擴容?
//添加聯(lián)系人
void AddContact(Contact* pc)
{
	CheckContact(pc);
	/*if (pc->data == pc->sz)
	{
		printf("通訊錄已滿,無法添加聯(lián)系人\n");
		return;
	}*/
	printf("請輸入姓名:>");
	scanf("%s", pc->data[pc->sz].name);
	printf("請輸入年齡:>");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("請輸入性別:>");
	scanf("%s", pc->data[pc->sz].sex);
	printf("請輸入電話:>");
	scanf("%s", pc->data[pc->sz].tele);
	printf("請輸入地址:>");
	scanf("%s", pc->data[pc->sz].addr);
	printf("添加成功\n");
	pc->sz++;
}

CheckContact函數(shù)

如果pc->sz 等于 pc->capacity ,即通訊錄當前有效個人信息等于目前的容量時,說明通訊錄已經(jīng)滿了,就需要擴容,此時就可以用realloc函數(shù)來擴容,pc->data表示通訊錄的起始地址,新的大小為新的元素個數(shù)*每個元素的大小。返回值暫存在ptr指針之中,如果ptr為NULL,則打印報錯的信息,不為NULL,則將ptr賦值給pc->data,容量+2,為了顯示擴容效果,我們順便打印當前容量值。

//檢測通訊錄是否滿了
void CheckContact(Contact* pc)
{
	//如果通訊錄滿了 就增容
	if (pc->sz == pc->capacity)
	{
		PeoInfo* ptr= (PeoInfo*)realloc(pc->data,(pc->capacity+ INC_SZ)*sizeof(PeoInfo));
		if (ptr == NULL)
		{
			printf("CheckContact::%s", strerror(errno));
			return;
		}
		else
		{
			pc->data = ptr;
			pc->capacity += INC_SZ;
			printf("增容成功,當前容量為:%d\n", pc->capacity);
		}
	}
	//沒滿直接跳過以上語句
}

最后,我們退出通訊錄的時候,也可以將自己申請的內(nèi)存空間給釋放掉。我們在contact.h文件中聲明一個DestroyContact函數(shù)表示銷毀通訊錄。

在contact.c文件下面接著編寫代碼:

//銷毀通訊錄
void DestroyContact(Contact* pc)
{
	free(pc->data);
	pc->data = NULL;
    pc->sz = 0;
    pc->capacity = 0;
	printf("釋放成功...\n");
}

?代碼測試:

為了測試方便,作者直接將信息用數(shù)字測試,當我們輸入三個有效信息之后,此時有效空間等于當前的通訊錄容量了,當我們再次選擇1,繼續(xù)添加聯(lián)系人,就“顯示增容成功,當前容量為5”。

【C語言】實現(xiàn)動態(tài)版通訊錄

三、代碼整理?

將代碼整理在下面,需要的自取吶~

test.c文件

#include "contact.h"
void Menu()
{
	printf("********************************\n");
	printf("******   0.exit 1.add     ******\n");
	printf("******  2.delete  3.modify******\n");
	printf("******  4.search 5.show    *****\n");
	printf("******      6.sort         *****\n");
	printf("********************************\n");

}

enum Option
{
	EXIT,
	ADD,
	DELETE,
	MODIFY,
	SEARCH,
	SHOW,
	SORT
};
int main()
{
	Contact con;//創(chuàng)建一個名為con的結(jié)構(gòu)體變量
	InitContact(&con);
	int input = 0;
	do
	{
		Menu();
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&con);
			break;
		case DELETE:
			DeleteContact(&con);
			break;
		case MODIFY:
			ModifyContact(&con);
			break;
		case SEARCH:
			SearchContact(&con);
			break;
		case SHOW:
			ShowContact(&con);
			break;
		case SORT:
			SortContact(&con);
			break;
		case EXIT:
			DestroyContact(&con);
			printf("退出通訊錄\n");
			break;
		default:
			printf("輸入有誤,請重新輸入\n");
			break;
		}
	} while (input);
}

contact.h文件

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 15
#define MAX_ADDR 20
//#define MAX 20 
#define DEFAULT_SZ 3
#define INC_SZ 2
//創(chuàng)建個人信息
typedef struct PeoInfo
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}PeoInfo;

靜態(tài)版本的通訊錄
聲明一個通訊錄結(jié)構(gòu)體
//typedef struct Contact
//{
//	PeoInfo data[MAX];
//	int sz;
//}Contact;

//動態(tài)版本的通訊錄
typedef struct Contact
{
	PeoInfo* data;//data指向了存放數(shù)據(jù)的空間
	int sz;//記錄通訊錄中的有效信息個數(shù)
	int capacity;//記錄通訊錄的容量
}Contact;

//初始化結(jié)構(gòu)體
void InitContact(Contact* pc);
//添加聯(lián)系人
void AddContact(Contact* pc);
//顯示通訊錄
void ShowContact(const Contact* pc);
//刪除指定聯(lián)系人
void DeleteContact(Contact* pc);
//查找指定聯(lián)系人
void SearchContact(const Contact* pc);
//修改指定聯(lián)系人
void ModifyContact(Contact* pc);
//排序通訊錄
void SortContact(Contact* pc);
//銷毀通訊錄
void DestroyContact(Contact* pc);

contact.c文件

#include"contact.h"
//靜態(tài)版本
初始化通訊錄
//void InitContact(Contact* pc)
//{
//	pc->sz = 0;
//	memset(pc->data, 0, sizeof(pc->data));
//
//}

//動態(tài)版本
//初始化通訊錄
void InitContact(Contact* pc)
{
	PeoInfo* ptr= (PeoInfo* )malloc(DEFAULT_SZ * sizeof(PeoInfo));
	if (ptr == NULL)
	{
		printf("通訊錄初始化失敗::%s", strerror(errno));
		return;
	}
	else
	{
		pc->data = ptr;
		pc->sz = 0;
		pc->capacity = DEFAULT_SZ;
	}	
}

//檢測通訊錄是否滿了
void CheckContact(Contact* pc)
{
	//如果通訊錄滿了 就增容
	if (pc->sz == pc->capacity)
	{
		PeoInfo* ptr= (PeoInfo*)realloc(pc->data,(pc->capacity+ INC_SZ)*sizeof(PeoInfo));
		if (ptr == NULL)
		{
			printf("CheckContact::%s", strerror(errno));
			return;
		}
		else
		{
			pc->data = ptr;
			pc->capacity += INC_SZ;
			printf("增容成功,當前容量為:%d\n", pc->capacity);
		}
	}
	//沒滿直接跳過以上語句
}
//添加聯(lián)系人
void AddContact(Contact* pc)
{
	CheckContact(pc);
	/*if (pc->data == pc->sz)
	{
		printf("通訊錄已滿,無法添加聯(lián)系人\n");
		return;
	}*/
	printf("請輸入姓名:>");
	scanf("%s", pc->data[pc->sz].name);
	printf("請輸入年齡:>");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("請輸入性別:>");
	scanf("%s", pc->data[pc->sz].sex);
	printf("請輸入電話:>");
	scanf("%s", pc->data[pc->sz].tele);
	printf("請輸入地址:>");
	scanf("%s", pc->data[pc->sz].addr);
	printf("添加成功\n");
	pc->sz++;
}
//顯示通訊錄
void ShowContact(const Contact* pc)
{
	printf("%-15s %-5s %-5s %-15s %-20s\n","姓名", "年齡", "性別", "電話", "地址");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-15s %-5d %-5s %-15s %-20s\n", pc->data[i].name, pc->data[i].age,
			pc->data[i].sex,pc->data[i].tele, pc->data[i].addr);
	}
}

//查找姓名=
static int Findname(Contact* pc, char name[])
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (0 == strcmp(pc->data[i].name, name))
		{
			return i;//找到返回i
		}
	}
	return -1;//沒找到返回-1
}
//刪除指定聯(lián)系人
void DeleteContact(Contact* pc)
{
	if (0 == pc->sz)
	{
		printf("通訊錄為空,無法刪除聯(lián)系人\n");
			return;
	}
	printf("請輸入姓名:>");
	char name[MAX_NAME] = { 0 };
	scanf("%s",name);
	//查找姓名
	int pos = Findname(pc,name);

	//刪除
	if (-1 == pos)
	{
		printf("聯(lián)系人不存在\n");
		return;
	}
	int i = 0;
	for (i = pos; i < pc->sz; i++)
	{
		pc->data[pos] = pc->data[pos + 1];
	}
	printf("刪除成功\n");
	pc->sz--;
}
//查找指定聯(lián)系人
void SearchContact(const Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入姓名:>");
	scanf("%s", name);
	int pos = Findname(pc, name);
	if (-1 == pos)
	{
		printf("聯(lián)系人不存在\n");
		return;
	}
	printf("%-15s %-5s %-5s %-15s %-20s\n", "姓名", "年齡", "性別", "電話", "地址");
	printf("%-15s %-5d %-5s %-15s %-20s\n", pc->data[pos].name, pc->data[pos].age,
		pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
}
//修改指定聯(lián)系人
void ModifyContact(Contact* pc)
{
	printf("請輸入要修改人的姓名:>");
	char name[MAX_NAME] = { 0 };
	scanf("%s", name);
	int pos = Findname(pc, name);
	if (-1 == pos)
	{
		printf("聯(lián)系人不存在\n");
		return;
	}
	printf("請輸入姓名:>");
	scanf("%s", pc->data[pos].name);
	printf("請輸入年齡:>");
	scanf("%d", &(pc->data[pos].age));
	printf("請輸入性別:>");
	scanf("%s", pc->data[pos].sex);
	printf("請輸入電話:>");
	scanf("%s", pc->data[pos].tele);
	printf("請輸入地址:>");
	scanf("%s", pc->data[pos].addr);
	printf("修改成功\n");
}
//通過名字來排序
int cmp_by_name(const void* e1,const void* e2)
{
	return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}
//排序通訊錄
void SortContact(Contact* pc)
{
	qsort(pc->data, pc->sz,sizeof(PeoInfo),cmp_by_name);

	printf("排序成功\n");
}
//銷毀通訊錄
void DestroyContact(Contact* pc)
{
	free(pc->data);
	pc->data = NULL;
	printf("釋放成功...\n");
}

好了,動態(tài)版本的通訊錄就到這里,感謝各位讀者的支持~,如編寫有誤,還請聯(lián)系我???文章來源地址http://www.zghlxwxcb.cn/news/detail-433029.html

到了這里,關于【C語言】實現(xiàn)動態(tài)版通訊錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • C語言實現(xiàn)通訊錄--動態(tài)版

    C語言實現(xiàn)通訊錄--動態(tài)版

    實現(xiàn)一個通訊錄,聯(lián)系人的數(shù)量可多可少 1.在靜態(tài)版本的基礎上改用動態(tài)的方法: (1)默認能夠存放三個人的信息 (2)不夠的話,每次增加兩個人的信息 2.其他功能不變 建立三個文件: test.c 用于測試通訊錄的相關功能 contsct.c 通訊錄的實現(xiàn)模塊(用函數(shù)實現(xiàn)功能) conta

    2024年02月15日
    瀏覽(99)
  • C語言動態(tài)內(nèi)存練習:【通訊錄(動態(tài)內(nèi)存版本)實現(xiàn)】

    前面我們寫了一個靜態(tài)數(shù)組版本的通訊錄,再結(jié)合剛學習的動態(tài)內(nèi)存管理的知識,我們現(xiàn)在來實現(xiàn)一個動態(tài)內(nèi)存版本的通訊錄。 動態(tài)內(nèi)存版本的通訊錄,主要還是為了解決靜態(tài)數(shù)組版本的通訊錄空間太大導致的內(nèi)存浪費和空間太小不夠存放的問題。 擴容策略: 為通訊錄設置

    2023年04月13日
    瀏覽(35)
  • C語言之通訊錄的實現(xiàn)(靜態(tài)版,動態(tài)版,文件版)

    C語言之通訊錄的實現(xiàn)(靜態(tài)版,動態(tài)版,文件版)

    個人主頁(找往期文章包括但不限于本期文章中不懂的知識點):?我要學編程(?_?)-CSDN博客 目錄 靜態(tài)通訊錄的實現(xiàn)邏輯? test.c:通訊錄的邏輯實現(xiàn) Contact.h:函數(shù)的聲明與頭文件的包含 Contact.c:函數(shù)的實現(xiàn)? 通訊錄源碼:? test.c: Contact.c: Contect.h: 動態(tài)版通訊錄? test.c: Co

    2024年04月13日
    瀏覽(57)
  • 【進階C語言】動態(tài)版通訊錄的實現(xiàn)(詳細講解+全部碼源)

    【進階C語言】動態(tài)版通訊錄的實現(xiàn)(詳細講解+全部碼源)

    前言 ??作者簡介: 熱愛跑步的恒川 ,致力于 C/C++、Java、Python 等多編程語言,熱愛跑步,喜愛音樂的一位博主。 ??本文收錄于 C語言進階 系列,本專欄主要內(nèi)容為數(shù)據(jù)的存儲、指針的進階、字符串和內(nèi)存函數(shù)的介紹、自定義類型結(jié)構(gòu)、動態(tài)內(nèi)存管理、文件操作等,持續(xù)更

    2024年02月01日
    瀏覽(22)
  • 動態(tài)內(nèi)存管理函數(shù)介紹及C語言實現(xiàn)通訊錄管理系統(tǒng)2.0版(動態(tài)增長版本)

    動態(tài)內(nèi)存管理函數(shù)介紹及C語言實現(xiàn)通訊錄管理系統(tǒng)2.0版(動態(tài)增長版本)

    之前向大家介紹了C語言實現(xiàn)通訊錄管理系統(tǒng)1.0版本,但該版本有明顯的不足之處,比如:一開始就開辟了1000個date數(shù)組,如果聯(lián)系人很少,那么就會造成嚴重的內(nèi)存浪費,或者聯(lián)系人超過了1000人,那么原數(shù)組就放不下了,所以今天我們考慮使用動態(tài)內(nèi)存管理的辦法來實現(xiàn)一個

    2023年04月08日
    瀏覽(21)
  • 【C語言】動態(tài)通訊錄 -- 詳解

    【C語言】動態(tài)通訊錄 -- 詳解

    前面詳細介紹了靜態(tài)版通訊錄【C語言】靜態(tài)通訊錄 -- 詳解_炫酷的伊莉娜的博客-CSDN博客,但是靜態(tài)版通訊錄的空間是無法被改變的,而且空間利用率也不高。為了解決靜態(tài)通訊錄這一缺點,這時就要有一個能夠隨著存入聯(lián)系人數(shù)量的增加而增大空間的通訊錄。接下來我們將

    2024年02月12日
    瀏覽(19)
  • 【C語言】動態(tài)通訊錄(超詳細)

    【C語言】動態(tài)通訊錄(超詳細)

    通訊錄是一個可以很好鍛煉我們對結(jié)構(gòu)體的使用,加深對結(jié)構(gòu)體的理解,在為以后學習數(shù)據(jù)結(jié)構(gòu)打下結(jié)實的基礎 這里我們想設計一個有 添加聯(lián)系人,刪除聯(lián)系人,查找聯(lián)系人,修改聯(lián)系人,展示聯(lián)系人,排序 這幾種功能的通訊錄 注意:我們按照三個區(qū)域劃分 上圖所示進行

    2024年02月08日
    瀏覽(23)
  • C語言實踐——通訊錄(2)(動態(tài)版)

    首先感謝上一篇博客的大佬們的點贊,非常感謝?。。?目錄 前言 ?一、需要添加的功能 1. 初始化——動態(tài)內(nèi)存開辟 2.添加聯(lián)系人——通訊錄擴容 3.退出通訊錄——通訊錄銷毀 二、具體操作 1.鋪墊 2.修改初始化函數(shù) 3.修改添加函數(shù)? 4.退出通訊錄,新增銷毀函數(shù) 上一篇文章我

    2023年04月08日
    瀏覽(32)
  • 【C語言實戰(zhàn)項目】通訊錄(動態(tài)增容版)

    【C語言實戰(zhàn)項目】通訊錄(動態(tài)增容版)

    ?? 個人主頁 :修修修也 ?? 所屬專欄 :數(shù)據(jù)結(jié)構(gòu) ?? 操作環(huán)境 : Visual Studio 2022 目錄 一.動態(tài)增容版簡介 二.動態(tài)增容版逐步實現(xiàn)詳解 1.創(chuàng)建通訊錄 2. 初始化通訊錄 3.增加聯(lián)系人 4.通訊錄增容 5.銷毀通訊錄 三.動態(tài)增容版代碼整合 contact.c test.c contact.h 上篇博客我們一起用C語言

    2024年02月11日
    瀏覽(20)
  • 動態(tài)通訊錄——C語言【詳解+全部碼源】

    動態(tài)通訊錄——C語言【詳解+全部碼源】

    作者簡介: 辭七七,目前大一,正在學習C/C++,Java,Python等 作者主頁: 七七的個人主頁 文章收錄專欄: 進階C語言,本專欄主要講解數(shù)據(jù)存儲,進階指針,動態(tài)內(nèi)存管理,文件操作,程序環(huán)境和預處理等 歡迎大家點贊 ?? 收藏 ? 加關注哦!???? 我們之前以及寫過靜態(tài)版

    2023年04月21日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包