美文网首页
基于链式存储结构的图书信息表的修改

基于链式存储结构的图书信息表的修改

作者: 点一下我的id | 来源:发表于2018-12-18 02:11 被阅读0次
    #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);
        LinkList L,head;
        init(L);                        //生成新结点作头结点,用头指针L指向头结点。头结点的指针域置空。
        head=L;                         //头指针
        char no[20],name[50];           //定义no,name为char数组
        float price;                    //定义price为float
        while(cin>>no>>name>>price)     //输入no、name、price
        {
            if(!strcmp(no,"0")&&!strcmp(name,"0")&&price==0.0)
                break;                  //0 0 0 时结束
            CreationList_F_behind(L,no,name,price);//存入书信息
        }
        //cout<<ListLength_L(head)<<endl;
        //SortList_F(head);
        avg(head);
        PrintList_F(head);              //输入书信息
        return 0;                       //0:表示无错误退出。1:表示异常退出。
    
    }
    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:29 最后更新: 2017年11月27日 16:50 时间限制: 1000ms 内存限制: 128M

    描述
    定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据完成图书信息表的创建,然后计算所有图书的平均价格,将所有低于平均价格的图书价格提高20%,所有高于或等于平均价格的图书价格提高10%,最后逐行输出价格修改后的图书信息。

    输入
    输入n+1行,前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。

    输出
    总计n+1行,第1行是修改前所有图书的平均价格,后n行是价格修改后n本图书的信息,每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

    样例输入1
    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
    0 0 0
    样例输出1
    43.88
    9787302257646 Data-Structure 42.00
    9787302164340 Operating-System 55.00
    9787302219972 Software-Engineer 38.40
    9787302203513 Database-Principles 43.20
    9787810827430 Discrete-Mathematics 43.20
    9787302257800 Data-Structure 68.20
    9787811234923 Compiler-Principles 68.20
    9787822234110 The-C-Programming-Language 45.60

    相关文章

      网友评论

          本文标题:基于链式存储结构的图书信息表的修改

          本文链接:https://www.haomeiwen.com/subject/xrzhkqtx.html