#defineMAXSIZE1000//图表可能达到的最大长度
//定义图书表的顺序储存结构
//定义图书信息
typedefstruct
{
charno[20];//ISBN
charname[50];//书名
floatprice;//价格
}Book;
typedefstructnode//用于链表去重
longlongintno;
charname[50];
doubleprice;
structnode*next;
}Book1,*BookList;
//定义顺序储存结构类型
Book*elem;//储存空间基地址
intlength;//当前图书个数
}SqList;
typedefintStatus;
typedefintElemType;
//初始化一个顺序表
StatusInitList_Sq(SqList&L)
L.elem=newBook[MAXSIZE];//份配空间
if(!L.elem)//分配失败
exit(OVERFLOW);
}
L.length=0;//空表长度为0
returnOK;
//顺序表输入
StatusListInsert(SqList&L)
inti=1;
while(1)
if(i>MAXSIZE)//输入图书信息数超过最大值,退出
scanf("%s%s%f",L.elem[i].no,L.elem[i].name,&L.elem[i].price);//输入图书数据
if(!strcmp(L.elem[i].no,"0")&&!strcmp(L.elem[i].name,"0")&&L.elem[i].price==0)
break;//输入结束标志000则停止输入
i++;
L.length=i-1;
returni-1;
//顺序表逆序输入
StatusNListInsert(SqList&L)
inti,t;
scanf("%d",&i);
t=i;
if(i==0)//结束输入
break;
i--;
L.length=t;
returnL.length;
//顺序表输出
StatusListOutput(SqList&L)
for(inti=1;i<=L.length;i++)
printf("%s%s%.2f\n",L.elem[i].no,L.elem[i].name,L.elem[i].price);//输出图书信息表
//顺序表排序
boolcmp(BookL1,BookL2)//按照价格降序排序
if(L1.price>L2.price)
returntrue;
else
returnfalse;
StatusSqSort(SqList&L)
sort(&(L.elem[1]),&(L.elem[L.length+1]),cmp);
//顺序表修改价格
StatusSqprice(SqList&L)
floatavg=0;//平均价格
avg+=L.elem[i].price;//计算所有书的总价格
avg/=L.length;//所有书的平均价格=总价/书本数量
if(L.elem[i].price>=avg)//高于或等于平均价格的图书价格提高10%
L.elem[i].price*=1.1;
elseif(L.elem[i].price L.elem[i].price*=1.2; printf("%.2f\n",avg);//输出平均价格 //顺序表找最贵的书 StatusSqMax(SqList&L) intn;//图书数目 printf("请输入数据:\n"); scanf("%d",&n);//输入图书数目 InitList_Sq(L);//初始化线性表 L.length=n;//给线性表中的图书数目赋值 if(n<1||n>MAXSIZE) while(i<=n) scanf("%s%s%f",L.elem[i].no,L.elem[i].name,&L.elem[i].price);//输入图书信息表 intmaxprice[MAXSIZE];//最贵图书在线性表中的编号 intlen=0,max=0;//len:最贵图书的数目max:最贵图书价格 for(inti=1;i<=n;i++)//查找最贵图书并记录其在线性表中的编号 if(L.elem[i].price>max)//找到更贵的图书 len=1;//更贵图书的数目记为1 maxprice[len]=i;//记录更贵图书在线性表中的编号 max=L.elem[i].price;//修改最贵图书价格 elseif(max==L.elem[i].price)//找到下一本最贵图书 len++;//最贵图书的数目加1 printf("%d\n",len);//输出最贵图书的数目 for(inti=1;i<=len;i++)//输出最贵图书的信息 intj; j=maxprice[i]; printf("%s%s%.2f\n",L.elem[j].no,L.elem[j].name,L.elem[j].price);//根据编号输出最贵图书的信息 //顺序表找出最喜爱的书 StatusSqFavor(SqList&L) intn;//图书数量 inti,j; Bookb[MAXSIZE]; printf("请输入数据\n"); scanf("%d",&n); for(i=0;i scanf("%s%s%f",&b[i].no,&b[i].name,&b[i].price); intm,t;//查找m次 scanf("%d",&m); Bookb_1[MAXSIZE]; for(intk=0;k scanf("%s",&b_1[k].name); t=0; for(j=0;j if(!strcmp(b_1[k].name,b[j].name)) t++; if(t==0) printf("抱歉,这里没有你的最爱!\n"); printf("%d\n",t); printf("%s%s%.2f\n",b[j].no,b[j].name,b[j].price); //顺序表图书位置查找 StatusSqPlace(SqList&L) for(i=1;i<=n;i++) intm;//查找m次 intb_1[MAXSIZE]; scanf("%d",&b_1[k]); for(j=1;j<=n;j++) if(b_1[k]==j)//对应位置并输出 if(b_1[k]>i||b_1[k]<1)//位置不存在 printf("抱歉,最佳位置上的图书不存在!\n"); //顺序表新书入库 StatusSqEnter(SqList&L) intn,j,i; Bookin_b; scanf("%s%s%f",L.elem[j].no,L.elem[j].name,&L.elem[j].price); L.length=n; if((i<1)||(i>L.length+1)||(i==MAXSIZE)) printf("抱歉,入库位置非法!\n");//i值不合法 returnERROR; scanf("%s%s%f",&in_b.no,&in_b.name,&in_b.price); for(j=L.length;j>=i;j--) L.elem[j+1]=L.elem[j];//插入位置及之后的元素右移 L.elem[i]=in_b;//将新元素e放入第i个位置 ++L.length;//表长加1 for(j=1;j<=L.length;j++) printf("%s%s%.2f\n",L.elem[j].no,L.elem[j].name,L.elem[j].price);//输出图书信息表 //顺序表旧书出库 StatusSqDelete(SqList&L) if((i<1)||(i>L.length)) printf("抱歉,出库位置非法!\n");//i值不合法 for(j=i+1;j<=n;j++) L.elem[j-1]=L.elem[j];//删除位置及之后的元素左移 --L.length;//表长减1 //顺序表去重 StatusSqRepeat(SqList&L) intn,j,i,t; for(j=1;j<=n;j++)//输入 for(i=1;i<=n;i++)//书号循环对比 if(!strcmp(L.elem[i].no,L.elem[j].no))//重复删除 for(t=j+1;t<=n;t++) L.elem[t-1]=L.elem[t];//删除位置及之后的元素左移 --n;//表长减1 --j; printf("%d\n",n); //定义链式储存结构类型 typedefstructLNODE Bookelem;//数据域 LNODE*next;//指针域 }LNODE,*LinkList; //初始化链表 StatusInit(LinkListL) L=(LinkList)malloc(sizeof(LNODE));//分配结点空间 if(!L) exit(OVERFLOW);//空间分配失败,退出 L->next=NULL;//下一本书的地址为空 returnOK;//空间分配完成 //链表输出数目 StatusLNum(LinkListL) LinkListr=L;//输入 inti; for(i=0;i LinkListp=newLNODE; scanf("%s%s%f",&p->elem.no,&p->elem.name,&p->elem.price); if(!(strcmp(p->elem.no,"0"))&&!(strcmp(p->elem.name,"0"))&&p->elem.price==0){ p->next=NULL; r->next=p; r=p; if(i) printf("%d\n",i); else//异常 LinkListp=L->next;//输出 while(p!=NULL) printf("%s%s%.2f\n",p->elem.no,p->elem.name,p->elem.price); p=p->next; //链表输入(后插) StatusInsert(LinkList&L) LinkListr=L;//尾指针r指向头结点 for(i=1;i<=MAXSIZE;i++){ //链表输出 StatusLoutput(LinkListL) LinkListp=L->next; //链表排序 StatusLsort(LinkListL) if(L->next==NULL||L->next->next==NULL)//线性表无元素或只有一个元素,无需排序 LinkListpre=L;//操作结点的前一个结点 LinkListnow=L->next;//操作结点 LinkListtail=NULL;//尾结点 while(L->next!=tail)//冒泡排序 pre=L; now=L->next; intflag=0; while(now->next!=tail) if(now->elem.price flag=1; pre->next=now->next; now->next=now->next->next; pre->next->next=now; pre=pre->next; now=now->next; if(flag==0) tail=now; //链表提高图书价格 StatusLprice(LinkList&L) intnum=0;//图书数量 floatavg=0;//图书平均价格 while(p!=NULL)//遍历线性表 avg+=p->elem.price;//计算图书总价 num++;//统计图书数量 avg/=num;//图书均价=总价/图书数量 p=L->next; if(p->elem.price>=avg) p->elem.price*=1.1;//所有高于或等于平均价格的图书价格提高10% elseif(p->elem.price p->elem.price*=1.2;//所有低于平均价格的图书价格提高20% printf("%.2f\n",avg);//输出图书均价 //链表逆序输出(头插) StatusNInsert(LinkList&L) intn,i; LinkListp=L; for(i=1;i<=n;i++)//输入 LinkListr=newLNODE; scanf("%s%s%f",&r->elem.no,&r->elem.name,&r->elem.price); r->next=p->next; p->next=r; for(i=1;i<=n;i++)//输出 //链表最贵图书 StatusLexpensive(LinkList&L) intn,i,m,k; LinkListr=L; for(i=0;i intmax=p->elem.price; i=0; while(p->elem.price==max) while(p) //链表最爱图书 StatusLFavor(LinkList&L) intn,i,m,k,t; r->next=NULL; p=r; scanf("%d",&k);//输入查找数目 //输入查找书名 Booka[MAXSIZE]; for(i=0;i scanf("%s",&a[i].name); {//遍历查找计算符合条件的书数量 m=0; while(now->next) if(!strcmp(now->elem.name,a[i].name)) m++; //输出数量 if(m) printf("%d\n",m); else//未找到 printf("抱歉,没有你的最爱!\n"); //输出图书信息 printf("%s%s%.2f\n",now->elem.no,now->elem.name,now->elem.price);