Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2009, 09:57   #1
aurora_87
Пользователь
 
Регистрация: 25.12.2008
Сообщений: 16
По умолчанию удаление элемента из списка

однонаправленный список, содержащий инфу об авто: марка, цена. Нужно удалить сведения об авто заданной марки

вот мой список

Код:
struct avto
  {
  char marka[10];
  int cena;
  struct avto *next;
  };
struct avto *tek, *beg=NULL, *end=NULL;
удаление я оформила в функцию, не могу найти ошибку:

Код:
//udalenie avto zadannoj marki
void f()
{
char st[20];
tek=beg;
printf("Vvedite marky avto");
puts(st);
if (strcmp(tek->marka,st)==0)
  beg=beg->next;
  tek=tek->next;

tek=beg;
while (tek!=NULL)
  {
  ////oshibka nizhe
  if (tek->next->marka==0)
    tek->next=tek->next->next;
  else
    tek=tek->next;
  }
printf ("\n  Udalenie vipolneno!");
}

Последний раз редактировалось Sazary; 18.06.2009 в 13:36.
aurora_87 вне форума Ответить с цитированием
Старый 18.06.2009, 14:02   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну так вы сравниваете строку с числом:
Код:
////oshibka nizhe
  if (tek->next->marka==0)
Да и удаления элементов я у вас что-то не вижу. После такого удаления память останется занята.

И еще: puts выводит строку, а не считывает.

В общем, попробуйте как-нибудь так (писал прямо тут):

Код:
void f()
{
char st[20];
struct avto *tmp;
int fl = 0;
tek=beg;
gets(st);
tmp = NULL;

while(tek)
 {
  if(strcmp(tek->marka,st)==0)
   {
    if(tmp)
     {
      tmp->next = tek->next;
      free(tek);
      tek = tmp->next;
     }
     else
      {
       beg = beg->next;
       tmp = tek;
       tek = tek->next;
       free(tmp);
       tmp = NULL;
      }
    }
   else
    {
     tmp = tek;
     tek = tek->next;
    }
 }
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элемента из массива Ozerich PHP 10 14.02.2009 02:21
Ошибка при создании головного элемента двусвязного списка Дамир Помощь студентам 1 16.11.2008 16:09
Удаление элемента динамического массива Dogmat Помощь студентам 6 13.07.2008 14:33
Удаление элемента массива chiffa Общие вопросы Delphi 1 03.01.2008 19:24