Изменение функции сортировки в данном случае написано по убыванию а нужно по возрастанию, также изменить функцию поиска максимального элемента(работает не правильно) Вот три исходных файла: List.h | Цитата | #ifndef LIST H #define LIST_H #include<iostream.h> #include<assert.h> #include"listnd.h"
template<typename NODETYPE> class List { public: List( ); ~List( ); void insertAtFront(const NODETYPE &); void insertAtBack(const NODETYPE &); int removeFromFront(NODETYPE &); int removeFromBack(NODETYPE &); int isEmpty( ) const {return firstPtr==0;} void print( ) const; void maximumSearch(); void sorting(); private: ListNode<NODETYPE> *sledPtr; ListNode<NODETYPE> *firstPtr; ListNode<NODETYPE> *lastPtr; ListNode<NODETYPE> *getNewNode(const NODETYPE &); };
template<typename NODETYPE> List<NODETYPE>::List( ) { firstPtr=lastPtr=0; } template<typename NODETYPE> List<NODETYPE>::~List( ) {setlocale(LC_ALL, "Russian"); if (! isEmpty( )) { cout<<"Удаление узлов..."<<endl; ListNode<NODETYPE> *currentPtr=firstPtr, *tempPtr; while (currentPtr!=0) { tempPtr=currentPtr; cout<<tempPtr->data<<endl; currentPtr=currentPtr->nextPtr; delete tempPtr; } } cout<<"Все узлы удалены"<<endl<<endl; }
template<typename NODETYPE> ListNode<NODETYPE> * List<NODETYPE>::getNewNode(const NODETYPE &value) { ListNode<NODETYPE> *ptr=new ListNode<NODETYPE>(value); assert(ptr!=0); return ptr; } template<typename NODETYPE> void List<NODETYPE>::insertAtFront(const NODETYPE &value) { ListNode<NODETYPE> *newPtr=getNewNode(value); if (isEmpty( )) firstPtr=lastPtr=newPtr; else { newPtr->nextPtr=firstPtr; firstPtr=newPtr; } }
template<typename NODETYPE> void List<NODETYPE>::insertAtBack(const NODETYPE &value) { ListNode<NODETYPE> *newPtr=getNewNode(value); if (isEmpty( )) firstPtr=lastPtr=newPtr; else { lastPtr->nextPtr=newPtr; lastPtr=newPtr; } }
template<typename NODETYPE> int List<NODETYPE>::removeFromFront(NODETYPE &value) { if (isEmpty( )) return 0; else { ListNode<NODETYPE> *tempPtr=firstPtr; if (firstPtr==lastPtr) firstPtr=lastPtr=0; else firstPtr=firstPtr->nextPtr; value=tempPtr->data; delete tempPtr; return 1; } }
template<typename NODETYPE> int List<NODETYPE>::removeFromBack(NODETYPE &value) { if (isEmpty( )) return 0; else { ListNode<NODETYPE> *tempPtr=lastPtr; if (firstPtr==lastPtr) firstPtr=lastPtr=0; else { ListNode<NODETYPE> *currentPtr=firstPtr; while(currentPtr->nextPtr != lastPtr) currentPtr=currentPtr->nextPtr; lastPtr=currentPtr; currentPtr->nextPtr=0; } value=tempPtr->data; delete tempPtr; return 1; } }
template<typename NODETYPE> void List<NODETYPE>::print( ) const {setlocale(LC_ALL, "Russian"); if (isEmpty( )) { cout<<"Список пуст"<<endl<<endl; return; } ListNode<NODETYPE> *currentPtr=firstPtr; cout<<"Список состоит из..."<<endl; while(currentPtr!=0) { cout<<currentPtr->data<<" "; currentPtr=currentPtr->nextPtr; } cout<<endl<<endl; }
template<typename NODETYPE> void List<NODETYPE>::maximumSearch() {setlocale(LC_ALL, "Russian"); if (isEmpty( )) { cout<<"Список пуст"<<endl<<endl; return; } else { ListNode<NODETYPE> *MPtr=firstPtr; if (firstPtr==lastPtr) firstPtr=lastPtr=MPtr; else { ListNode<NODETYPE> *currentPtr=firstPtr; while(currentPtr!=lastPtr) { if (currentPtr->data>MPtr->data) MPtr=currentPtr; else MPtr=MPtr; currentPtr=currentPtr->nextPtr; } cout<<"Максимальный элемент списка= "<<MPtr->data<<endl; } } }
template<typename NODETYPE> void List<NODETYPE>::sorting() {setlocale(LC_ALL, "Russian"); if (isEmpty( )) { cout<<"Список пуст"<<endl<<endl; return; } else { int count=0; ListNode<NODETYPE> *currentPtr=firstPtr, *MPtr=firstPtr, *MaxPtr=firstPtr; while (currentPtr!=0) { currentPtr=currentPtr->nextPtr; count++; } currentPtr=firstPtr; for (int i=0; i<count; i++) { if (MPtr->data>currentPtr->data) MPtr=currentPtr; else MPtr=MPtr; currentPtr=currentPtr->nextPtr; }
if ((firstPtr==lastPtr) || (firstPtr==MPtr)) firstPtr=MPtr; else { if (MPtr->nextPtr==0) { currentPtr=firstPtr; while (currentPtr->nextPtr!=MPtr) currentPtr=currentPtr->nextPtr; MPtr->nextPtr=firstPtr; firstPtr=MPtr; lastPtr=MPtr; currentPtr->nextPtr=0; } else { currentPtr=firstPtr; while (currentPtr->nextPtr!=MPtr) currentPtr=currentPtr->nextPtr; sledPtr=MPtr->nextPtr; currentPtr->nextPtr=sledPtr; MPtr->nextPtr=firstPtr; firstPtr=MPtr; lastPtr=MPtr; } }
for (int i=1; i<count; i++) { currentPtr=MPtr->nextPtr; MaxPtr=MPtr->nextPtr; while (currentPtr!=0) { if (MaxPtr->data>currentPtr->data) MaxPtr=currentPtr; else MaxPtr=MaxPtr; currentPtr=currentPtr->nextPtr; } if ((MaxPtr==MPtr->nextPtr) && (MaxPtr->nextPtr==0)) { MaxPtr->nextPtr=firstPtr; firstPtr=MaxPtr; MPtr->nextPtr=0; } else { if (MaxPtr->nextPtr==0) { currentPtr=firstPtr; while (currentPtr->nextPtr!=MaxPtr) currentPtr=currentPtr->nextPtr; MaxPtr->nextPtr=firstPtr; firstPtr=MaxPtr; currentPtr->nextPtr=0; } else { if (MaxPtr==MPtr->nextPtr) { sledPtr=MaxPtr->nextPtr; MPtr->nextPtr=sledPtr; MaxPtr->nextPtr=firstPtr; firstPtr=MaxPtr; } else { currentPtr=MPtr->nextPtr; while (currentPtr->nextPtr!=MaxPtr) currentPtr=currentPtr->nextPtr; sledPtr=MaxPtr->nextPtr; currentPtr->nextPtr=sledPtr; MaxPtr->nextPtr=firstPtr; firstPtr=MaxPtr;
} } } } currentPtr=firstPtr; cout<<"Отсортированный список состоит из..."<<endl; while(currentPtr!=0) { cout<<currentPtr->data<<" "; currentPtr=currentPtr->nextPtr; } cout<<endl<<endl; } }
#endif
|
Listnd.h | Цитата | #ifndef LISTND_H #define LISTND_H template<typename NODETYPE> class ListNode { public: ListNode(const NODETYPE &); NODETYPE getData( ) const; NODETYPE data; ListNode *nextPtr; };
template<typename NODETYPE> ListNode<NODETYPE>::ListNode(const NODETYPE &info) { data = info; nextPtr = 0; } template<typename NODETYPE> NODETYPE ListNode<NODETYPE>::getData( ) const { return data; } #endif
|
Main.cpp | Цитата | #include<iostream.h> #include"list.h"
main( ) { setlocale(LC_ALL, "Russian"); cout<<"Проверка целых чисел"<<endl<<endl; List<int> i_List; cout<<"Выберите:"<<endl; cout<<"1 - Вставить в начало списка"<<endl; cout<<"2 - Вставить в конец списка"<<endl; cout<<"3 - Удалить из начала списка"<<endl; cout<<"4 - Удалить из конца списка"<<endl; cout<<"5 - Найти максимальный элемент списка"<<endl; cout<<"6 - Сортировка списка по убыванию"<<endl; cout<<"7 - Завершить обработку списка"<<endl; int choice, value; do { cout<<"? "; cin>>choice; switch (choice) { case 1: cout<<"Введите целое значение: "; cin>>value; i_List.insertAtFront(value); i_List.print( ); break; case 2: cout<<"Введите целое значение: "; cin>>value; i_List.insertAtBack(value); i_List.print( ); break; case 3: if (i_List.removeFromFront(value)) cout<<value<<" удаляется из списка"<<endl; i_List.print( ); break; case 4: if (i_List.removeFromBack(value)) cout<<value<<" удаляется из списка"<<endl; i_List.print( ); break; case 5: i_List.maximumSearch( ); break; case 6: i_List.sorting( ); break; } } while(choice!=7); cout<<"Конец проверки списка целых чисел"<<endl<<endl;
system("Pause"); return 0; }
|
|