1、实验目的
通过本实验,掌握线性表链式存储结构的基本原理和基本运算以及在实际问题中的应用。
2、实验内容
建立某班学生的通讯录,要求用链表存储。
具体功能包括:
(1)可以实现插入一个同学的通讯录记录;
(2)能够删除某位同学的通讯录;
(3)对通讯录打印输出。
3、实验要求
(1)定义通讯录内容的结构体;
(2)建立存储通讯录的链表结构并初始化;
(3)建立主函数:
1)建立录入函数(返回主界面)
2)建立插入函数(返回主界面)
3)建立删除函数(返回主界面)
4)建立输出和打印函数(返回主界面)
I)通过循环对所有成员记录输出
II)输出指定姓名的某个同学的通讯录记录
5)退出
#include<stdio.h>
#include<string.h>#include<stdlib.h>
#define MAXSIZE 12
typedef int datatype;
typedef struct link_node{
char name[10];
char tell[MAXSIZE];
struct link_node *next;
}node;
node *init()
{
node *head;
head=(node *)malloc(sizeof(node));
head->next=NULL;
}
void Insert(node *head) //尾插法实现插入多个同学的通讯录记录;
{
node *p,*q=head;
int n;
while(q->next) q=q->next;
scanf("%d",&n);
while(n)
{
p=(node*)malloc(sizeof(node));
printf("输入姓名:");
scanf("%s",p->name);
printf("输入电话:");
scanf("%s",p->tell);
p->next=NULL;
q->next=p;
q=q->next;
n--;
}
}
void display(node *head) //通讯录打印输出
{
node *p;
p=head->next;
if(!p)
{
printf("\n暂无通讯录信息!");
}
else
{
while(p)
{
printf("姓名: %s\n",p->name);
printf("电话: %s\n",p->tell);
p=p->next;
}
}
}
node *Find(node *head) //查找通讯录是否存在要删除的信息
{
node *p;
p=head->next;
char name[10];
char tell[MAXSIZE];
int t;
printf("****************\n");
printf("1.按姓名查找 \n");
printf("2.按电话查找 \n");
printf("****************\n");
printf("请选择1/2:");
scanf("%d",&t);
if(t==1)
{
printf("输入所查找的姓名:");
scanf("%s",name);
while(p&&strcmp(p->name,name)!=0)
p=p->next;
}
else if(t==2)
{
printf("输入所查找的电话:");
scanf("%s",tell);
while(p&&strcmp(p->tell,tell)!=0)
p=p->next;
}
else
{
printf("输入有误,请重新输入\n");
Find(head);
}
return p;
}
node *dele(node *head) //通讯录上信息的删除
{
node *p,*q;
p=Find(head);
q=head;
if(p!=NULL)
{
while(q->next!=p)
q=q->next;
q->next=p->next;
free(p);
printf("通讯者已被删除!\n");
}
else
{
printf("没有查到要查找的电话信息!\n");
p=NULL;
}
return head;
}
int main()
{
int k,j=1;
node *head;
printf("****************\n");
printf(" 1.初始化\n");
printf(" 2.通讯录的删除\n");
printf(" 3.通讯录的打印\n");
printf(" 4.通讯录的插入\n");
printf(" 0.退出查询系统\n");
printf("****************\n");
printf("\n请选择菜单(0-4):");
while(j)
{
scanf("%d",&k);
switch(k)
{
case 1:
{
printf("初始化完成 \n");
head=init();
}break;
case 4:
{
printf("通讯录的插入 \n");
Insert(head);
}break;
case 2:
{
printf("通讯录的删除 \n");
dele(head);
}break;
case 3:
{
printf("通讯录的打印 \n");
display(head);
}break;
case 0:
{
j=0;
}break;
default:
{
printf("输入有误,请重新输入!\n");
getchar();
break;
}
}
}
return 0;
}