這篇文章主要為大家展示了“java如何實(shí)現(xiàn)通訊錄”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“java如何實(shí)現(xiàn)通訊錄”這篇文章吧。
固始ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
動(dòng)態(tài)實(shí)現(xiàn)實(shí)現(xiàn)通訊錄,就需要使用malloc和realloc等這些函數(shù),首先我們先來介紹一下這些函數(shù)。
(1)void *malloc(unsigned int size);
size是需要分配的字節(jié)數(shù)。
(2)void *calloc(unsigned int num_elements,unsigned int elements_size);
num_elements是分配的元素個(gè)數(shù),elements_size是每個(gè)元素占的字節(jié)數(shù)。
(3)void *realloc(void *p,unsigned int new_size);
new_size是修改后的字節(jié)數(shù),p是原先的內(nèi)存首地址。
由于這些函數(shù)都是在堆(heap)里開辟的空間,使用完后需要釋放,所以就需要free函數(shù)。
(4)void free(void *p);
p是需要釋放的空間的首地址。
前邊3個(gè)函數(shù)都需要free,如果不free就可能造成內(nèi)存泄漏。free釋放完成后需要置為NULL。我們?cè)谑褂弥羔樦氨仨氁幸粋€(gè)原則,那就是使用之前先判斷是否為空、使用之后需要置為NULL。
下來我們就來實(shí)現(xiàn)動(dòng)態(tài)增長(zhǎng)通訊錄。
代碼如下:
#define _CRT_SECURE_NO_WARNINGS 1 #ifndef __CONTACT_H__ #define __CONTACT_H__ #include#include enum OP { EXIT, ADD, DEL, MODIFY, SEARCH, DISPLAY, SORT, CLEAR }; #define NAME_MAX 20 #define SEX_MAX 5 #define TELE_MAX 12 #define ADDR_MAX 25 #define MAX 1000 #define MAX_INIT 2 #define MAX_RISE 2 typedef struct PerInfo { char name[NAME_MAX]; int age; char sex[SEX_MAX]; char tele[TELE_MAX]; char addr[ADDR_MAX]; }PeoInfo; typedef struct Contact { PeoInfo data[MAX]; int size; int i; }Contact,*Pcon; void init_contact(Pcon pcon); void _add_contact(Pcon pcon); void _display_contact(Pcon pcon); void _del_contact(Pcon pcon); void _search_contact(Pcon pcon); void _modify_contact(Pcon pcon); void _sort_contact(Pcon pcon); void _clear_contact(Pcon pcon); #endif //__CONTACT_H__
函數(shù)實(shí)現(xiàn)部分:
#define _CRT_SECURE_NO_WARNINGS 1 #include "Contact.h" // //git //svn // void init_contact(Pcon pcon) { //memset(pcon->data, 0, MAX*sizeof(PeoInfo)); //pcon->size = 0; pcon->data=(PerInfo *)malloc(MAX_INIT*sizeof(PerInfo)); if(pcon->data == NULL) { printf("out of menory"); exit(EXIT_FAILURE); } pcon->size=0; pcon->capacity=MAX_INIT; } void _add_contact(Pcon pcon) { /*if(pcon->size >= MAX) { printf("電話本滿了\n"); return; }*/ if(pcon->size >= pcon->i) { PerInfo *tmp=(PerInfo *)realloc(pcon->data,(pcon->i+MAX_RISE)*sizeof(PerInfo)); //當(dāng)實(shí)際聯(lián)系人個(gè)數(shù)和初始化的容量相等時(shí)用realloc增容 if(tmp == NULL) { printf("out of menory\n"); exit(EXIT_FAILURE); } else { pcon->data=tmp; pcon->capacity+=MAX_RISE; } printf("請(qǐng)輸入名字:>"); scanf("%s",pcon->data[pcon->size].name); printf("請(qǐng)輸入年齡:>"); scanf("%d",&(pcon->data[pcon->size].age)); printf("請(qǐng)輸入性別:>"); scanf("%s",pcon->data[pcon->size].sex); printf("請(qǐng)輸入電話:>"); scanf("%s",pcon->data[pcon->size].tele); printf("請(qǐng)輸入地址:>"); scanf("%s",pcon->data[pcon->size].addr); pcon->size++; printf("添加成功\n"); } void _display_contact(Pcon pcon) { int i = 0; printf("%9s\t%3s\t%4s\t%11s\t%10s\n","name","age","sex","tele","addr"); for(i = 0;isize;i++) { printf("%9s\t%3d\t%4s\t%11s\t%10s\n", pcon->data[i].name, pcon->data[i].age, pcon->data[i].sex, pcon->data[i].tele, pcon->data[i].addr); } } static int find_entry(Pcon pcon, char *name) { int i = 0; for(i = 0;i size; i++) { if(strcmp(pcon->data[i].name,name) == 0) { return i; } } return -1; } void _del_contact(Pcon pcon) { int pos = 0; int index = 0; char name[NAME_MAX]; if(pcon->size == 0) { printf("電話本空\(chéng)n"); return; } printf("請(qǐng)輸入要?jiǎng)h除人的名字:>"); scanf("%s",name); pos = find_entry(pcon, name); if(pos == -1) { printf("找不到要?jiǎng)h除的人\n"); return; } // for(index = pos; index < pcon->size; index++) { pcon->data[index] = pcon->data[index+1]; } pcon->size--; printf("刪除成功\n"); } void _search_contact(Pcon pcon) { char name[NAME_MAX] = {0}; int pos = 0; printf("請(qǐng)輸入要查找人的名字:>"); scanf("%s",name); pos = find_entry(pcon, name); if(pos == -1) { printf("指定聯(lián)系人不存在\n"); return; } else { printf("%9s\t%3s\t%4s\t%11s\t%10s\n","name","age","sex","tele","addr"); printf("%9s\t%3d\t%4s\t%11s\t%10s\n", pcon->data[pos].name, pcon->data[pos].age, pcon->data[pos].sex, pcon->data[pos].tele, pcon->data[pos].addr); } } void _modify_contact(Pcon pcon) { char name[NAME_MAX] = {0}; int pos = 0; printf("請(qǐng)輸入要修改人的名字:>"); scanf("%s",name); pos = find_entry(pcon, name); if(pos == -1) { printf("指定聯(lián)系人不存在\n"); return; } else { printf("請(qǐng)輸入名字:>"); scanf("%s",pcon->data[pos].name); printf("請(qǐng)輸入年齡:>"); scanf("%d",&(pcon->data[pos].age)); printf("請(qǐng)輸入性別:>"); scanf("%s",pcon->data[pos].sex); printf("請(qǐng)輸入電話:>"); scanf("%s",pcon->data[pos].tele); printf("請(qǐng)輸入地址:>"); scanf("%s",pcon->data[pos].addr); } } //volatile void _sort_contact(Pcon pcon) { int i = 0; int j = 0; for(i = 0;i size-1; i++)//控制排序趟數(shù) { for(j = 0; j size-1-i; j++) { if(strcmp(pcon->data[j].name,pcon->data[j+1].name) > 0) { PeoInfo tmp = {0}; tmp = pcon->data[j]; pcon->data[j] = pcon->data[j+1]; pcon->data[j+1] = tmp; } } } } void _clear_contact(Pcon pcon) { pcon->size = 0; }
以上是“java如何實(shí)現(xiàn)通訊錄”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!