实现了通讯录的录入信息、保存信息、插入、删除、排序、查找、单个显示等功能。。
完整的代码如下:
#include <stdio.h>
#include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针//
#include <string.h>
#include <stdlib.h> //标准库函数//
#define NULL 0
#define LEN sizeof(struct address_list) //计算字节//
int n;
struct address_list
{
char name[30]; //名字
char work[30]; //职业
char handset[30]; //手机
char email[30]; //电子邮件
char address[30]; //通讯地址
struct address_list *next;
};
struct address_list *shifang(struct address_list *head); // 释放内存函数声明
//创建函数,不带头结点的链表
struct address_list *creat(void)
{
struct address_list *head,*p1,*p2;
char name[20];
n=0;
p1=(struct address_list *)malloc(LEN);
p2=p1; //强制内存转换
printf("请输入通讯录的内容!\n姓名输入为0时表示创建完毕!\n");
printf("请输入姓名:");
gets(name);
if(strcmp(name,"0")!=0)
{
strcpy(p1->name,name);
printf("请输入职业:"); gets(p1->work);
printf("请输入手机:"); gets(p1->handset);
printf("请输入电子邮件:"); gets(p1->email);
printf("请输入通讯地址:"); gets(p1->address);
head=NULL;
while(1)
{
n=n+1; //记录通讯录人数个数
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
printf("请输入姓名:");
gets(name);
if(strcmp(name,"0")==0)
{
break;
}
else
{
p1=(struct address_list *)malloc(LEN);
strcpy(p1->name,name);
printf("请输入职业:"); gets(p1->work);
printf("请输入手机:"); gets(p1->handset);
printf("请输入电子邮件:"); gets(p1->email);
printf("请输入通讯地址:"); gets(p1->address);
}
}
p2->next=NULL;
return head;
}
else
return 0;
}
//输出函数
void print(struct address_list *head)
{
struct address_list *p;
if(head!=NULL)
{
p=head;
printf("本通讯录现在共有%d人:\n",n);
printf("---姓名-------职业--------手机-------Email-------通讯地址\n");
printf("==================================\n");
do
{
printf("== %s",p->name); printf(" ");
printf("%s",p->work); printf(" ");
printf("%s",p->handset); printf(" ");
printf("%s",p->email); printf(" ");
printf("%s",p->address); printf(" \n");
p=p->next;
}while(p!=NULL);
printf("======================