ЗАДАНИЕ: АЛГОРИТМ: #include <STDIO.H> #include <IOSTREAM.H> #include <CONIO.H> #include <STDLIB.H> #include <time.h> class Lists { public: Lists(); ~Lists(); Lists& set(unsigned int,unsigned int =count);//записывает с добавкой Lists& del(unsigned int =count-1); //удаляет элемент unsigned int get(unsigned int =0); //читает unsigned int getcount() const; //количество объектов класса private: struct list{ unsigned int Nature; list* next; }; list *Head; //указывает на 1 элемент списка static int count; //содержит количество объектов класса };//end class Lists int Lists::count=0; void main(void){//---------------------------------------------------------- clrscr(); //2.Введем 20 случайных элементов списка Lists list; int i; time_t t; srand((unsigned) time(&t)); //чтобы генератор случайных чисел не "повторялся" for(i=0;i<20;i++) list.set(rand()%100); cout<<list.get(0); for(i=1;i<list.getcount();i++) cout<<","<<list.get(i); cout<<"\n"; //3.За один проход списка сохраним первые встретившиеся максимальные и минимальные элементы и их порядковые номера в списке unsigned int iMax,iMaxN=0,iMin,iMinN=0; iMin=iMax=list.get(0); for(i=0;i<list.getcount();i++){ if( iMin>list.get(i) ){ iMin=list.get(i); iMinN=i; }; if( iMax<list.get(i) ){ iMax=list.get(i); iMaxN=i; }; }; //4.Удалим минимальный элемент списка и запишем его после максимального if(iMinN<iMaxN){//если минимальный элемент расположен до максимального list.del(iMinN); list.set(iMin,iMaxN); }else{ //если минимальный элемент расположен после максимального list.del(iMinN); list.set(iMin,iMaxN+1); }; cout<<list.get(0); for(i=1;i<list.getcount();i++) cout<<","<<list.get(i); cout<<"\n"; cout<<"MAX="<<iMax<<", MIN="<<iMin; getch(); };//end main---------------------------------------------------------------- //Lists function Lists::Lists(){ Head=NULL; } //-------------------------------------- Lists& Lists::set(unsigned int iN,unsigned int N){ if( N > count ) return *this; if(N==0){ if(!count ){ list* iX=new list; Head=iX; iX->next=iX; iX->Nature=iN; count++; return *this; }else{ list* iX=new list; iX->next=Head; iX->Nature=iN; Head=iX; count++; return *this; }; }; list* lX; lX=Head; for(unsigned int i=N;i>=2;i--){ lX=(lX->next); }; list*iX=new list; iX->next=(lX->next); lX->next=iX; iX->Nature=iN; count++; return *this; }//end set() //-------------------------------------- Lists& Lists::del(unsigned int N){ if( N >= count ) return *this; if(N==0){ if(1==count){ delete Head; Head=NULL; }else{ list* lX; lX=Head; Head=(Head->next); delete lX; }; count--; return *this; }; list* lX; lX=Head; for(unsigned int i=N;i>=2;i--){ lX=(lX->next); }; list* lY; lY=(lX->next); lY==(lY->next)?lX->next=lX:lX->next=(lY->next); delete lY; count--; return *this; }//end del() //-------------------------------------- unsigned int Lists::get(unsigned int N){ if( N >= count ) return 0; list* lX; lX=Head; for(unsigned int i=N;i>=1;i--){ lX=(lX->next); }; return (lX->Nature); }//end get() //-------------------------------------- unsigned int Lists::getcount() const{ return count; } //-------------------------------------- Lists::~Lists(){ if(count!=0){ for(unsigned int i=count;i>0;i--)del(); }; } //end Lists function--------------------
Ключевые слова:
однонаправленный однонаправленные список списки
|
|||||||