Алгоритм проверки списка на наличие 2 одинаковых элементов

Описать процедуру, которая проверяет, есть ли в списке L хотя бы 2 одинаковых элемента.

Алгоритм и общая идея:
1.Устанавливаем "флаг" в положение "нет хотя бы двух одинаковых элементов" (ноль, т.е. ложь)

2. Надо сравнивать I-ый элемент со II-ым, III-им... и т.д. до конца списка.
Потом II-ой с третьим, четвертым... и так далее.

Создаем вложенный друг в друга цикл, в котором вложенный начинается на 1 больше, чем значение переменной первого.

Внутри этих циклов проверяем не равны ли элементы друг другу с номерами счетчиков 1 и 2 цикла.

Если условие выполняется, т.е. имеется хотя бы два однинаковых элемента в списке, то устанавливаем флажок в положение 1 (истина).

В конце выдаем результат согласно флагу. Вот и вся программа :)

Входные данные и описание:

  • L[SIZE] - собственно наш список заданный массивом размера SIZE.
  • next[SIZE] - массив, хранящий положение следующего элемента для каждого элемента списка L.

    #define SIZE 100
    int L[SIZE], next[SIZE];
     
    int does_equal()
    {
    int equal = 0; // флажок наличия в списке хотя бы двух одинаковых элементов. По- умолчанию установлен в "ложь"
     
    for (int i = 0; i < SIZE; i++)
    {
      for (int j = i+1; j < SIZE; j++)
      {
          if (L[i] == L[next[j]]) equal = 1;
      }
    }
     
    if (equal == 1) printf ("В списке есть одинаковые элементы!\n")
    else printf ("Одинаковые элементы в списке не найдены!\n");
     
    return equal;
    }

  • Ключевые слова: 
    одинаковые элементы, список
    ВложениеРазмер
    Proverka_spiska_odinakovie_elementi.zip484 байта

    ~

    ~

    Господа, несколько

    Господа, несколько пожеланий.
    Во-первых, спасибо за дисскусию. Однако, прошу проявлять уважение к собеседнику и его мнению. В случае, явных недоброжелательных сообщений буду принимать меры.
    Во-вторых, в цели сайта не ставится дать однозначное, истинно-правильное решение задачи(что в принципе для большинства алгоритмов и невозможно, как говорится, найденная ошибка в программе, всегда является предпоследней ;) ). Всего лишь предложить один из всевозможных вариантов решения, что автором и сделано. Кстати, сам автор предложил позднее доработать заметку и рассмотреть различные варианты, в том числе и с динамическим списком.
    Ну и последнее, возникшее недоразумение по-поводу правильного задания списка связано не с совсем корректной постановкой задачи. В постановке не указано, что список элементов обязан быть динамическим, поэтому и рассмотрена такая смешанная структура, в целом, конечно, неудачная.

    Честно говоря, был удивлен

    Честно говоря, был удивлен реализацией списка в виде массива для такой задачи. :) Есть конструктивное предложение создать классический список с полем значений и полями указателей. А потом реализовать алгоритм для такого списка.

    Артем, Вы совершенно правы. Я

    Артем, Вы совершенно правы. Я тоже был несколько удивлен! :)

    В принципе, при обсуждениии с

    В принципе, при обсуждениии с преподавателям о форме сдачи, сошлись на том, что можно выполнить оба варианта: и задание списков с помощью массивов, и с помощью динамических структур.

    Уважаемая редакция! Попрошу

    Уважаемая редакция! Попрошу забанить Хубларяна Вадима он спамер))))))))))))Вот вот за этот код!!!))))Вот нормальный алгоритм выполняющий вышепоставленную задачу))!!!
    ............
    int equal()
    {
    int odinakovie = 1; //переменная считающая количество одинаковых элементов
    for(i = 0; i < SIZE; i++) { //SIZE - переменная выставляющая в #define SIZE 100 размер массива или чего либо другого
    if(odinakovie > 1) //если нашли 2 одинаковых элемента прирываем цикл оператором break;
    break;

    for(j = i + 1; spisok[j] != '\0'; j++)
    if(spisok[i] == spisok[j]) {
    odinakovie++;
    printf("\n\nThere are 2 equal elements in the list!!!!");
    break;
    }//if
    }//for

    if(odinakovie == 1) ..если одинаковых элементов не нашли
    printf("\n\nThere are no equal elements in the list!!!!");
    }

    Уважаемый пользователь,

    Уважаемый пользователь, называющий себя Чегуров Антон или либо какой другой спам бот.

    Привожу объективные аргументы Вам в ответ:
    1. Большая просьба каким-нибудь способом все таки узнать, что такое однонаправленный список и чем он отличается от простого массива!
    Собственно где указатели на следующий жлемент списка??? Без них это просто массив.

    2. Также исходя из условия задачи, нет смысла считать количество одинаковых элементов, ведь Вы даже не выводите это значение. Но почему то заявляете в строке "There are 2 equal elements in the list!!!!" их именно два...

    3. Хм, а что за новый стандарт форматирования кода? Или это его отсутствие? Это же неуважение к себе и читателям.

    4. Путей решения задачи существует много, просто задание нужно читать внимательно.

    P.S. Кстати напомню, что правила запрещают Оффтоп (http://ru.wikipedia.org/wiki/Офтопик) и Флейм (http://ru.wikipedia.org/wiki/Флейм), а побуждение других пользователей к нему вообще не умествно.

    И на последок, я не спамер, я просто сдаю задачи. Кстати, которые должны быть для каждого индивидуальные.

    Вадик я не виноват что

    Вадик я не виноват что нормальное чувство юмора у тебя отсутствует!
    1)Ты сам вначале сделал массив без указателей!
    2)И вообще лучше всего задавать списки с помощью структур, а не массивов, так как они могут быть неограниченного размера.
    3)В задании сказано проверить есть ли в списке хотя бы два одинаковых элемента, я это и делаю.

    Неправда, не делал. Смотри

    Неправда, не делал. Смотри внимательней мой пост.
    Кому лучше?
    Не спорю, делаешь, но к тому же зачем-то считаешь количество неодинаковых элементво и позже не используешь это. А зря.

    Ты опять пошутил или мне кажется? Когда нужно смеяться, предупредишь.

    Какой смысл продолжать

    Какой смысл продолжать сравнение элементов в списке, если одно уже найдено?