1、%d.t%sn,i+1,infoi);/主菜单void menu() system(cls* 1.图书信息查询 *n* 2.图书信息增加 *n* 3.退出 *n请输入要操作的序号: int isExist(char number) /判断输入的书号是否已经存在 struct student *p; p=head; while(p!=NULL & (strcmp(p-optname0,number)!=0) p=p-next; if(p=NULL) return 0; else return 1;/增加图书信息模块void addIn() char name5MAX_NAME; while(1)
2、 system(*n* 输入图书的信息,以输入学号为#结束输入 *n输入图书学号: fflush(stdin); scanf(%s,name0); if(isExist(name0) printf(!该学号已经存在,请重新输入。n按任意键重新输入.n getch(); else if(strcmp(name0,#)=0) printf(输入结束。按任意键返回主菜单.n getch(); return; for(i=1;输入图书%s:,infoi); fflush(stdin); scanf(,namei); p=(struct student *)malloc(sizeof(struct st
3、udent); for(i=0;i+) strcpy(p-optnamei,namei); p-foundflag=0; if(head=NULL) head=p; tail=p; else tail-next=p; tail-next=NULL; /*/搜索图书信息模块int search_By(char name,int index) int i,n=1; struct student *q; foundone=0; q=head; if(head=NULL) return 0; while(q!=NULL) q- q=q- totalfound=0; /标志* 查询信息如下 *n序号i+
4、) printf(t%sn if(strcmp(q-optnameindex,name)=0) q-foundflag=1; /标志已查询过的书籍信息 totalfound+; foundone=1;%d.,n); /序号,q-optnamei); /显示书籍信息 n+; if(foundone=0) return 1; return 2;void searchFunc(int mission) int flag,index; char nameMAX_NAME; menu_search();输入要查询的项目序号: scanf(%d,&index); index-; if(index4) /判
5、断是否在15之间输入的序号有误! getch(); return;输入【%s】内容:,infoindex);,name); flag=search_By(name,index); switch (flag) case 0:printf(当前没有可用的图书信息break; case 1:没有找到相关的图书信息 case 2:【%d】条信息已找到,totalfound); if(mission=1),按任意键返回主菜单.n/*/主函数void main() int order; menu();order); switch (order) case 1:searchFunc(1); case 2:a
6、ddIn(); case 3:exit(0); default:输入的序号有误,请检查后重新输入.n break;数据结构C语言版 折半查找/* 数据结构C语言版 折半查找 P219 编译环境:Dev-C+ 4.9.9.2 日期:2011年2月15日 */#define N 11 / 数据元素个数 typedef int KeyType; / 设关键字域为整型 typedef struct / 数据元素类型 KeyType key; / 关键字域 int others; / 其它部分 ElemType;/ Search_Seq.h 静态查找表的顺序存储结构 typedef struct / 数
7、据元素存储空间基址,建表时按实际长度分配,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) (*ST).elem = (ElemType *)calloc(n+1,
8、sizeof(ElemType); / 动态生成n+1个数据元素空间(0号单元不用) if(!(*ST).elem) 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; (*ST).length; k = i; (*ST).elem0 = (*ST).elemi; / 待比较值存0单元 for(j = i+1; j = (*ST).
9、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
10、(ST); return f;/ 销毁表ST int Destroy(SSTable *ST) free(*ST).elem); (*ST).elem = NULL; (*ST).length = 0;/ 算法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) /
11、 2; if(key = ST.elemmid.key) / 找到待查元素 return mid; else if(key ST.elemmid.key) high = mid - 1; / 继续在前半区间进行查找 low = mid + 1; / 继续在后半区间进行查找 return 0; / 顺序表中不存在待查元素 / 按顺序对ST的每个元素调用函数Visit()一次且仅一次。int Traverse(SSTable ST,void(*Visit)(ElemType) ElemType *p; p = +ST.elem; / p指向第一个元素,第0个元素没有用 = ST.length; V
12、isit( *p+ );void print(ElemType c) / Traverse()调用的函数 (%d %d) , c.key, c.others);int main() SSTable st; KeyType s; Creat_Ord(&st, N); / 由全局数组产生非降序静态查找表st Traverse(st,print); / 顺序输出非降序静态查找表st n请输入待查找值的关键字: , &s); i = Search_Bin(st, s); / 折半查找有序表 if( i ) print(st.elemi);没找到.n Destroy(&st);pause输出效果:(5
13、1) (13 2) (19 3) (21 4) (37 5) (56 6) (64 7) (75 8) (80 9) (88 10) (92 11)请输入待查找值的关键字: 75(75 8) 请按任意键继续. . . 图书信息#define LEN sizeof(struct student) #define FORMAT %d %s %d %d %d %d %d %dn#define DATA stui.num,stui.name,stui.math,stui.lisan,stui.xiandai,stui.english,stui.wuli,stui.sumvoid input ();vo
14、id show ();void search ();void del ();void modify ();void menu ();void gaoshu ();void lisan ();void xiandai ();void yingyu ();void daxuewuli ();void total (); char 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; cha
15、r ch; FILE *fp; if(fp=fopen(f:data.txtr)=NULL)无法打开数据n while(!feof(fp) b=fread(&stum,LEN,1,fp); if(b=1) m+; fclose(fp); if(m=0)无数据n原有数据: show();a+是否输入新信息:y/n?ch); while(ch=Y|ch=y)学号:stum.num); for(i=0;m; if(stui.num=stum.num)输入的学号以存在!返回主菜单!姓名 scanf(,stum.name);高等数学成绩:stum.math);离散数学成绩:stum.lisan);线性代
16、数成绩:stum.xiandai);英语成绩:stum.english);大学物理成绩:stum.wuli); stum.sum=stum.math+stum.lisan+stum.xiandai+stum.english+stum.wuli; fwrite(&学号%d保存成功n,stum.num); m+;是否继续输入新信息: y/n?:void show () int i,m=0,b;num name math lisan xiandai english wuli sumtn printf(FORMAT,DATA);void search () int m=0,n,b,i,j=0;无任何学生信息记录n输入要查询的学号:n); if(stui.num=n) printf(FORMAT,DATA); j=1; if(j=0)未查询到该学生的信息n return;是否继续查询学生信息:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1