标签:Status name no price SqList 排序 顺序存储 图书
题目描述
定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建,然后将图书按照价格降序排序,逐行输出排序后每本图书的信息。
输入描述
输入n+1 行,前n 行是n 本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1 行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。
输出描述
总计n 行,每行是一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔。其中价格输出保留两位小数。
样例输入
9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第2版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术——原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00
0 0 0
样例输出
9787302219972 单片机技术及应用 32.00
9787810827430 工业计算机控制技术——原理与应用 29.00
9787302203513 单片机原理与应用技术 26.00
9787302257646 程序设计基础 25.00
9787811234923 汇编语言程序设计教程 21.00
9787302164340 程序设计基础(第2版) 20.00
#include <iostream>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define OK 1
#define Maxsize 100
#define OVERFLOW -2
using namespace std;
typedef int Status; //声明类型int类型为Status
typedef struct
{
char no[20]; //图书ISBN
char name[50]; //图书名字
float price; //图书价格
}Book;
typedef struct
{
Book *elem;//指向数据元素的基地址
int length;//线性表的当前长度
}SqList; //他的顺序存储结构类型为SqList
int main()
{
Status InitList(SqList &L); //声明函数
Status PrintList_Sq(SqList &L); //声明函数
Status CreationList_Sq(SqList &L,char *no,char *name,float &price);//声明函数
SqList L; //定义L为SqList
InitList(L); //初始化L
char no[20],name[50]; //定义no,name为char数组
float price; //定义price为float
int i=0;
while(1) //输入no、name、price
{
cin>>no>>name>>price;
if(*no=='0'&&*name=='0'&&price==0){break;}
CreationList_Sq(L,no,name,price);//存入书信息
++i;
}
PrintList_Sq(L);
return 0;
}
Status InitList(SqList &L)
{
L.elem=new Book[Maxsize]; //为顺序表分配存储空间
if(!L.elem) exit(OVERFLOW); //存储分配失败
L.length=0; //空表长度为0
return OK;
}
Status CreationList_Sq(SqList &L,char *no,char *name,float &price)
{
Book B; //定义B为Book
strcpy(B.no,no); //复制书号
strcpy(B.name,name);
B.price=price;
L.elem[L.length]=B; //l的elem数组存储书的信息
L.length++; //每存好一本书,书总量自加1,l.length=l.length+1.单目运算
return OK; //OK=1,返回真
}
Status PrintList_Sq(SqList &L)
{
int n=L.length;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=n-i;j++)
{
if(L.elem[j].price<=L.elem[j+1].price)
{
Book B=L.elem[j]; //定义B为Book类型,用于暂时存书价格小的书的信息
L.elem[j]=L.elem[j+1];//书架底的在后面
L.elem[j+1]=B; //后面的书从B里取回书价小的信息
}
}
}
for(int i=0;i<L.length;i++) //顺序输出每本书的信息
{
cout<<L.elem[i].no<<" "<<L.elem[i].name<<" ";//每本书信息
printf("%.2f\n",L.elem[i].price);//保留两位消暑
}
return OK; //OK=1,返回真
}
标签:Status,name,no,price,SqList,排序,顺序存储,图书 来源: https://blog.csdn.net/weixin_45088813/article/details/104800204
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。