模擬實現通訊錄 動態

2021-08-01 09:28:25 字數 4092 閱讀 1270

通訊錄-靜態版

題目描述:

實現乙個通訊錄:通訊錄可以用於儲存1000個人的資訊:每個人的資訊包括:姓名,性別,年齡,**,住址

提供的方法:

1.新增聯絡人資訊

2.刪除指定聯絡人資訊

3.查詢指定聯絡人資訊

4.修改指定聯絡人資訊

5.顯示所有聯絡人資訊

6.清空聯絡人資訊

7.以名字排序所有聯絡人

模擬實現通訊錄-動態的方法:

@(題目分析)[比較重要的函式]

要理解動態實現通訊錄首先必須了解動態記憶體開闢的幾個常見的函式,在我們的**實現過程中我們用到了 free,malloc,realloc 這幾個動態記憶體開闢的函式,下面我們就來介紹這幾個函式的功能以及如何使用:

malloc:開啟msdn我們發現malloc它的函式原型為:void malloc(size_t size) ,size它是你要分配的位元組數,而malloc它的返回值型別是void ,所以一般情況下我們都把分配好的空間強制型別轉化成你要使用的型別,用malloc分配的空間要判斷是否為空的情況,下面提供一種判斷空的方法:

plist->list = (pers *)malloc(init_max*sizeof(pers));

if (plist->list == null)

free: 它的函式原型為:void free(void *memblock),free一般和malloc配套使用,用於釋放堆上的空間;

realloc: 它的函式原型為:void *realloc(void *memblock,size_t size),realloc函式用於修改乙個原本已經分配的記憶體塊的大小,使用這個函式,你可以使一塊記憶體擴大或者縮小;realloc使記憶體擴大,這塊記憶體的內容依然保留,新增加的內容新增到原先記憶體塊的後面,

幫助**原來記憶體,原來的指標不用free。在實現通訊錄的新增聯絡人功能時,我們設定的初始容量是2,當容量滿時,使用realloc就可以繼續新增了。使用realloc需要使用乙個原來結構體指標來接收。

pers *tmp = (pers*)realloc(plist->list, (plist->capacity + rise_max)*sizeof(pers));
具體使用realloc函式增容**如下:

if (plist->sz >= plist->capacity)

else

realloc的另乙個功能就是用於縮小乙個記憶體塊:此時該記憶體的尾部記憶體便會被拿掉,剩餘部分記憶體原先的內容會依然保留; 如果realloc函式的第乙個引數是null,那仫此時它的操作就和malloc一樣

還有乙個類似reallocmalloc的函式,是calloc, calloc: 它的函式原型為:void *calloc(size_t num,size_t size)

功 能: 在記憶體的動態儲存區中分配n個長度為size的連續空間,函式返回乙個指向分配起始位址的指標;如果分配不成功,返回null。calloc在動態分配完記憶體後,自動初始化該記憶體空間為零,也就是說calloc=malloc+memset ;

calloc用法如下:

int main()

pers;

typedef

struct list//通訊錄的資訊

list,*p;//是struct pers*的重新命名

void menu(void);

void init_addres_list(p plist);//(pers * plist)

void address_list_add(p plist);

void address_list_dele(p plist);

void address_list_search(p plist);

void address_list_revise(p plist);

void address_list_show(p plist);

void address_list_sort(p plist);

void address_list_empty(p plist);

void address_list_exit(p list);

#endif

分支函式:

#include"addres_list.h"

void menu(void)

//初始化通訊錄

void init_addres_list(p plist)

plist->capacity = init_max;

plist->sz = 0;

}//新增通訊錄聯絡人

void address_list_add(p plist)

else

}printf("請輸入名字:");

scanf("%s", plist->list->name);

printf("請輸入性別:");

scanf("%s", plist->list->***);

scanf("%s", plist->list->addres);

printf("請輸入年齡:");

scanf("%s", &(plist->list->age));

scanf("%s", plist->list->tele);

plist->sz++;

printf("新增成功!\n");

}//查詢聯絡人

int search(p plist,char *name)

if (i >= plist->sz)

}//刪除指定的聯絡人

void address_list_dele(p plist)

; printf("請輸入你要刪除的人名:");

scanf("%s", name);

int ret = search(plist, name);

if (ret != -1)

plist->sz--;

}else

}//查詢指定聯絡人

void address_list_search(p plist)

; printf("請輸入你要查詢的人名:");

scanf("%s", name);

int ret = search(plist, name);

if (ret != -1)

else

}//修改聯絡人資訊

void address_list_revise(p plist)

; scanf("%s", name);

int ret = search(plist, name);

if (ret != -1)

}else

}//顯示通訊錄

void address_list_show(p plist)

}//通過名字對通訊錄排序

void address_list_sort(p plist)

}if (flag == 0)//因為如果flag==0,說明裡面的判斷並未進去,說明已經是好的排序

}}//清空通訊錄

void address_list_empty(p plist)

//void address_list_exit(p plist)

主函式:

#include"addres_list.h"

enum list

;int main()

} while (input);

return

0;}

模擬實現通訊錄 動態的方法

模擬實現通訊錄 靜態的方法 題目描述 實現乙個通訊錄 通訊錄可以用於儲存1000個人的資訊 每個人的資訊包括 姓名,性別,年齡,住址 提供的方法 1.新增聯絡人資訊 2.刪除指定聯絡人資訊 3.查詢指定聯絡人資訊 4.修改指定聯絡人資訊 5.顯示所有聯絡人資訊 6.清空聯絡人資訊 7.以名字排序所有...

動態實現通訊錄

動態實現,借用之前以及寫好的通訊錄 在結構體內新增柔性陣列 主要是柔性陣列的使用 int i 0 list p list malloc sizeof list 100 sizeof int p i 100 for i 0 i 100 i include include include include...

動態通訊錄的實現

contact.h ifndef contact h define contact h enum option include include include include define name max 20 define max 5 define age max 3 define tel ma...