Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Сортировка списка по возрастанию, Изменение текста программы 
V
    Опции темы
Grib5000
Дата 4.2.2012, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.2.2012

Репутация: нет
Всего: нет



Изменение функции сортировки в данном случае написано по убыванию а нужно по возрастанию, также изменить функцию поиска максимального элемента(работает не правильно) Вот три исходных файла:
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;
}



PM MAIL   Вверх
t_gran
Дата 5.2.2012, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: 33
Всего: 37



List.h
Код

#ifndef LIST_H
#define LIST_H

#include <iostream>
#include <cassert>
#include "listnd.h"

using namespace std;

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)
         {
            if (currentPtr->data > MPtr->data)
            {
               MPtr = currentPtr;
            }
            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



Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  archive.7z 186,12 Kb


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
Grib5000
Дата 6.2.2012, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.2.2012

Репутация: нет
Всего: нет



Спасибо большое очень выручил!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.