用单链表抽象数据类型实现电话薄

定义结点类型

#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

#define OK       1
#define ERROR    0

typedef int Status;
typedef int Phone;
/*****************定义结点内容********************/
typedef struct massage
{
	char name[30];					//名字
	char mobile_phone[11];			//手机号码
	char Address[10];				//住址
	char Work[10];					//工作
	struct massage *next;			//下一节点指针
}Node;
typedef struct massage *Single_list;

创建头结点

/*****************创建链表********************/

Status Creat_list(Single_list *Head)
{
	(*Head) = (Single_list)malloc(sizeof(Node));
	(*Head)->next = NULL;
	return OK;
}

该函数的形参为指针的指针,所以传入的值是指向头结点指针的指针,故(*Head)就是头结点指针啦

初始化链表

/*****************初始化链表********************/
Status Add_list(Single_list Head, int num)
{
	int i;
	Single_list tail,new_node;
	tail = Head;
	for(i = 0; i < num; i++)
	{
		new_node = (Single_list)malloc(sizeof(Node));

		printf("Please intput name: ");
			gets(new_node ->name);
		printf("\n");

		printf("Please intput numbers of mobile_phone: ");
			gets(new_node ->mobile_phone);
		printf("\n");

		printf("Please intput address: ");
			gets(new_node ->Address);
		printf("\n");

		printf("Please intput work: ");
			gets(new_node ->Work);
		printf("\n");

		Add_one_member_to_the_file(new_node);

		tail ->next = new_node;					//前一个节点的指针指向新的结点
		tail = new_node;						//让尾指针指向新的结点,为下一个新结点出现做准备
	}
	tail ->next = NULL;
	return OK;
}

该函数的第一个是头结点的指针,第二个是需要输入结点的数目。

往链表中插入新的结点

Status Insert_list(Single_list *Head, int loca)
{
	int count = 1;
	Single_list temp,new_node;
	if(loca < 1)
		return ERROR;
	temp = *Head;
	while(temp && count < loca)
	{
		temp = temp->next;
		count++;
	}
	if(!temp || loca < count)
		return ERROR;
	new_node = (Single_list)malloc(sizeof(Node));
	new_node->next = temp->next;				//先接后面的结点
	temp->next = new_node;						//再接前面的结点
	
		printf("Please intput name: ");
			gets(new_node ->name);
		printf("\n");

		printf("Please intput numbers of mobile_phone: ");
			gets(new_node ->mobile_phone);
		printf("\n");

		printf("Please intput address: ");
			gets(new_node ->Address);
		printf("\n");

		printf("Please intput work: ");
			gets(new_node ->Work);
		printf("\n");
	return OK;
}

没什么好说的,这里选择在第loca位置之前插入。

根据名字查找某个结点的其它信息

/根据名字查找其它信息***/
Status Lookup_list(Single_list Head,char *search_name)
{
Single_list temp;
temp = Head->next; //第一个结点的地址给temp
while(temp)
{
if(strcmp(temp->name,search_name) == 0)
{
printf(“The phone is: %s\n”,temp->mobile_phone);
printf(“The Address is : %s\n”,temp->Address);
printf(“The work is: %s”,temp->Work);
}
temp = temp->next;
}
if(!temp)
return ERROR;
return OK;
}

根据名字查找并删除该结点

/*****************删除某一个结点********************/
Status Delete_list(Single_list *Head, char *Delete_name)
{
	Single_list temp,delete_node;
	if((*Head)->next == NULL)				//判断是否为空链表
		return ERROR;
	delete_node = (*Head)->next;					//把第一个结点给temp指针
	while(strcmp(Delete_name, delete_node->name))
		{
			temp = delete_node;
			delete_node = delete_node->next;
		}
	if(temp == 0)							//没有找到该名称
		return ERROR;
	temp ->next = delete_node->next;
	free(delete_node);
	return OK;

}

temp记录的是要删除的前一个结点的地址。
OK! 以上就是电话本的抽象数据类型啦

还有其它功能形函数:

状态显示函数

/*****************状态显示函数********************/
void Status_report(int *param)
{

	if(*param == 1)
		printf("operation is success!\n");
	else if(*param == 1)
		printf("operation is failed!\n");
	*param = 0;
}

菜单显示函数

/*****************菜单显示函数********************/
void Meun_choose(char *select)
{
		printf("please input command:\n");
		printf("*************************************\n");
		printf("*         A is insert a member!     *\n");
		printf("*  B is looking massage by name!    *\n");
		printf("*         C is delete a member!     *\n");
		printf("*       D is return to the menu     *\n");
		printf("*************************************\n");
		printf("your selection is :");
		*select = getchar();
		getchar();

}

备份函数

/*****************添加一个成员到文件D:\VC\MSDev98\Bin\DataAndStructure********************/
void Add_one_member_to_the_file(Single_list member)
{
	FILE *fp;
	if((fp = fopen("D:\\VC\\MSDev98\\Bin\\DataAndStructure\\phone.dat","ab")) == NULL)
	{
		printf("Cannot open file strike any key exit !\n");
		getch();
		exit(0);
	}
	fwrite(member,sizeof(Node),1,fp);
	fclose(fp);
}

每个输入的信息都被文件存起来

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值