单链表图书信息查询,交并差,折半查找(书名,通信录)、.docx_第1页
单链表图书信息查询,交并差,折半查找(书名,通信录)、.docx_第2页
单链表图书信息查询,交并差,折半查找(书名,通信录)、.docx_第3页
单链表图书信息查询,交并差,折半查找(书名,通信录)、.docx_第4页
单链表图书信息查询,交并差,折半查找(书名,通信录)、.docx_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单链表 图书信息 查询#include /包含库函数#include /动态内存分配配#include /链表#include /字符串#include /动态内存分配#define MAX_NAME 20 #define NULL 0char info5MAX_NAME=书号,书名,作者,出版社,ISBN;int foundone=0;int totalfound=0; /找到的书本数struct studentchar optname5MAX_NAME;int foundflag;struct student *next;struct student *head,*tail;/*/搜索选项菜单void menu_search()int i;printf(*n);printf(* 请选择查询的方式 *n);printf(*n);for(i=0;ioptname0,number)!=0) p=p-next;if(p=NULL) return 0;elsereturn 1;/增加图书信息模块void addIn()char name5MAX_NAME;struct student *p;int i;while(1)system(cls);printf(*n);printf(* 输入图书的信息,以输入学号为#结束输入 *n);printf(*n);printf(输入图书学号:);fflush(stdin);scanf(%s,name0);if(isExist(name0)printf(!该学号已经存在,请重新输入。n按任意键重新输入.n);getch();elseif(strcmp(name0,#)=0)printf(*n);printf(输入结束。按任意键返回主菜单.n);getch();return;for(i=1;i5;i+)printf(输入图书%s:,infoi);fflush(stdin);scanf(%s,namei);p=(struct student *)malloc(sizeof(struct student);for(i=0;ioptnamei,namei);p-foundflag=0;if(head=NULL)head=p;tail=p;elsetail-next=p;tail=p;tail-next=NULL;/*/搜索图书信息模块int search_By(char name,int index)int i,n=1;struct student *q;system(cls);foundone=0;q=head;if(head=NULL) return 0;while(q!=NULL)q-foundflag=0; q=q-next;totalfound=0; /标志q=head;printf(*n);printf(* 查询信息如下 *n);printf(*n);printf(序号);for(i=0;ioptnameindex,name)=0) q-foundflag=1; /标志已查询过的书籍信息totalfound+; /找到的书本数foundone=1;printf(%d.,n); /序号for(i=0;ioptnamei); /显示书籍信息printf(n);n+;q=q-next;if(foundone=0) return 1;return 2;void searchFunc(int mission)int flag,index;char nameMAX_NAME;system(cls);menu_search();printf(输入要查询的项目序号:);scanf(%d,&index);index-;if(index4) /判断是否在15之间printf(输入的序号有误!按任意键返回主菜单.n);getch();return;printf(*n);printf(输入【%s】内容:,infoindex);scanf(%s,name);flag=search_By(name,index);printf(*n);switch (flag)case 0:printf(当前没有可用的图书信息);break;case 1:printf(没有找到相关的图书信息);break;case 2:printf(【%d】条信息已找到,totalfound);break;if(mission=1)printf(,按任意键返回主菜单.n);getch();/*/主函数void main()int order;while(1)menu();fflush(stdin);scanf(%d,&order);switch (order)case 1:searchFunc(1);break;case 2:addIn();break;case 3:exit(0);break;default:printf(输入的序号有误,请检查后重新输入.n);getch();break;数据结构C语言版 折半查找/*数据结构C语言版 折半查找 P219编译环境:Dev-C+ 日期:2011年2月15日 */#include #include #define N 11 / 数据元素个数 typedef int KeyType; / 设关键字域为整型 typedef struct / 数据元素类型 KeyType key;/ 关键字域 int others;/ 其它部分 ElemType;/ Search_Seq.h 静态查找表的顺序存储结构 typedef struct/ 数据元素存储空间基址,建表时按实际长度分配,0号单元留空ElemType *elem;int length; / 表长度 SSTable;ElemType rN=05,1,13,2,19,3,21,4,37,5,56,6,64,7,75,8,80,9,88,10,92,11;/ 数据元素(以教科书P219的数据为例),全局变量 / 静态查找表(顺序表和有序表)的基本操作(7个) / 构造一个含n个数据元素的静态顺序查找表ST(数据来自全局数组r) int Creat_Seq(SSTable *ST,int n) int i;(*ST).elem = (ElemType *)calloc(n+1, sizeof(ElemType); / 动态生成n+1个数据元素空间(0号单元不用) if(!(*ST).elem)return 0;for( i = 1; i = n; i+)*(*ST).elem+i) = ri-1; / 将全局数组r的值依次赋给ST (*ST).length = n;return 1;/ 重建静态查找表为按关键字非降序排序 void Ascend(SSTable *ST) int i, j, k;for(i = 1; i (*ST).length; i+)k = i;(*ST).elem0 = (*ST).elemi; / 待比较值存0单元 for(j = i+1; j = (*ST).length; j+)/从中找到第i小的值if (*ST).elemj.key (*ST).elem0.key)k=j;(*ST).elem0=(*ST).elemj;if(k != i) / 有更小的值则交换 (*ST).elemk=(*ST).elemi;(*ST).elemi=(*ST).elem0;/ 构造一个含n个数据元素的静态按关键字非降序查找表ST,/ 数据来自全局数组r int Creat_Ord(SSTable *ST,int n)int f;f = Creat_Seq(ST,n);/构建一个静态表if( f )/静态表存在,则对其进行重建Ascend(ST);return f;/ 销毁表ST int Destroy(SSTable *ST) free(*ST).elem);(*ST).elem = NULL;(*ST).length = 0;return 1;/ 算法9.2 P220 / 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数/ 值为该元素在表中的位置,否则为0。 int Search_Bin(SSTable ST,KeyType key)int low, high, mid;low = 1; / 置区间初值 high = ST.length;while(low = high)mid = (low + high) / 2;if(key = ST.elemmid.key) / 找到待查元素 return mid;else if(key ST.elemmid.key)high = mid - 1;/ 继续在前半区间进行查找 elselow = mid + 1;/ 继续在后半区间进行查找 return 0; / 顺序表中不存在待查元素 / 按顺序对ST的每个元素调用函数Visit()一次且仅一次。int Traverse(SSTable ST,void(*Visit)(ElemType)ElemType *p;int i;p = +ST.elem; / p指向第一个元素,第0个元素没有用 for(i = 1; i = ST.length; i+)Visit( *p+ );return 1;void print(ElemType c) / Traverse()调用的函数 printf(%d %d) , c.key, c.others);int main()SSTable st;int i;KeyType s;Creat_Ord(&st, N);/ 由全局数组产生非降序静态查找表st Traverse(st,print);/ 顺序输出非降序静态查找表st printf(n请输入待查找值的关键字: );scanf(%d, &s);i = Search_Bin(st, s); / 折半查找有序表 if( i )print(st.elemi);elseprintf(没找到.n);Destroy(&st);system(pause);return 0;/*输出效果:(5 1) (13 2) (19 3) (21 4) (37 5) (56 6) (64 7) (75 8) (80 9) (88 10) (92 11)请输入待查找值的关键字: 75(75 8) 请按任意键继续. . . */图书信息#include #include #include #define LEN sizeof(struct student) #define FORMAT %d%s%d%d%d %d %d%dn#define DATA stui.num,,stui.math,stui.lisan,stui.xiandai,stui.english,stui.wuli,stui.sumvoid input ();void show ();void input ();void show ();void search ();void del ();void modify ();void menu ();void gaoshu ();void lisan ();void xiandai ();void yingyu ();void daxuewuli ();void total ();struct studentchar name20;int num;int math;int lisan;int xiandai;int english;int wuli;int sum;struct student stu100;void input ()int m=0,i=0,b;char ch;FILE *fp;if(fp=fopen(f:data.txt,r)=NULL)printf(无法打开数据n);return;while(!feof(fp)b=fread(&stum,LEN,1,fp);if(b=1)m+;fclose(fp);if(m=0)printf(无数据n);elseprintf(原有数据:n);show(); if(fp=fopen(f:data.txt,a+)=NULL)printf(无法打开数据n);return;printf(是否输入新信息:y/n?);scanf(%s,&ch);while(ch=Y|ch=y)printf(学号:);scanf(%d,&stum.num);for(i=0;im;i+)if(stui.num=stum.num)printf(输入的学号以存在!n);printf(返回主菜单!n);return;printf(姓名);scanf(%s,);printf(高等数学成绩:);scanf(%d,&stum.math);printf(离散数学成绩:);scanf(%d,&stum.lisan);printf(线性代数成绩:);scanf(%d,&stum.xiandai);printf(英语成绩:);scanf(%d,&stum.english); printf(大学物理成绩:);scanf(%d,&stum.wuli);stum.sum=stum.math+stum.lisan+stum.xiandai+stum.english+stum.wuli;fwrite(&stum,LEN,1,fp);printf(学号%d保存成功n,stum.num);m+;printf(是否继续输入新信息: y/n?:);scanf(%s,&ch);fclose(fp);void show ()FILE *fp;int i,m=0,b;if(fp=fopen(f:data.txt,r)=NULL)printf(无法打开数据n);return; while(!feof(fp)b=fread(&stum,LEN,1,fp);if(b=1)m+;printf(numnamemathlisanxiandai english wulisumtn);for(i=0;im;i+)printf(FORMAT,DATA);fclose(fp);void search ()FILE *fp;int m=0,n,b,i,j=0;char ch;if(fp=fopen(f:data.txt,r)=NULL)printf(无法打开数据n);return;while(!feof(fp)b=fread(&stum,LEN,1,fp);if(b=1)m+;if(m=0)printf(无任何学生信息记录n);printf(返回主菜单!n);return;printf(输入要查询的学号:);scanf(%d,&n);for(i=0;im;i+)if(stui.num=n)printf(numnamemathlisanxiandai english wulisumtn);printf(FORMAT,DATA);j=1;if(j=0)printf(未查询到该学生的信息n);printf(返回主菜单!n);return;printf(是否继续查询学生信息: y/n?:); scanf(%s,&ch);while(ch=Y|ch=y)j=0;printf(输入要查询的学号:);scanf(%d,&n);for(i=0;im;i+)if(stui.num=n)printf(numnamemathlisanxiandai english wulisumtn);printf(FORMAT,DATA);j=1;if(j=0)printf(未查询到该学生的信息n);printf(返回主菜单!n);return;printf(是否继续查询学生信息: y/n?:);scanf(%s,&ch);fclose(fp);void del ()FILE *fp;int m=0,n,x=0,i,j,y=0,b;char ch;if(fp=fopen(f:data.txt,r)=NULL)printf(无法打开数据n);return;while(!feof(fp)b=fread(&stum,LEN,1,fp);if(b=1)m+;fclose(fp);remove (f:data.txt);fp=fopen(f:data.txt,w+);if(m=0)printf(无任何学生信息记录n);printf(返回主菜单!n);return;if(m=1)printf(只有一条数据:n);printf(numnamemathlisanxiandai english wulisumtn);printf(FORMAT,stu0.num,,stu0.math,stu0.lisan,stu0.xiandai,stu0.english,stu0.wuli,stu0.sum);printf(是否删除 y/n?:);scanf(%s,&ch);if(ch=Y|ch=y)printf(学号%d删除成功n,stu0.num); remove (H:data.txt); fp=fopen(H:data.txt,w+);fclose(fp);return;elsereturn;printf(输入要删除的学号:);scanf(%d,&n);for(i=0;im;i+)if(stui.num=n)for(j=i;jm-1;j+)stuj=stuj+1;y=1; x+;printf(学号%d删除成功n,n); if(y=0)printf(输入的学号不存在n);printf(返回主菜单!n);return; printf(是否继续删除学生信息: y/n?:); scanf(%s,&ch);while(ch=Y|ch=y)y=0;printf(输入要删除的学号:);scanf(%d,&n);for(i=0;im-x;i+)if(stui.num=n)for(j=i;j0)printf(是否继续删除学生信息: y/n?:);scanf(%s,&ch);elseprintf(无学生信息可删除n);printf(返回主菜单!n);return; for(i=0;im-x;i+) fwrite(&stui,LEN,1,fp);fclose(fp);void modify()FILE *fp;int m=0,n,b=0,i,j,x=0,y;char ch;if(fp=fopen(f:data.txt,r+)=NULL)printf(无法打开数据n);return;while(!feof(fp)j=fread(&stum,LEN,1,fp);if(j=1)m+;if(m=0)printf(无任何学生信息记录n);printf(返回主菜单!n);return;fclose(fp);remove (H:data.txt);fp=fopen(H:data.txt,w+);printf(输入要修改的学生的学号:);scanf(%d,&n);for(i=0;im;i+)if(stui.num=n)b=i;x=1;if(x=0)printf(输入的学号不存在!n); printf(返回主菜单!n);return;printf(开始修改n);printf(学号:);scanf(%d,&y);for(i=0;im;i+)if(stui.num=y)printf(输入的学号以存在!n);printf(返回主菜单!n);return;stub.num=y;printf(姓名);scanf(%s,);printf(高等数学成绩:);scanf(%d,&stub.math);printf(离散数学成绩:);scanf(%d,&stub.lisan);printf(线性代数成绩:);scanf(%d,&stub.xiandai);printf(英语成绩:);scanf(%d,&stub.english); printf(大学物理成绩:);scanf(%d,&stub.wuli);stub.sum=stub.math+stub.lisan+stub.xiandai+stub.english+stub.wuli;for(i=0;im;i+)fwrite(&stui,LEN,1,fp);printf(学号%d修改成功n,stub.num);printf(是否继续修改学生信息: y/n?:);scanf(%s,&ch);while(ch=Y|ch=y)b=0;x=0;printf(输入要修改的学生的学号:);scanf(%d,&n);for(i=0;im;i+)if(stui.num=n)b=i;x=1;break;if(x=0)printf(输入的学号不存在!n);printf(返回主菜单!);return;printf(开始修改n);printf(学号:);scanf(%d,&stub.num);for(i=0;im;i+)if(stui.num=stub.num)printf(输入的学号以存在!n);printf(返回主菜单!n);return;printf(姓名);scanf(%s,);printf(高等数学成绩:);scanf(%d,&stub.math);printf(离散数学成绩:);scanf(%d,&stub.lisan);printf(线性代数成绩:);scanf(%d,&stub.xiandai);printf(英语成绩:);scanf(%d,&stub.english);printf(大学物理成绩:);scanf(%d,&stub.wuli);stub.sum=stub.math+stub.lisan+stub.xiandai+stub.english+stub.wuli;for(i=0;im;i+)fwrite(&stui,LEN,1,fp);printf(学号%d修改成功n,stub.num);printf(是否继续修改学生信息: y/n?:);scanf(%s,&ch);fclose(fp);void paixu ()FILE *fp;int m=0,n,b;char ch;if(fp=fopen(H:data.txt,r)=NULL)printf(无法打开数据n);return;while(!feof(fp)b=fread(&stum,LEN,1,fp);if(b=1)m+;if(m=0)printf(无任何学生信息记录n);printf(返回主菜单!n);return;printf(按列表选择想要排序的学科或总成绩:n);printf(* * * * * * * * * * * * * * * * * *n);printf(* 1.按高数成绩排序 *n);printf(* 2.按离散数学成绩排序 *n);printf(* 3.按线性代数成绩排序 *n);printf(* 4.按英语成绩排序 *n);printf(* 5.按大学物理成绩排序 *n);printf(* 6.按总成绩排序 *n);printf(* * * * * * * * * * * * * * * * * *n);printf(请输入操作序号:);scanf(%d,&n);switch(n)case 1:gaoshu();break;case 2:lisan();break;case 3:xiandai();break;case 4:yingyu();break;case 5:daxuewuli();break;case 6:total();break;default:break;printf(是否继续查询: y/n?);scanf(%s,&ch);while(ch=Y|ch=y)printf(按列表选择想要排序的学科或总成绩:n);printf(* * * * * * * * * * * * * * * * * *n);printf(* 1.按高数成绩排序 *n);printf(* 2.按离散数学成绩排序 *n);printf(* 3.按线性代数成绩排序 *n);printf(* 4.按英语成绩排序 *n);printf(* 5.按大学物理成绩排序 *n);printf(* 6.按总成绩排序 *n);printf(* * * * * * * * * * * * * * * * * *n);printf(请输入操作序号:);scanf(%d,&n);switch(n)case 1:gaoshu();break;case 2:lisan();break;case 3:xiandai();break;case 4:yingyu();break;case 5:daxuewuli();break;case 6:total();break;default:break;printf(是否继续查询: y/n?);scanf(%s,&ch);fclose(fp);void insert ()FILE *fp;int m=0,n,b=1,x,i;char ch;if(fp=fopen(f:data.txt,r)=NULL)printf(无法打开数据n);return;while(!feof(fp)b=fread(&stum,LEN,1,fp);if(b=1)m+;fclose(fp);remove (f:data.txt);fp=fopen(f:data.txt,w+);if(m=0)printf(无任何学生信息记录n);printf(返回主菜单!n);return;if(m=1)printf(只有一条数据:n);printf(numnamemathlisanxiandai english wulisumtn);printf(FORMAT,stu0.num,,stu0.math,stu0.lisan,stu0.xiandai,stu0.english,stu0.wuli,stu0.sum);printf(是否插入数据 y/n?:);scanf(%s,&ch);if(ch=Y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论