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

2021-07-11 20:02:44 字數 3463 閱讀 3503

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

題目描述:

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

提供的方法:

1.新增聯絡人資訊

2.刪除指定聯絡人資訊

3.查詢指定聯絡人資訊

4.修改指定聯絡人資訊

5.顯示所有聯絡人資訊

6.清空聯絡人資訊

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

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

【題目分析】:

要理解動態實現通訊錄首先必須了解動態記憶體開闢的幾個常見的函式,在我們的**實現過程中我們用到了

free,malloc,realloc

這幾個動態記憶體開闢的函式,下面我們就來介紹這幾個函式的功能以及如何使用:

malloc

:開啟msdn我們發現malloc它的函式原型為:

void *malloc(size_t size)

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

char *p=(char *)malloc(10*sizeof(char));

if(p == null)

free:

它的函式原型為:

void free(void *memblock),

free一般和malloc配套使用,用於釋放堆上的空間;

realloc:

它的函式原型為:

void *realloc(void *memblock,size_t size),

realloc函式用於修改乙個原本已經分配的記憶體塊的大小,使用這個函式,你可以使一塊記憶體擴大或者縮小;realloc使記憶體擴大,那仫這塊記憶體的內容依然保留,新增加的內容新增到原先記憶體塊的後面,在實現通訊錄的新增聯絡人功能時,我們設定的初始容量是2,那仫是不是就不可以繼續新增了呢?此時我們的realloc就閃亮登場了,我們知道realloc有乙個功能就是用於擴容這不就解決了增容的問題了嗎?實現如下:

void add(pcon pcon)      //新增聯絡人

else

}scanf("%s",pcon->data[pcon->size].name);

scanf("%d",&(pcon->data[pcon->size].age));

scanf("%s",pcon->data[pcon->size].***);

scanf("%s",pcon->data[pcon->size].tele);

scanf("%s",pcon->data[pcon->size].addr);

pcon->size++;

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

}

realloc的另乙個功能就是用於縮小乙個記憶體塊:此時該記憶體的尾部記憶體便會被拿掉,剩餘部分記憶體原先的內容會依然保留;

如果realloc函式的第乙個引數是null,那仫此時它的操作就和malloc一樣

calloc:

它的函式原型為:

void *calloc(size_t num,size_t size)

,num:所需元素的數量,size:每個元素的位元組數它的作用和malloc類似,calloc將分配好的記憶體初始化為0而malloc並沒有將記憶體初始化為0 ,也就是說

calloc=malloc+memset;

好了理解了這下常見的記憶體分配函式我們就來實現動態的通訊錄吧!

在這裡附上程式源**便於讀者理解:

#define _crt_secure_no_warnings

#include#include#include#define name_maxnum 20

#define ***_maxnum 5

#define tele_maxnum 12

#define addr_maxnum 10

#define max 1000

#define max_init 2

#define max_rise 2

enum op

;typedef struct perinfo

perinfo;

typedef struct contact

contact,*pcon;

void init(pcon pcon)

pcon->size=0;

pcon->capacity=max_init;

}void menu()

void add(pcon pcon) //新增聯絡人

else

}scanf("%s",pcon->data[pcon->size].name);

scanf("%d",&(pcon->data[pcon->size].age));

scanf("%s",pcon->data[pcon->size].***);

scanf("%s",pcon->data[pcon->size].tele);

scanf("%s",pcon->data[pcon->size].addr);

pcon->size++;

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

}int find_position(pcon pcon,char *str) //查詢聯絡人函式

} return -1;

}void del(pcon pcon) //刪除指定聯絡人

; scanf("%s",str);

ret=find_position(pcon,str);

if(ret != -1)

pcon->size--;

} else }

void search(pcon pcon) //查詢指定聯絡人

; scanf("%s",str);

ret=find_position(pcon,str);

if(ret != -1)

else }

void revise(pcon pcon) //修改指定聯絡人

; scanf("%s",str);

ret=find_position(pcon,str);

if(ret != -1) }

else }

void display(pcon pcon) //顯示聯絡人資訊

}void empty(pcon pcon) //清空聯絡人

void sort_name(pcon pcon) //以名字排序聯絡人

} if(flag == 0)

break; }}

void free(pcon pcon)

int main()

} }system("pause");

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...