Форум программистов, компьютерный форум CyberForum.ru

Не могу найти ошибку в коде - C++

Восстановить пароль Регистрация
 
Nastya19kiss
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
07.06.2012, 17:03     Не могу найти ошибку в коде #1
Работаю со связанным списком. нужно удалить из него указанный элемент.
Вот код функции удаления:
C
1
2
3
4
5
6
7
8
9
void List::Delete(int Number){
      int i=1;
         //âñïîìîãГ*òåëüГ*ûì ГіГЄГ*Г§Г*òåëü
      for(Uzel *curr=head;curr =! NULL;curr=curr->next){
        if (DataItem == curr->data) 
                curr->data=curr->next->data;
          }
  printf("Udalenie end\n");
 }
Но почему то работает вот так:
список изначальный такой:
1
2
3
4
5
Какой элемент удалить? 2
Результат:
1
3
3
4
5
Помогите исправить ошибку
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2012, 17:03     Не могу найти ошибку в коде
Посмотрите здесь:

C++ Не могу найти ошибку в коде :(
C++ Не могу найти ошибку в коде
C++ Не могу найти ошибку в коде
Не могу найти ошибку в коде C++
C++ Не могу найти ошибку в коде
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
07.06.2012, 17:06     Не могу найти ошибку в коде #2
потому что надо не дату копировать, а указатель на след звено
C++
1
2
3
4
5
6
7
if (..)
{
Uzel* tmp = curr->next;
curr->next=curr->next->next;
delete tmp;
tmp = NULL;
}
но только еще надо сделать проверку - если удаляемое звено последнее, то curr->next = NULL;
Nastya19kiss
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
07.06.2012, 17:36  [ТС]     Не могу найти ошибку в коде #3
подскажите пожалуйста как вставить элемент в список на указанное место
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
07.06.2012, 17:38     Не могу найти ошибку в коде #4
указанное это какое - по индексу или прям Uzel* родительский дан?
Nastya19kiss
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
07.06.2012, 18:14  [ТС]     Не могу найти ошибку в коде #5
по индексу

Добавлено через 1 минуту
Заготовка есть
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  void Insert(int Number, int DataItem){ 
  Number--;
  Uzel *NewItem=new(Uzel);
  NewItem->data=DataItem; 
  NewItem->next = NULL;
 //ñïèñîê Г*ГҐ ГЇГіГ±ГІ
Uzel *Current = head;
    for(int i=1; i < Number && Current->next!=NULL; i++)
    Current=Current->next;
    if (Number == 0){
    //ГўГ±ГІГ*âëÿåì Г*îâûé ýëåìåГ*ГІ Г*Г* ïåðâîå ìåñòî
      NewItem->next = head;
      head = NewItem;
    }
    else {//ГўГ±ГІГ*âëÿåì Г*îâûé ýëåìåГ*ГІ Г*Г* Г*åïåðâîå ìåñòî
      if (Current->next != NULL) 
        NewItem->next = Current->next;
      Current->next = NewItem;
    }
    printf("Element vstavlen!!!\n")
Но выдает ошибки:
C:\Users\Ïîëüçîâàòåëü\Documents\Ëèòåðàòóðà äëÿ èíñòèòóòà\Îïåðàöèîííûå ñèñòåìû\volkova (1)\volkova\OS\lab5.cpp(93) : error C2065: 'head' : undeclared identifier
C:\Users\Ïîëüçîâàòåëü\Documents\Ëèòåðàòóðà äëÿ èíñòèòóòà\Îïåðàöèîííûå ñèñòåìû\volkova (1)\volkova\OS\lab5.cpp(93) : error C2440: 'initializing' : cannot convert from 'int' to 'class Uzel *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Users\Ïîëüçîâàòåëü\Documents\Ëèòåðàòóðà äëÿ èíñòèòóòà\Îïåðàöèîííûå ñèñòåìû\volkova (1)\volkova\OS\lab5.cpp(98) : error C2440: '=' : cannot convert from 'int' to 'class Uzel *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Users\Ïîëüçîâàòåëü\Documents\Ëèòåðàòóðà äëÿ èíñòèòóòà\Îïåðàöèîííûå ñèñòåìû\volkova (1)\volkova\OS\lab5.cpp(99) : error C2440: '=' : cannot convert from 'class Uzel *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast

Добавлено через 9 минут
Я баран!!!я нашла ошибку

Добавлено через 4 минуты
Тогда может если Вам не сложно то поможете мне с сортировкой пузырьком в этом списке???

Добавлено через 12 минут
Вот то что у меня получилось с сортировкой:
C
1
2
3
4
5
6
7
8
9
10
11
void List::Sort(){
      int trash=0;
      for(Uzel *curr=head;curr =! NULL;curr=curr->next){
          if(curr->data > curr->next->data){
              trash = curr->data;
              curr->data = curr->next->data;
              curr->next->data = trash;
          }
      }
   printf("Sortirovka end\n");
  }
Но работает не правильно. я в цикле что то напутала, исправте меня пожалуйста
Yandex
Объявления
07.06.2012, 18:14     Не могу найти ошибку в коде
Ответ Создать тему
Опции темы

Текущее время: 07:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru