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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> списки в языке Си 
:(
    Опции темы
vitaxa3581
Дата 11.3.2013, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребята подскажите момент. Суть задачи такова: "Определить является ли четным длинна списка, не подсчитывая количество его элементов" выход нашел такой: пробежать по списку через next -> next если условие выполняется то выдать строку "список четный", и это работает, но как проверить на не выполнения условия???
Код


int kolodd(QUE * q)                  
    {QUE * current = q;
  
     while(current !=NULL){
    
          current = current ->next->next;}
          
          printf ("\n Cписок четный");
      
}


PM MAIL   Вверх
feodorv
Дата 11.3.2013, 22:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(vitaxa3581 @  11.3.2013,  22:43 Найти цитируемый пост)
          current = current ->next->next;}

Тут может оказаться так, что current ->next есть NULL, тогда получите нарушение доступа.

Мысль, в общем-то, правильная - перепрыгивать элементы через одного, только это корректно нужно делать:
Код

int koleven( const QUE *q )                  
{
   while( q !=NULL )
  {
     if( q->next == NULL ) return 0;
     q = q->next->next;
  }
  return 1;
}

int main( void )
{
  ...
  printf ("Cписок %sчетный\n", koleven(q) ? "" : "не");
}



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
fish9370
Дата 11.3.2013, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

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



ну добавь в тело какой-нибудь триггер типа:

Код

unsigned char odd = 255;

while ((current = current->next)) {
    odd ^= odd;
}

if (odd)
    printf('список не четный');
else
    printf('список четный');


Это сообщение отредактировал(а) fish9370 - 11.3.2013, 22:17


--------------------
undefined
PM MAIL WWW ICQ   Вверх
vitaxa3581
Дата 11.3.2013, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



  ребята огромное СПАСИБО!!!!!!
PM MAIL   Вверх
feodorv
Дата 11.3.2013, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(fish9370 @  11.3.2013,  23:09 Найти цитируемый пост)
ну добавь в тело какой-нибудь триггер типа:

А вот мне идея с треггером не очень понравилась: здесь треггер - это просто завуалированный счётчик числа элементов. А ->next->next очень нравится  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
fish9370
Дата 11.3.2013, 22:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

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



Цитата(feodorv @  11.3.2013,  22:17 Найти цитируемый пост)
А вот мне идея с треггером не очень понравилась


а мне нравится, жаль под условия задачи, действительно не подходит..  smile 


--------------------
undefined
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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