实验一T1-10
#include <bits/stdc++.h>
using namespace std;
const int N=105;
struct Book
{
    string isbn;
    string name;
    double price;
}b[N],r[N];
class book
{
private:
    string isbn;
    string name;
    double price;
    int length;
    book *next;
    static book *head;
    static book *tail;
public:
    book():next(NULL)
    {
        head=tail=this;
    }
    book(string a,string b,double c):isbn(a),name(b),price(c),next(NULL){}
    void Input()
    {
        head->next=new book("","",-1);
        tail=head->next;
        string a,b;
        double c;
        /*length=0;//T1-3
        while(cin>>a>>b>>c)
        {
            if(a=="0"&&b=="0"&&c==0)return;
            tail->next=new book(a,b,c);
            tail=tail->next;
            length++;
        }*/
        /*cin>>length;//T4-9
        for(int i=0;i<length;++i)
        {
            cin>>a>>b>>c;
            tail->next=new book(a,b,c);
            tail=tail->next;
        }*/
    }
    void Output()
    {
        cout<<length<<endl;//T1,10
        book *now=head->next;
        while(now->next)
        {
            now=now->next;
            cout<<now->isbn<<" "<<now->name<<" "<<now->price<<endl;
        }
    }
    void BubbleSort()
    {
        book *now;
        book *tmp1;
        book *tmp2;
        double temp1;
        string temp2,temp3;
        for(int i=0;i<length;++i)
        {
            now=head->next->next;
            for(int j=1;j<length-i;++j)
            {
                tmp1=now;
                tmp2=now->next;
                if(tmp1->price<tmp2->price)
                {
                    temp1=tmp1->price;
                    tmp1->price=tmp2->price;
                    tmp2->price=temp1;
                    temp2=tmp1->isbn;
                    tmp1->isbn=tmp2->isbn;
                    tmp2->isbn=temp2;
                    temp3=tmp1->name;
                    tmp1->name=tmp2->name;
                    tmp2->name=temp3;
                }
                now=now->next;
            }
        }
    }
    void Sort(int s,int t)
    {
        if(s==t)return;
        int m=s+(t-s)/2;
        Sort(s,m);
        Sort(m+1,t);
        int i=s,j=m+1,k=s;
        while(i<=m&&j<=t)r[k++]=b[i].price>=b[j].price?b[i++]:b[j++];
        while(i<=m)r[k++]=b[i++];
        while(j<=t)r[k++]=b[j++];
        for(int ii=s;ii<=t;++ii)b[ii]=r[ii];
    }
    void MergeSort()
    {
        int i=0;
        book *now=head->next;
        while(now->next)
        {
            now=now->next;
            b[i].isbn=now->isbn;
            b[i].name=now->name;
            b[i++].price=now->price;
        }
        Sort(0,length-1);
        now=head->next;
        i=0;
        while(now->next)
        {
            now=now->next;
            now->isbn=b[i].isbn;
            now->name=b[i].name;
            now->price=b[i++].price;
        }
    }
    void Update()
    {
        double sum=0;
        book *now=head->next;
        while(now->next)
        {
            now=now->next;
            sum+=now->price;
            if(now->next==NULL)break;
        }
        sum/=length;
        cout<<sum<<endl;
        now=head->next;
        while(now->next)
        {
            now=now->next;
            now->price*=now->price<sum?1.2:1.1;
            if(now->next==NULL)break;
        }
    }
    void Inverse()
    {
        book *p=head->next;//头结点
        book *q=p->next;//首元节点
        book *t;
        while(q!=NULL)
        {//依次调整链表指针指向
            t=q->next;
            q->next=p;
            p=q;
            q=t;
        }
        head->next->next->next=NULL;//调整链表尾和头
        head->next->next=p;//
    }
    void inverse()
    {
        book *pre=NULL;
        book *cur=head->next->next;
        book*curnext=cur->next;
        while(cur!=NULL)
        {//依次调整链表指针指向
            cur->next=pre;
            pre=cur;
            cur=curnext;
            if(curnext!=NULL)curnext=curnext->next;
        }
        head->next->next=pre;//调整头结点
    }
    void QueryMax()
    {
        book *now=head->next;
        double mmax=0;
        int num=0;
        while(now->next)
        {
            now=now->next;
            if((now->price)>mmax)
            {
                mmax=now->price;
                num=1;
            }
            else if(now->price==mmax)
            {
                num++;
            }
        }
        now=head;
        cout<<num<<endl;
        while(now->next)
        {
            now=now->next;
            if(now->price==mmax)
            {
                cout<<now->isbn<<" "<<now->name<<" "<<now->price<<endl;
            }
        }
    }
    void findfond()
    {
        int m;
        cin>>m;
        for(int i=0;i<m;++i)
        {
            string name;
            cin>>name;
            book *now=head->next;
            int num=0;
            while(now->next)
            {
                now=now->next;
                if(now->name==name)num++;
            }
            if(num==0)
            {
                cout<<"Sorry,there is no your favourite!"<<endl;
            }
            else
            {
                cout<<num<<endl;
                now=head->next;
                while(now->next)
                {
                    now=now->next;
                    if(now->name==name)
                    {
                        cout<<now->isbn<<" "<<now->name<<" "<<now->price<<endl;
                    }
                }
            }
        }
    }
    void Query()
    {
        int m;
        cin>>m;
        for(int i=0;i<m;++i)
        {
            int num;
            cin>>num;
            if(num<1||num>length)
            {
                cout<<"Sorry,the book on the best position doesn't exist!"<<endl;
            }
            else
            {
                book *now=head->next;
                while(num--)
                {
                    now=now->next;
                }
                cout<<now->isbn<<" "<<now->name<<" "<<now->price<<endl;
            }
        }
    }
    void Insert()
    {
        int pos;
        string a,b;
        double c;
        cin>>pos>>a>>b>>c;
        if(pos<1||pos>length+1)
        {
            cout<<"Sorry,the position to be inserted is invalid!"<<endl;
        }
        else
        {
            book *now=head->next;
            while(--pos)now=now->next;
            book *t=new book(a,b,c);
            t->next=now->next;
            now->next=t;
            length++;
            Output();
        }
    }
    void Delete()
    {
        int pos;
        cin>>pos;
        if(pos<1||pos>length)
        {
            cout<<"Sorry,the position to be deleted is invalid!"<<endl;
        }
        else
        {
            book *now=head->next;
            while(--pos)now=now->next;
            book *t=now->next->next;
            delete now->next;
            now->next=t;
            length--;
            Output();
        }
    }
    void Unique()
    {
        head->next=new book("","",-1);
        tail=head->next;
        string a,b;
        double c;
        cin>>length;
        int num=0;
        for(int i=0;i<length;++i)
        {
            cin>>a>>b>>c;
            int flag=0;
            book *now=head->next;
            while(now->next)
            {
                now=now->next;
                if(now->isbn==a)
                {
                    flag++;
                    num++;
                    break;
                }
            }
            if(flag)continue;
            tail->next=new book(a,b,c);
            tail=tail->next;
        }
        length-=num;
        Output();
    }
}List;
book *book::head;
book *book::tail;
int main()
{
    cout<<fixed<<setprecision(2);
    //List.Input();//T1-9
    //List.BubbleSort();//T2
    //List.MergeSort();//T2
    //List.Update();//T3
    //List.Inverse();//T4
    //List.inverse();//T4
    //List.Output();//T1-4
    //List.QueryMax();//T5
    //List.findfond();//T6
    //List.Query();//T7
    //List.Insert();//T8
    //List.Delete();//T9
    //List.Unique();//T10
    return 0;
}
实验一T11-20

相关文章: