基于链式存储结构的图书信息表的最贵图书的查找

2018-12-18  本文已影响0人  点一下我的id
#include<iostream>
#include<string.h>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;                 //声明类型int类型为Status
#define MAXSIZE 10000               //图书表可能达到的最大长度 
typedef struct tagBook
{
    char no[20],name[50];
    float price;
}Book;
typedef struct LNode
{
    Book data;
    struct LNode *next;
}LNode,*LinkList;
Status ListEmpty(LinkList L);
Status ListLength_L(LinkList L);
Status GetElem_L(LinkList L,int i,Book &e);
int main()
{
    Status init(LinkList &L);
    Status CreationList_F_behind(LinkList &L,char *no,char *name,float &price);
    Status CreationList_F_ahead(LinkList &L,char *no,char *name,float &price);
    Status PrintList_F(LinkList &L);
    Status SortList_F(LinkList &L);//冒泡
    Status SelectSortList_F(LinkList &L);//插入
    Status avg(LinkList &L);
    Status MaxPrice(LinkList &L);
    LinkList L,head;
    init(L);                        //生成新结点作头结点,用头指针L指向头结点。头结点的指针域置空。
    head=L;                         //头指针
    char no[20],name[50];           //定义no,name为char数组
    float price;                    //定义price为float
    int n;
    cin>>n;
    while(n--)     //输入no、name、price
    {
        cin>>no>>name>>price;
        CreationList_F_behind(L,no,name,price);//存入书信息
    }
    //cout<<ListLength_L(head)<<endl;
    //SortList_F(head);
    //avg(head);
    MaxPrice(head);
    //PrintList_F(head);                //输入书信息
    return 0;                       //0:表示无错误退出。1:表示异常退出。

}
Status MaxPrice(LinkList &L)
{
    if(!ListEmpty(L)){
        LinkList p=L->next;
        float maxprice=-1;
        int count=0;
        while(p)
        {
            if(p->data.price>maxprice)
            {
                maxprice=p->data.price;
            }
            p=p->next;
        }
        
        p=L->next;
        while(p)
        {
            if(p->data.price==maxprice)
            {
                count++;
            }
            p=p->next;
        }
        cout<<count<<endl;
        p=L->next;
        while(p)
        {
            if(p->data.price==maxprice)
            {
                    cout<<p->data.no<<" "<<p->data.name<<" ";
                    printf("%.2f\n",p->data.price);
            }
            p=p->next;
        }

    }
    return OK;
}
Status avg(LinkList &L)
{
    float avg_price;
    if(!ListEmpty(L))
    {
        LinkList p=L->next;
        float sum=0;
        while(p)
        {
            sum+=p->data.price;
            p=p->next;
        }
        avg_price=sum/ListLength_L(L);
        printf("%.2f\n",avg_price);
        p=L->next;
        while(p)
        {
            if(p->data.price<avg_price)
            {
                p->data.price*=1.2;
            }else
            {
                p->data.price*=1.1;
            }
            p=p->next;
        }
    }
    return OK;
}
Status SelectSortList_F(LinkList &L)//插入排序
{
    LinkList p,q;
    for(p=L->next->next;p;p=p->next)
        for(q=L->next;q->next!=p;q=q->next)
        {
            if(q->data.price<q->next->data.price)
            {
                Book B;
                B=q->data;
                q->data=q->next->data;
                q->next->data=B;
            }
        }
    return OK;
}
Status SortList_F(LinkList &L)//冒泡排序
{
    int n=ListLength_L(L);
    LinkList p;
    if(!ListEmpty(L))
    {
        for(int i=1;i<=n-1;i++)
        {
            p=L->next;
            int j=0;
            while(p&&j<n-i)
            {
                if(p->data.price<p->next->data.price)
                {
                    Book t=p->data;
                    p->data=p->next->data;
                    p->next->data=t;
                }
                p=p->next;
                ++j;
            }
        }
    }
    return OK;
}
Status GetElem_L(LinkList L,int i,Book &e)
{
    return OK;
}
Status PrintList_F(LinkList &L)
{
    if(!ListEmpty(L))
    {
        L=L->next;
        while(L)
        {
            cout<<(*L).data.no<<" "<<L->data.name<<" ";
            printf("%.2f\n",L->data.price);
            L=L->next;
        }
    }
    return OK;
}
Status CreationList_F_ahead(LinkList &L,char *no,char *name,float &price)//前插法输出逆序
{
    LinkList p=new LNode;          //生成新结点p 
    p->next=L->next;
    //
    strcpy(p->data.no,no);            //复制书号
    strcpy(p->data.name,name);
    p->data.price=price;
    L->next=p;
    return OK;                      //OK=1,返回真
}
Status CreationList_F_behind(LinkList &L,char *no,char *name,float &price)//后插法输出按顺序
{
    LinkList p=new LNode;          //生成新结点p 
    //
    strcpy(p->data.no,no);            //复制书号
    strcpy(p->data.name,name);
    p->data.price=price;
    p->next=NULL;
    L->next=p;
    L=p;
    return OK;                      //OK=1,返回真
}
Status init(LinkList &L)
{
    L=new LNode;//L为Lnode类型的指针,LinkList p=LNode *p,new就是动态分配一个LNode堆空间,赋值给L
    L->next=NULL;
    return OK;
}
Status ListEmpty(LinkList L){ 
//若L为空表,则返回1,否则返回0 
   if(L->next)   //非空 
     return 0;
   else
     return 1;
}
Status  ListLength_L(LinkList L){
//返回L中数据元素个数
    LinkList p;
    p=L->next;  //p指向第一个结点
    int i=0;             
    while(p){//遍历单链表,统计结点数
           i++;
           p=p->next;   
    } 
    return i;                             
 }

基于链式存储结构的图书信息表的最贵图书的查找
发布时间: 2017年9月18日 00:33 最后更新: 2017年11月30日 10:03 时间限制: 1000ms 内存限制: 128M

描述
定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后查找价格最高的图书,输出相应图书的信息。

输入
总计输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。

输出
总计输出m+1行,其中,第一行是最贵图书数目(价格最高的图书可能有多本),后m行是最贵图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。

样例输入1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
样例输出1
2
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00

上一篇下一篇

猜你喜欢

热点阅读