#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; }
相关文章: