上次實現了靜態版本的通訊錄,雖然能夠初步滿足我們的需求,但總歸還是不夠完美,那麼下面我將次通訊錄的靜態版本改為動態版本。。。這就需要用到動態分配~
所謂動態分配,就是需要的時候再分配,這是相對於靜態分配而言的,靜態分配就是一次分配完畢,不管你用多少。而動態分配則是按需分配。
下面我們來具體實現一下唄~
contact.h
#ifndef __contact_h__
#define __contact_h__
#define max 1000
#define name_max 20
#define ***_max 5
#define tele_max 15
#define adder_max 30
#define default_sz 3//預設大小
#define default_inc 2
#include
#include
#include
#include
typedef struct peoinfo//定義個人資訊結構體
peoinfo;
typedef struct contact
contact, *pcontact;
void initcontact(pcontact pcon);//結構體初始化
void addcontact(pcontact pcon);
int searchcontact(pcontact pcon);
void delcontact(pcontact pcon);
void modifycontact(pcontact pcon);
void showcontact(const pcontact pcon);
void sortcontact(pcontact pcon);
void clearcontact(pcontact pcon);
void destroycontact(pcontact pcon);
#endif
contact.c
//函式實現
#define _crt_secure_no_warnings 1
#include"contact.h"
void
initcontact(pcontact pcon)
memset(pcon->data, 0, default_sz*sizeof(peoinfo));
pcon->capacity = default_sz;
}void
checkcapacity(pcontact pcon)
else
pcon->capacity += default_inc;
printf("增容成功\n");
}}void
destroycontact(pcontact pcon)
void
addcontact(pcontact pcon)
static int findentry(pcontact pcon, char name)//static只在當前檔案使用
}return -1;//沒找到
}int
searchcontact(pcontact pcon)//查詢資訊
else
}void
showcontact(pcontact pcon)
}void
delcontact(pcontact pcon)//刪除聯絡人
else
pcon->sz--;
printf("刪除成功\n");
}}void
modifycontact(pcontact pcon)
else
}void
sortcontact(pcontact pcon)}}
printf("%10s\t%5s\t%5s\t%15s\t%20s\n", "name", "***", "age", "tele", "addr");
for (k = 0; k< pcon->sz; k++)
}void
clearcontact(pcontact pcon)
test.c
//函式測試
#define _crt_secure_no_warnings 1
#include"contact.h"
enum
;void menu()
void test()
} while (input);
}int main()
動態通訊錄
動態版通訊錄,是乙個動態增容的過程 自定義標頭檔案部分 ifndef contact h define contact h define max name 20 define max 5 define max tele 12 define max addr 100 define max 1000 d...
動態通訊錄
測試環境 vs2013 ifndef address list h define address list h include include include pragma warning disable 4996 typedef struct a datatype typedef struct a...
動態通訊錄
動態通訊錄 contact.h ifndef contact h define contact h include include include include pragma warning disable 4996 enum option define max name 20 define ma...