数据结构顺序表电话通讯录.docx
- 文档编号:9430513
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:8
- 大小:15.85KB
数据结构顺序表电话通讯录.docx
《数据结构顺序表电话通讯录.docx》由会员分享,可在线阅读,更多相关《数据结构顺序表电话通讯录.docx(8页珍藏版)》请在冰豆网上搜索。
数据结构顺序表电话通讯录
数据结构用顺序表实现的电话通讯录(C语言)
#include
#include
#include
#include
#defineFALSE0
#defineERROR0
#defineOK1
#defineINFEASIBLE-1
#defineLIST_INIT_SIZE10
#defineLIST_INCREMENT5
#defineN5
typedefintStatus;
typedefstruct
{charname[10];//姓名
charnum[15];//号码
}student;
typedefstruct
{
student*elem;//存储空间基址
intlength;//当前长度
intlistsize;//当前分配的存储空间(以sizeof(student)为单位)
}Sqlist;
SqlistL;//定义全局变量L为Sqllist类型
StatusListInsert(Sqlist&L,inti,studente)
{
//插入学生信息到顺序表L中
intj;
student*newbase;
if(i<1||i>L.length+1)returnERROR;//i值不合法
if(L.length>=L.listsize)//当前存储空间已满,增加分配
{
newbase=(student*)realloc(L.elem,(LIST_INIT_SIZE+LIST_INCREMENT)*(sizeof(student)));
if(!
newbase)//存储分配失败
exit(OVERFLOW);
L.elem=newbase;//新基址
L.listsize+=LIST_INCREMENT;//增加存储容量
}
for(j=L.length;j>=i;j--)
L.elem[j]=L.elem[j-1];//插入位置及之后元素的右移
L.elem[i-1]=e;
L.length++;
returnOK;
}
voidInitList(Sqlist&L)
{
//创建顺序表
L.elem=(student*)malloc(LIST_INIT_SIZE*sizeof(student));
if(!
L.elem)exit(OVERFLOW);//存储分配失败
L.length=0;//空表长度
L.listsize=LIST_INIT_SIZE;//初始存储容量
}
voidListTraverse(SqlistL,void(*vi)(student&))
{
//显示顺序表中的所有记录
system("cls");
printf("姓名电话号码\n");
student*p;
inti;
p=L.elem;
for(i=1;i vi(*p++); printf("输入0: 返回菜单请输入您的选择: "); } voidprint(student&a) { //信息输出 printf("%-10s%-8s",a.name,a.num); printf("\n"); } intListLength(SqlistL)//返回顺序表的长度 {returnL.length;} intLocateElem(SqlistL,studente,Status(*compare)(student,student)) { //返回L中第一个与e满足关系compare的数据的位序, //若这样的数据不存在,则返回为0; inti=1;//i的初值为第1个元素的位序 student*p=L.elem;//p的初值为第1个元素的存储位置 while(i<=L.length&&! compare(*p++,e))i++; if(i<=L.length) returni; else returnERROR; } StatusListDelete(Sqlist&L,inti,student&e) { //在顺序表L中删除第i个元素,并返回OK system("cls");//清除屏幕 intj; if(i<1||i>L.length)//i值不合法 returnERROR; else { e=L.elem[i-1];//p为删除元素的位置 for(j=i;j<=L.length;j++)L.elem[j-1]=L.elem[j]; L.length--; returnOK; } } voidwrong() { //错误提示信息输出 printf("youhaveinputedawrongnumber"); printf("pleaseinputthenumberthatisbetween0and8"); } voidDelete(Sqlist&L) { //根据i删除顺序表中的记录 studente; intj; printf("请输入要删除的位置(1≦i≦%d): ",L.length+1); scanf("%d",&j); ListDelete(L,j,e); printf("已删除! "); printf("输入0: 返回菜单请输入您的选择: "); } voidScanIn(Sqlist&L) { //信息输入 system("cls"); inti; studente; chara[2]; printf("请输入信息: \n"); do { student*p=L.elem; printf("请输入姓名: "); scanf("%s",e.name); printf("请输入电话号码: "); scanf("%s",e.num); printf("请输入你要插入的位置(1≦i≦%d): ",L.length+1); scanf("%d",&i); ListInsert(L,i,e); jump: printf("是否继续输入信息(y/n)"); scanf("%s",a); }while(strcmp(a,"y")==0||strcmp(a,"Y")==0); printf("输入0: 返回菜单请输入您的选择: "); } studentstu[N]={ {"小易",""}, {"小二",""}, {"小伞",""}, {"小斯",""}, {"小武",""}}; intstuIntsertList(Sqlist&L) { //将结构体数组stu中的记录插入到顺序表 inti,j; for(i=0;i j=ListInsert(L,i+1,stu[i]); system("cls"); if(j)printf("已成功加入到顺序表中\n"); printf("输入0: 返回菜单请输入您的选择: "); returnOK; } voidmenu() { //菜单函数 printf("\t\t*************************************\n"); printf("\t\t*1.导入记录*\n"); printf("\t\t*2.输入记录*\n"); printf("\t\t*3.删除记录*\n"); printf("\t\t*4.显示所有记录*\n"); printf("\t\t*0.返回本菜单*\n"); printf("\t\t*************************************\n\n\n"); } //开始函数 voidstart() { printf("\n"); printf("\t\t\t**************************\n"); printf("\t\t\t*欢迎使用*\n"); printf("\t\t\t*电话查询系统*\n"); printf("\t\t\t**************************\n"); printf("\t\t\t**\n"); printf("\t\t\t**************************\n"); printf("\n"); menu(); } intmain() { inti=0,j; studente; Sqlistp,q; InitList(L); start(); while(scanf("%d",&i)) { switch(i) { case1: stuIntsertList(L);break; case2: ScanIn(L);break; case3: Delete(L);break; case4: ListTraverse(L,print);break; case0: menu();break; default: wrong(); } } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 顺序 电话 通讯录