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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Однастороний список, С++ 
:(
    Опции темы
ledi
Дата 26.4.2006, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите пожалуйсто, на этой нидели уже сдавать надо, а у меня проблемы  smile 
Не работает функция izmest, эта функция должна стирать в списке те элементы у каторых цифра в списке совподает с порядковым номером, например, если у нас список = 54321, то izmest = 5421

Код

#include <iostream>
using namespace std;

struct elem                    
       {
       friend class saraksts;  
       elem *next;             
       int num;                
};

class saraksts
      {
      private:
              elem *sak;        
              elem *end;         
      public:                   
             saraksts();         
             ~saraksts();
             void pievienot(int);
             void erase();
             void print();
             void izmest();
      };
             
             saraksts::saraksts()                    
                  { 
                  sak = end = NULL;
                  };
                  
             saraksts::~saraksts()                  
                  {
                  erase();
                  };
                  
             void saraksts::pievienot(int x)        
             {
                  elem *tmp = new elem;
                  tmp -> next = NULL;
                  tmp -> num = x;
                  if ( sak == NULL )                
                  {
                     sak = tmp;                     
                  }
                  else
                  {
                     end -> next = tmp;             
                  }
                  end = tmp;
             };

             void saraksts::erase()                 
             {
                  elem *tmp;                        
                  while ( sak != NULL )             
                  {
                        tmp = sak;
                        sak = sak -> next;
                        delete tmp;
                  }
             };

             void saraksts::print()                 
             {
                  int num;
                  elem *tmp = sak;
                  if ( tmp == NULL ) 
                  {               
                     cout << "Saraksts ir tukshs!" << endl;
                  }
                  else 
                  {
                       while ( tmp != NULL ) 
                       {
                             cout << tmp -> num << " ";
                             tmp = tmp -> next; 
                       }
                  }
             };
             
             void saraksts::izmest()    
             {
                  int i=1;
                  elem *p1 = sak;
                  elem *p2 = sak;
                  elem *tmp = sak;
                  while (p2 != NULL)
                  {
                       
                        tmp = tmp -> next;
                        if (tmp != NULL) {
                        if (p2 == sak) {
                        if ( p2 -> num == i) {
                        
                           sak = sak -> next;
                           p1 = sak;
                           delete p2;
                           p2 = sak;
                           tmp = sak;
                        }
                         else
                        {
                             p2 = p2 -> next;
                        }
                       }
                        else if (tmp == end) 
                        {
                             if (p2 -> num == i) { 
                             
                                    p1 -> next = tmp;
                                    delete p2;
                                    p2 = tmp = NULL;
                                     }
                                    }else 
                                    {
                                          if (p2 -> num == i) 
                                          {
                                             p1 -> next = tmp;
                                             delete p2;
                                             p2 = tmp;
                                           }
                                           else
                                          {
                                            p2 = p2 -> next;
                                             p1 = p1 -> next;
                                          } 
                                        }
                                       }   else {
                                               p2 = NULL;
                                               }
                             
                          
                        }
                              
             
                i++;           
                        
                        
                  
             
};        






Зарание ОГРОМНОЕ спасибо за помощ! smile  
PM MAIL   Вверх
Lamak
Дата 26.4.2006, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 8.5.2005
Где: Украина,Одесса

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



 

136 строка   она за цыклом 

если запостиш тестовый main() то будет проще разобраться 
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
ledi
Дата 26.4.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибки, сейчас попробуем!  smile  
PM MAIL   Вверх
Lamak
Дата 26.4.2006, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 8.5.2005
Где: Украина,Одесса

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



 как должен работать izmest ?                                   

если у нас список 
    1 2 3 4 5 6
=  5 4 3 1 4 6  то izmest 
=  5 4 1 4        
или     
=  5 4 1 6
 
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
ledi
Дата 27.4.2006, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



первый вариант  smile  если у нас 
543146 то
5414  
PM MAIL   Вверх
Lamak
Дата 27.4.2006, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 8.5.2005
Где: Украина,Одесса

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



тогда при удалении элемента надо i++;

а вообще
мне сложно разобраться в твоём коде и понять где там ошибка
но если хош могу завтра с утречка сварганить свой вариант метода  izmest

Добавлено @ 00:22 
т.е. уже сегодня smile  
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
ledi
Дата 27.4.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ой, даже и незнаю, свою как то роднее  smile  да и + я могу представить, 4то за код будет написан! Я почти уверенна, 4то много всего не пойму в нем т.к. я не професионал, а только 1курс  smile 

Спасибо за помощ полюбому!!!!!   smile 

 
PM MAIL   Вверх
MAKCim
Дата 27.4.2006, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



friend в elem явно лишний
а так
Код

void saraksts::izmest()
{
    unsigned int i=1;
    elem* ptr=sak, previos=0;
    while (ptr)
    {
        elem* temp=ptr->next;
        if (ptr->num==i)
        {
            if (!previos) sak=sak->next;
            else previos->next=ptr->next;
            delete ptr;
        }
        else previos=ptr;
        ptr=temp;
        i++;
    }
}
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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

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


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

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

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

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


 




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


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

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