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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2008, 11:18   #1
cbst
Новичок
Джуниор
 
Регистрация: 11.06.2008
Сообщений: 1
По умолчанию Просьба помочь новичку со списками.

Проблема состоит в следущем : имеется два списка , необходимо сравнить совпадают они или нет .Можно взять даже простейший пример , где в каждом списке один элемент .
Пробовал сделать это сам , но у меня получилось лишь сравнить их длинну
Код:
int Coincidence(pLIST pL,pLIST pL1)
{
    pNODE pN=pL->begin;
	{
		if (pL->len==pL1->len) printf("\n Списки совпадают);
         else
         {
			 printf("\n Списки не совпадают");   
         }
    puts("");
   }
 return 0;
}
Жду вашей помоши . Заранее спасибо.

Последний раз редактировалось cbst; 11.06.2008 в 13:33.
cbst вне форума Ответить с цитированием
Старый 11.06.2008, 18:20   #2
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Примерно так:
Код:
bool operator==(const pLIST a, const pLIST b)
{
  pNODE i = a->begin,
        j = b->begin;
  for(;;) {
    if(i->value != j->value) return false;
    i = i->next;
    j = j->next;
    if(!i && !j) return true;
    if(!i || !j) return false;
  }
}
filosof_x86 вне форума Ответить с цитированием
Старый 11.06.2008, 19:32   #3
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Код:
int len = a->len;
if (len != b->len) return false;

pNODE n1 = a->begin, n2 = b->begin;

for (int i = 0; i < len; i++) {
  if (n1->value != n2->value) return false;
  n1 = n1->next;
  n2 = n2->next;
}

return true;
still_alive вне форума Ответить с цитированием
Старый 12.06.2008, 09:07   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

а будут ли равны такие списки

вася
петя
коля

петя
Коля
вася
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.06.2008, 19:32   #5
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

still_alive, да, так лучше, я len не заметил что есть у списка. Можно еще избавиться от временных переменных, если у последнего элемента в списке next будет равен нулю:

Код:
bool operator==(const pLIST a, const pLIST b)   
{  
  if(a->len != b->len) return false;
  pNODE i = a->begin,  
        j = b->begin;  
  for(;i;) {  
    if(i->value != j->value) return false;  
    i = i->next;  
    j = j->next;  
  }   
}
Цитата:
Сообщение от evg_m Посмотреть сообщение
а будут ли равны такие списки

вася
петя
коля

петя
Коля
вася
На мой взгляд, не должны. std::list из STL думает также:

Код:
#include <iostream>
#include <list>
#include <string>

int main()   
{  
  const char *list_1[] = {"вася", "петя", "коля"}; 
  const char *list_2[] = {"петя", "коля", "вася"};
  std::list<std::string> a, b;
  a.assign(list_1, list_1+3);
  b.assign(list_2, list_2+3);
  std::cout << (a == b) << std::endl;
  return 0;  
}
filosof_x86 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со списками Dimo444ka Помощь студентам 2 01.06.2008 16:34
Никак не могу составить формулу... просьба помочь... c_zurab Microsoft Office Excel 7 14.03.2008 23:34
Просьба помочь с состовлением формулы... c_zurab Microsoft Office Excel 1 11.03.2008 01:35
Просьба помочь с решением уравнения Stelix Помощь студентам 9 14.11.2007 19:00
С++ - задача со списками Галечка Помощь студентам 4 08.11.2007 23:05