对以下通讯录选用顺序表或单链表进行存储,设计一个程序实现:
(1)显示通讯录中所有记录。
(2)查找并输出学生姓名为张江的学生的所有信息。
(3)在通讯录中的第三行添加一个新同学的信息(内容自定)。
(4)删除通讯录中第五行的学生信息。
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct
{
int xh;
char name[10];
char tel[11];
}STU;
typedef STU elemtype;
typedef struct
{
elemtype data[10];
int length;
}sqlist;
void main()
{
void Lnitlist(sqlist *&L);
void cin(sqlist *&L,int a);
void cout(sqlist *&L);
void seek(sqlist *L);
bool ListInsert(sqlist *&L);
bool ListDelete(sqlist *&L);
void endcout(sqlist *&L);
sqlist *L;
int a;
printf(“你需要输入几个学生的信息n”);
scanf(“%d”,&a);
Lnitlist(L);
cin(L,a);
cout(L);
seek(L);
ListInsert(L);
ListDelete(L);
endcout(L);
}
void Lnitlist(sqlist *&L)
{
L=(sqlist *)malloc(sizeof(sqlist));
L->length=0;
}
void cin(sqlist *&L,int a)
{
int i;
for(i=0;i<a;i++)
{
printf(“请分别输入学号,名字,电话n”);
scanf(“%d%s%s”,&L->data[i].xh,L->data[i].name,&L->data[i].tel);
}
L->length=a;
}
void cout(sqlist *&L)
{
int i,s=L->length;
for(i=0;i<s;i++)
printf(“学号为%d的同学叫%s电话为%s的n”,L->data[i].xh,L->data[i].name,L->data[i].tel);
}
void seek(sqlist *L)
{
char s[10],*p;
p=s;
int i,j=1;
elemtype e;
printf(“请输入姓名n”);
while(j)
{
scanf(“%s”,s);
for(i=0;i<L->length;i++)
{
if(strcmp(p,L->data[i].name)==0)
{
e=L->data[i];
j–;
printf(“%s同学的学号为%d电话为%sn”,p,e.xh,e.tel);
break;
}
}
if(i==L->length)
printf(“查无此人,请重新输入n”);
}
}
bool ListInsert(sqlist *&L)
{
int i,j;
elemtype e;
printf(“请输入新同学信息n”);
scanf(“%d%s%s”,&e.xh,&e.name,&e.tel);
printf(“你要把他放在第几位?n”);
scanf(“%d”,&i);
if(i<1 || i>L->length+1)
return false;
i–;
for(j=L->length;j>i;j–)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(sqlist *&L)
{
int i,j;
printf(“请输入你要删除第几个同学n”);
scanf(“%d”,&i);
if(i<1 || i>L->length)
return false;
i–;
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length–;
return true;
}
void endcout(sqlist *&L)
{
int i,s=L->length;
for(i=0;i<s;i++)
printf(“学号为%d的同学叫%s电话为%s的n”,L->data[i].xh,L->data[i].name,L->data[i].tel);
}
运行
你需要输入几个学生的信息
5
请分别输入学号,名字,电话
178101 杨文 13788041567
请分别输入学号,名字,电话
178102 张江 13478920019
请分别输入学号,名字,电话
178103 刘龙 15077471314
请分别输入学号,名字,电话
178104 黄丽 15834372384
请分别输入学号,名字,电话
178105 周勇 18977413478
学号为178101的同学叫杨文电话为13788041567的
学号为178102的同学叫张江电话为13478920019的
学号为178103的同学叫刘龙电话为15077471314的
学号为178104的同学叫黄丽电话为15834372384的
学号为178105的同学叫周勇电话为18977413478的
请输入姓名
张江
张江同学的学号为178102电话为13478920019
请输入新同学信息
178106 王辉 13623778223
你要把他放在第几位?
3
请输入你要删除第几个同学
5
学号为178101的同学叫杨文电话为13788041567的
学号为178102的同学叫张江电话为13478920019的
学号为178106的同学叫王辉电话为13623778223的
学号为178103的同学叫刘龙电话为15077471314的
学号为178105的同学叫周勇电话为18977413478的
解题分析
通讯录中每个学生的信息作为一个数据元素,其类型可定义为:
typedef struct
{ int xh;
char xm[10];
int tel;
}STU;
以顺序表作为存储结构时,顺序表的类型可定义为:
typedef STU ElemType;
typedef struct
{ ElemType data[10];
int length;
}SqList ;
以单链表作为存储结构时,单链表中每个结点的类型可定义为:
typedef STU ElemType;
typedef struct LNode
{ ElemType data;
struct LNode *next;
} LinkNode ;
题目要实现的功能:
(1)显示通讯录中所有记录。
(2)查找并输出学生姓名为张江的学生的所有信息。
(3)在通讯录中的第三行添加一个新同学的信息(内容自定)
(4)删除通讯录中第五行的学生信息。
实现以上功能就是要编写主调函数来调用顺序表或单链表的基本运算算法。
如:先调用初始化运算完成建立一个空的顺序表或单链表,然后输入通讯录的所有信息,从而得到一个非空顺序表或单链表…….
在已得到非空表的基础上,再通过调用输出、查找、插入和删除顺序表或单链表元素的运算算法来完成各项功能。
关键搞清楚算法调用时要提供哪些参数,这些参数要根据所属的类型在调用前先定义好。