单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx

上传人:b****3 文档编号:17393607 上传时间:2022-12-01 格式:DOCX 页数:55 大小:25.44KB
下载 相关 举报
单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx_第1页
第1页 / 共55页
单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx_第2页
第2页 / 共55页
单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx_第3页
第3页 / 共55页
单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx_第4页
第4页 / 共55页
单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx

《单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx(55页珍藏版)》请在冰豆网上搜索。

单链表图书信息查询交并差折半查找书名通信录Word文档下载推荐.docx

%d.\t%s\n"

i+1,info[i]);

}

//主菜单

voidmenu()

system("

cls"

*1.图书信息查询*\n"

*2.图书信息增加*\n"

*3.退出*\n"

请输入要操作的序号:

"

intisExist(charnumber[])//判断输入的书号是否已经存在

structstudent*p;

p=head;

while(p!

=NULL&

&

(strcmp(p->

optname[0],number)!

=0))p=p->

next;

if(p==NULL)

return0;

else

return1;

//增加图书信息模块

voidaddIn()

charname[5][MAX_NAME];

while

(1)

{

system("

**************************************************\n"

*输入图书的信息,以输入学号为#结束输入*\n"

输入图书学号:

fflush(stdin);

scanf("

%s"

name[0]);

if(isExist(name[0]))

{

printf("

!

该学号已经存在,请重新输入。

\n按任意键重新输入...\n"

getch();

}

else

if(strcmp(name[0],"

#"

)==0)

{

printf("

输入结束。

按任意键返回主菜单...\n"

getch();

return;

}

for(i=1;

输入图书%s:

info[i]);

fflush(stdin);

scanf("

name[i]);

p=(structstudent*)malloc(sizeof(structstudent));

for(i=0;

i++)

strcpy(p->

optname[i],name[i]);

p->

foundflag=0;

if(head==NULL)

head=p;

tail=p;

else

tail->

next=p;

tail->

next=NULL;

}

//**********************************************************************

//搜索图书信息模块

intsearch_By(charname[],intindex)

inti,n=1;

structstudent*q;

foundone=0;

q=head;

if(head==NULL)return0;

while(q!

=NULL)

q->

q=q->

}

totalfound=0;

//标志

*查询信息如下*\n"

序号"

i++)printf("

\t%s"

\n"

if(strcmp(q->

optname[index],name)==0)

q->

foundflag=1;

//标志已查询过的书籍信息

totalfound++;

foundone=1;

%d."

n);

//序号

q->

optname[i]);

//显示书籍信息

n++;

if(foundone==0)return1;

return2;

voidsearchFunc(intmission)

intflag,index;

charname[MAX_NAME];

menu_search();

输入要查询的项目序号:

scanf("

%d"

&

index);

index--;

if(index<

0||index>

4)//判断是否在1~5之间

输入的序号有误!

getch();

return;

输入【%s】内容:

info[index]);

name);

flag=search_By(name,index);

switch(flag)

case0:

printf("

当前没有可用的图书信息"

break;

case1:

没有找到相关的图书信息"

case2:

【%d】条信息已找到"

totalfound);

if(mission==1)

,按任意键返回主菜单...\n"

//****************************************************************************

//主函数

voidmain()

intorder;

{

menu();

order);

switch(order)

{

case1:

searchFunc

(1);

case2:

addIn();

case3:

exit(0);

default:

输入的序号有误,请检查后重新输入...\n"

break;

数据结构C语言版折半查找

/*

数据结构C语言版折半查找

P219

编译环境:

Dev-C++4.9.9.2

日期:

2011年2月15日

*/

#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)

{

(*ST).elem=(ElemType*)calloc(n+1,sizeof(ElemType));

//动态生成n+1个数据元素空间(0号单元不用)

if(!

(*ST).elem)

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;

(*ST).length;

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,

//数据来自全局数组r

intCreat_Ord(SSTable*ST,intn)

intf;

f=Creat_Seq(ST,n);

//构建一个静态表

if(f)//静态表存在,则对其进行重建

Ascend(ST);

returnf;

//销毁表ST

intDestroy(SSTable*ST)

free((*ST).elem);

(*ST).elem=NULL;

(*ST).length=0;

//算法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(key<

ST.elem[mid].key)

high=mid-1;

//继续在前半区间进行查找

low=mid+1;

//继续在后半区间进行查找

return0;

//顺序表中不存在待查元素

//按顺序对ST的每个元素调用函数Visit()一次且仅一次。

intTraverse(SSTableST,void(*Visit)(ElemType))

ElemType*p;

p=++ST.elem;

//p指向第一个元素,第0个元素没有用

=ST.length;

Visit(*p++);

voidprint(ElemTypec)//Traverse()调用的函数

(%d%d)"

c.key,c.others);

intmain()

SSTablest;

KeyTypes;

Creat_Ord(&

st,N);

//由全局数组产生非降序静态查找表st

Traverse(st,print);

//顺序输出非降序静态查找表st

\n请输入待查找值的关键字:

"

&

s);

i=Search_Bin(st,s);

//折半查找有序表

if(i)

print(st.elem[i]);

没找到.\n"

Destroy(&

st);

pause"

输出效果:

(51)(132)(193)(214)(375)(566)(647)(758)(809)(8810)(9211)

请输入待查找值的关键字:

75

(758)请按任意键继续...

图书信息

#defineLENsizeof(structstudent)

#defineFORMAT"

%d%s%d%d%d%d%d%d\n"

#defineDATAstu[i].num,stu[i].name,stu[i].math,stu[i].lisan,stu[i].xiandai,stu[i].english,stu[i].wuli,stu[i].sum

voidinput();

voidshow();

voidsearch();

voiddel();

voidmodify();

voidmenu();

voidgaoshu();

voidlisan();

voidxiandai();

voidyingyu();

voiddaxuewuli();

voidtotal();

charname[20];

intnum;

intmath;

intlisan;

intxiandai;

intenglish;

intwuli;

intsum;

structstudentstu[100];

voidinput()

intm=0,i=0,b;

charch;

FILE*fp;

if((fp=fopen("

f:

\data.txt"

r"

))==NULL)

无法打开数据\n"

while(!

feof(fp))

b=fread(&

stu[m],LEN,1,fp);

if(b==1)

m++;

fclose(fp);

if(m==0)

无数据\n"

原有数据:

show();

a+"

是否输入新信息:

y/n?

ch);

while(ch=='

Y'

||ch=='

y'

学号:

stu[m].num);

for(i=0;

m;

if(stu[i].num==stu[m].num)

输入的学号以存在!

返回主菜单!

姓名"

scanf("

stu[m].name);

高等数学成绩:

stu[m].math);

离散数学成绩:

stu[m].lisan);

线性代数成绩:

stu[m].xiandai);

英语成绩:

stu[m].english);

大学物理成绩:

stu[m].wuli);

stu[m].sum=stu[m].math+stu[m].lisan+stu[m].xiandai+stu[m].english+stu[m].wuli;

fwrite(&

学号%d保存成功\n"

stu[m].num);

m++;

是否继续输入新信息:

y/n?

:

voidshow()

inti,m=0,b;

numnamemathlisanxiandaienglishwulisum\t\n"

printf(FORMAT,DATA);

voidsearch()

intm=0,n,b,i,j=0;

无任何学生信息记录\n"

输入要查询的学号:

n);

if(stu[i].num==n)

printf(FORMAT,DATA);

j=1;

if(j==0)

未查询到该学生的信息\n"

return;

是否继续查询学生信息:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1