#include <stdio.h>
#include <stdlib.h>
#include "LinkList.h"
#include <string.h>
#include "error.h"
extern int id_count;
//创建链表
LinkList *Create_List()
{
LinkList *head = (LinkList *)malloc(sizeof(LinkList)/sizeof(char));
if (head == NULL)
{
errno = MALLOC_ERROR;
return NULL;
}
head -> next = NULL;
return head;
}
//尾插法
int Insert_Last(LinkList *h,LinkData data)
{
if (h == NULL)
{
errno = ERROR;
return FALSE;
}
LinkList *tmp = h;
LinkList * node = (LinkList *)malloc(sizeof(LinkList)/sizeof(char));
if (node == NULL)
{
errno = MALLOC_ERROR;
return FALSE;
}
node -> data = data;
node -> next = NULL;
while (tmp -> next)
{
tmp = tmp -> next;
}
tmp -> next = node;
id_count++;
return TRUE;
}
// 删除指定姓名的节点
int Delete_Data(LinkList *h, char *name)
{
if(h == NULL || name == NULL)
{
errno = ERROR;
return FALSE;
}
int count = 0;
LinkList *tmp = h;
LinkList *p = NULL;
while (tmp -> next)
{
if (strcmp(tmp -> next -> data.name,name) == 0)
{
p = tmp -> next;
count++;
}
tmp = tmp -> next;
}
if (count == 0)
{
return FALSE;
}
else if(count == 1)
{
tmp = h;
while (tmp -> next)
{
if (strcmp(tmp -> next -> data.name,name) == 0)
{
p = tmp -> next;
tmp -> next = p -> next;
free (p);
return TRUE;
}
tmp = tmp -> next;
}
}
else
{
Find_Element(h,name);
printf ("\t\t有一个以上同名,请输入ID号:");
int id;
scanf ("%d",&id);
if (Delete_ID(h,name,id) == 0)
{
printf ("\t\t找不到这个ID\n");
return FALSE;
}
return TRUE;
}
}
//删除指定姓名和ID号的节点
int Delete_ID(LinkList *h, char *name, int ID)
{
if(h == NULL || name == NULL)
{
errno = ERROR;
return FALSE;
}
LinkList *tmp = h;
while (tmp -> next)
{
if (strcmp(tmp -> next -> data.name,name) == 0 && tmp -> next -> data.id == ID)
{
LinkList *p = tmp -> next;
tmp -> next = p -> next;
free (p);
return TRUE;
}
tmp = tmp -> next;
}
return FALSE;
}
// 查找元素:如果有, 输出
int Find_Element(LinkList* h, char *name)
{
if(h == NULL || name == NULL)
{
errno = ERROR;
return FALSE;
}
LinkList *tmp = h -> next;
int count = 0;
while (tmp)
{
if (strcmp(tmp -> data.name,name) == 0)
{
count++;
printf ("\t\tid = %04d name = %-10s phone_tel = %-11s address = %-10s company_tel = %-11s\n",tmp->data.id,tmp->data.name,tmp->data.phone_tel,tmp->data.address,tmp->data.company_tel);
}
tmp = tmp -> next;
}
if (count)
{
return TRUE;
}
return FALSE;
}
//获取链表长度
int Get_Len(LinkList *h,int *len)
{
if(h == NULL || len == NULL)
{
errno = ERROR;
return FALSE;
}
int count = 0;
LinkList *tmp = h;
while(tmp -> next)
{
tmp = tmp -> next;
count++;
}
*len = count;
return TRUE;
}
//链表排序
int Order_List(LinkList *h)
{
if(h == NULL)
{
errno = ERROR;
return FALSE;
}
if(h -> next == NULL)
{
errno = EMPTY_LINKLIST;
printf ("\t\t通讯录为空\n");
return TRUE;
}
int len;
Get_Len(h,&len);
LinkList * tmp = (LinkList *)malloc(sizeof(LinkList)/sizeof(char));
if (tmp == NULL)
{
errno = MALLOC_ERROR;
return FALSE;
}
int i,j;
for (i = 1;i < len;i++)
{
LinkList* min = h -> next;
LinkList* max = h -> next -> next;
for (j = 1;j < len - i + 1;j++)
{
if (min -> data.id > max -> data.id)
{
tmp -> data = min -> data;
min -> data = max -> data;
max -> data = tmp -> data;
}
min = min -> next;
max = max -> next;
}
}
free (tmp);
return TRUE;
}
//打印链表
int Display(LinkList *h)
{
if (h == NULL)
{
errno = ERROR;
printf ("\t\t没有头节点\n");
return FALSE;
}
LinkList *tmp = h -> next;
while(tmp)
{
printf ("\t\tid = %04d name = %-10s phone_tel = %-11s address = %-10s company_tel = %-11s\n",tmp->data.id,tmp->data.name,tmp->data.phone_tel,tmp->data.address,tmp->data.company_tel);
tmp = tmp -> next;
}
return TRUE;
}
//删除第Pos个节点,从1开始,没有第0个节点,头节点不算
int Delete_Pos(LinkList *h,int Pos)
{
if (h == NULL || Pos < 1)
{
errno = ERROR;
return FALSE;
}
int i;
LinkList *tmp = h;
for (i = 0;i < Pos -1;i++)
{
tmp = tmp -> next;
if(tmp -> next == NULL)
{
errno = OVER_DELETE;
printf ("删除位置越界\n");
return FALSE;
}
}
LinkList *p = tmp -> next;
tmp -> next = p -> next;
free (p);
return TRUE;
}
// 清空所有结点
int Clean_List(LinkList *h)
{
if(h == NULL)
{
errno = ERROR;
return FALSE;
}
LinkList *tmp = h;
while (tmp -> next)
{
Delete_Pos(h,1);
}
return TRUE;
}
// 销毁链表
int Destroy(LinkList *h)
{
if(h == NULL)
{
errno = ERROR;
return FALSE;
}
Clean_List(h);
free (h);
return TRUE;
}
//获取插入的值
int Get_Data(LinkData *data)
{
printf ("\t\t请输入数据:\n");
data ->id = id_count;
printf ("\t\t请输入姓名(英文):");
scanf ("%10s",data -> name);
printf ("\t\t请输入手机号码 :");
scanf ("%11s",data -> phone_tel);
printf ("\t\t请输入家庭住址 :");
scanf ("%10s",data -> address);
printf ("\t\t请输入公司电话 :");
scanf ("%11s",data -> company_tel);
//printf ("\n");
}
没有合适的资源?快使用搜索试试~ 我知道了~
数据结构项目一之电子通讯录(单链表-文件)(改一)
共7个文件
c:4个
h:3个
需积分: 31 9 下载量 90 浏览量
2017-08-08
11:01:37
上传
评论
收藏 6KB ZIP 举报
温馨提示
使用文件操作在程序结束时将链表中保存的通讯录数据保存到文件中,并在程序开始时从文件中读取初始通讯录数据。
资源推荐
资源详情
资源评论
收起资源包目录
数据结构项目一之电子通讯录(单链表-文件)(改一).zip (7个子文件)
数据结构项目一之电子通讯录(单链表-文件)(改一)
file.c 2KB
file.h 209B
LinkList.h 892B
file
LinkList.c 5KB
error.h 457B
error.c 934B
main.c 3KB
共 7 条
- 1
资源评论
不落风渊
- 粉丝: 41
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Vue和TypeScript的房地产管理系统前端设计源码
- 基于微信小程序的通用订票系统设计源码
- 基于ThinkPHP的轻量级PHP开发框架设计源码
- 基于CSS的响应式鲜花网站全屏效果设计源码
- 基于JavaScript的访客预约系统设计源码
- 基于Vue和ECharts的工作租房数据可视化系统设计源码
- 1040g0cg310ravpiu6ibg5pg00tsipsln3ju2d0g 2
- 基于Python的SAR图像去噪CNN-NLM设计源码
- redhat6升级到redhat7,过程redhat6.x-> redhat6.10->rehat7.9 主版本最高版本
- 基于Django的流程引擎设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功