数据结构顺序表(电话通讯录) 联系客服

发布时间 : 星期一 文章数据结构顺序表(电话通讯录)更新完毕开始阅读34d4973b6edb6f1afe001f0a

数据结构用顺序表实现的电话通讯录(C语言) #include #include #include #include #define FALSE 0 #define ERROR 0 #define OK 1

#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; }