单链表图书信息查询#includestdio.h//包含库函数#includestdlib.h//动态内存分配配#includeconio.h//链表#includestring.h//字符串#includemalloc.h//动态内存分配#defineMAX_NAME20#defineNULL0charinfo[5][MAX_NAME]={书号,书名,作者,出版社,ISBN};intfoundone=0;inttotalfound=0;//找到的书本数structstudent{charoptname[5][MAX_NAME];intfoundflag;structstudent*next;};structstudent*head,*tail;//***********************************************************************//搜索选项菜单voidmenu_search(){inti;printf(*************************************\n);printf(*请选择查询的方式*\n);printf(*************************************\n);for(i=0;i5;i++)printf(%d.\t%s\n,i+1,info[i]);printf(*************************************\n);}//主菜单voidmenu(){system(cls);printf(*************************************\n);printf(*1.图书信息查询*\n);printf(*2.图书信息增加*\n);printf(*3.退出*\n);printf(*************************************\n);printf(请输入要操作的序号:);}intisExist(charnumber[])//判断输入的书号是否已经存在{structstudent*p;p=head;while(p!=NULL&&(strcmp(p-optname[0],number)!=0))p=p-next;if(p==NULL)return0;elsereturn1;}//增加图书信息模块voidaddIn(){charname[5][MAX_NAME];structstudent*p;inti;while(1){system(cls);printf(**************************************************\n);printf(*输入图书的信息,以输入学号为#结束输入*\n);printf(**************************************************\n);printf(输入图书学号:);fflush(stdin);scanf(%s,name[0]);if(isExist(name[0])){printf(!!!该学号已经存在,请重新输入。\n按任意键重新输入...\n);getch();}else{if(strcmp(name[0],#)==0){printf(**************************************************\n);printf(输入结束。按任意键返回主菜单...\n);getch();return;}for(i=1;i5;i++){printf(输入图书%s:,info[i]);fflush(stdin);scanf(%s,name[i]);}p=(structstudent*)malloc(sizeof(structstudent));for(i=0;i5;i++)strcpy(p-optname[i],name[i]);p-foundflag=0;if(head==NULL){head=p;tail=p;}else{tail-next=p;tail=p;}tail-next=NULL;}}}//**********************************************************************//搜索图书信息模块intsearch_By(charname[],intindex){inti,n=1;structstudent*q;system(cls);foundone=0;q=head;if(head==NULL)return0;while(q!=NULL){q-foundflag=0;q=q-next;}totalfound=0;//标志q=head;printf(**************************************************\n);printf(*查询信息如下*\n);printf(**************************************************\n);printf(序号);for(i=0;i5;i++)printf(\t%s,info[i]);printf(\n);printf(**************************************************\n);while(q!=NULL){if(strcmp(q-optname[index],name)==0){q-foundflag=1;//标志已查询过的书籍信息totalfound++;//找到的书本数foundone=1;printf(%d.,n);//序号for(i=0;i5;i++)printf(\t%s,q-optname[i]);//显示书籍信息printf(\n);n++;}q=q-next;}if(foundone==0)return1;return2;}voidsearchFunc(intmission){intflag,index;charname[MAX_NAME];system(cls);menu_search();printf(输入要查询的项目序号:);scanf(%d,&index);index--;if(index0||index4)//判断是否在1~5之间{printf(输入的序号有误!按任意键返回主菜单...\n);getch();return;}printf(*************************************\n);printf(输入【%s】内容:,info[index]);scanf(%s,name);flag=search_By(name,index);printf(**************************************************\n);switch(flag){case0:printf(当前没有可用的图书信息);break;case1:printf(没有找到相关的图书信息);break;case2:printf(【%d】条信息已找到,totalfound);break;}if(mission==1){printf(,按任意键返回主菜单...\n);getch();}}//****************************************************************************//主函数voidmain(){intorder;while(1){menu();fflush(stdin);scanf(%d,&order);switch(order){case1:searchFunc(1);break;case2:addIn();break;case3:exit(0);break;default:printf(输入的序号有误,请检查后重新输入...\n);getch();break;}}}数据结构C语言版折半查找/*数据结构C语言版折半查找P219编译环境:Dev-C++4.9.9.2日期:2011年2月15日*/#includestdio.h#includemalloc.h#defineN11//数据元素个数typedefintKeyType;//设关键字域为整型typedefstruct//数据元素类型{KeyTypekey;//关键字域intothers;//其它部分}ElemType;//Search_Seq.h静态查找表的顺序存储结构typedefstruct{//数据元素存储空间基址,建表时按实际长度分配,0号单元留空ElemType*elem;intlength;//表长度}SSTable;ElemTyper[N]={{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)intCreat_Seq(SSTable*ST,intn){inti;(*ST).elem=(ElemType*)calloc(n+1,sizeof(ElemType));//动态生成n+1个数据元素空间(0号单元不用)if(!(*ST).elem)return0;for(i=1;i=n;i++)*((*ST).elem+i)=r[i-1];//将全局数组r的值依次赋给ST(*ST).length=n;return1;}//重建静态查找表为按关键字非降序排序voidAscend(SSTable*ST){inti,j,k;for(i=1;i(*ST).length;i++){k=i;(*ST).elem[0]=(*ST).elem[i];//待比较值存[0]单元for(j=i+1;j=(*ST).length;j++)//从中找到第i小的值if((*ST).elem[j].key(*ST).elem[0].key){k=j;(*ST).elem[0]=(*ST).elem[j];}if(k!=i)//有更小的值则交换{(*ST).elem[k]=(*ST).elem[i];(*ST).elem[i]=(*ST).elem[0];}}}//构造一个含n个数据元素的静态按关键字非降序查找表ST,//数据来自全局数组rintCreat_Ord(SSTable*ST,intn){intf;f=Creat_Seq(ST,n);//构建一个静态表if(f)//静态表存在,则对其进行重建Ascend(ST);returnf;}//销毁表STintDestroy(SSTable*ST){free((*ST).elem);(*ST).elem=NULL;(*ST).length=0;return1;}//算法9.2P220//在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数//值为该元素在表中的位置,否则为0。intSearch_Bin(SSTableST,KeyTypekey){intlow,high,mid;low=1;//置区间初值high=ST.length;while(low=high){mid=(low+high)/2;if(key==ST.elem[mid].key)//找到待查元素returnmid;elseif(keyST.elem[mid].key)high=mid-1;//继续在前半区间进行查找elselow=mid+1;//继续在后半区间进行查找}return0;//顺序表中不存在待查元素}//按顺序对ST的每个元素调用函数Visit()一次且仅一次。intTraverse(SSTableST,v