当前位置:首页 > 数据结构顺序表(电话通讯录)
数据结构用顺序表实现的电话通讯录(C语言) #include
#define INFEASIBLE -1 #define LIST_INIT_SIZE 10 #define LIST_INCREMENT 5 #define N 5
typedefint Status; typedefstruct
{ char name[10]; //姓名 char num[15]; //号码 }student; typedefstruct { student *elem; //存储空间基址 int length; //当前长度 intlistsize; //当前分配的存储空间(以sizeof(student)为单位) }Sqlist;
Sqlist L; //定义全局变量L 为Sqllist类型 Status ListInsert(Sqlist&L,inti,student e) { //插入学生信息到顺序表L中 int j; student *newbase; if(i<1||i>L.length+1) return ERROR; //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++; return OK;
}
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(\
printf(\姓名电话号码 \\n\ student *p; int i; p=L.elem; for(i=1;i printf(\输入0:返回菜单请输入您的选择: \} void print(student &a) { //信息输出 printf(\ printf(\} intListLength(Sqlist L) //返回顺序表的长度 { returnL.length; } intLocateElem(SqlistL,studente,Status(*compare)(student,student)) { //返回L中第一个与e满足关系compare的数据的位序, //若这样的数据不存在,则返回为0; int i=1; //i的初值为第1个元素的位序 student *p=L.elem; //p的初值为第1个元素的存储位置 while(i<=L.length&&!compare(*p++,e)) i++; if(i<=L.length) return i; else return ERROR; } Status ListDelete(Sqlist&L,inti,student&e) { //在顺序表L中删除第i个元素,并返回OK system(\ //清除屏幕 int j; //i值不合法 if(i<1||i>L.length) return ERROR; else { e=L.elem[i-1]; //p为删除元素的位置 for(j=i;j<=L.length;j++) L.elem[j-1]=L.elem[j]; L.length--; return OK; } } void wrong() { //错误提示信息输出 printf(\ printf(\} void Delete(Sqlist&L) { //根据i删除顺序表中的记录 student e; int j; printf(\请输入要删除的位置(1≦i≦%d):\scanf(\ ListDelete(L,j,e); printf(\已删除!\ printf(\输入0:返回菜单请输入您的选择: \} voidScanIn(Sqlist&L) { //信息输入 system(\int i; student e; char a[2]; printf(\请输入信息:\\n\ do { student *p=L.elem; printf(\请输入姓名:\ scanf(\ printf(\请输入电话号码:\scanf(\ printf(\请输入你要插入的位置(1≦i≦%d): \ scanf(\ ListInsert(L,i,e); jump: printf(\是否继续输入信息(y/n)\ scanf(\ }while(strcmp(a,\ printf(\输入0:返回菜单请输入您的选择: \} studentstu[N]={ {\小易\{\小二\{\小伞\{\小斯\{\小武\ intstuIntsertList(Sqlist&L) { //将结构体数组stu中的记录插入到顺序表 inti,j; for(i=0;i void menu() { //菜单函数 printf(\ *************************************\\n\ printf(\ * 1. 导入记录 *\\n\ printf(\ * 2. 输入记录 *\\n\ printf(\ * 3. 删除记录 *\\n\ printf(\ * 4. 显示所有记录 *\\n\ printf(\ * 0. 返回本菜单 *\\n\ printf(\ } //开始函数 void start() { printf(\ printf(\ printf(\ 欢迎使用 *\\n\ printf(\ 电话查询系统 *\\n\ printf(\ printf(\ *\\n\ printf(\ printf(\ menu(); } int main() { int i=0,j; student e; Sqlistp,q; InitList(L); start(); while(scanf(\ { switch(i) { case 1: stuIntsertList(L); break; case 2: ScanIn(L);break; case 3: Delete(L);break; case 4: ListTraverse(L,print);break; case 0: menu();break; default:wrong(); } } return 0; }
共分享92篇相关文档