Используя стек проверить, чтов последовательностивсе числа разные

Стек я создал, осталось сделать функцию, которая проверит, что все числа разные. Вот с ней и не получается.

#include <iostream>
using namespace std;


struct Tstack 
{
    int value;
    Tstack *next;
};

void push (Tstack **head, int value) // Добавление элемента в стек
{
    
    Tstack *tmp = new Tstack; 
    if (tmp == NULL){
        exit (-100); 
    }
    
        tmp-> next = *head;
        tmp-> value = value; 
        *head = tmp; 
}

void printStack (const Tstack *head){ // вывод на экран 
    cout << "\nstack" << endl;
    while (head)
    {
    cout << "  " << head->value << endl; 
    head = head->next; 
    }
    cout << endl;
}    
    
void sravnenie (Tstack *head){ // Сравнение чисел
    
    cout << "Проверка, что все числа разные:" << endl;
    
    while (head)
    {
    if  (head->value == head->value){
        cout << " есть совпадения" << endl; 
    } else
    cout << "совпадений нет" << endl; 
    
    head = head->next; 
    }
}    

int main() {
    setlocale(LC_ALL,"rus");
    int i; 
    Tstack *head = NULL;
    Tstack *tmp;
    
    push(&head, 10);
    push(&head, 156);
    push(&head, 23);
    printStack(head);
    sravnenie(head);
    
    return 0;
}

Ответы (1 шт):

Автор решения: MBo

Если единственная доступная структура - стек, то делаем так:

Создаём два стека

Заполняем один данными

Извлекаем из него вершину, кладём в переменную.

Извлекаем все остальные элементы по очереди, сравнивая с переменной, затем складывая во второй стек.

Повторяем всё то же самое, положив в переменную вершину второго стека и перебрасывая из второго стека в первый, и так далее, пока стеки не опустеют

Посмотрите на рабочий пример на Python

import random

n = 8
#создали список из двух стеков
stacks = []
stacks.append([])
stacks.append([])

#заполнили случайными числами
for i in range(10):
    stacks[0].append(random.randrange(1, 2*n))
print(stacks)

i = 0  #счётчик циклов
while True:
    #определяем индексы источника и приёмника
    #на каждом шаге они меняются местами
    s_from = i % 2
    s_to = (i + 1) % 2

    #стек пустой, всё кончилось
    if len(stacks[s_from]) == 0:
        break

    #извлекаем вершину стека
    temp = stacks[s_from].pop()

    #сравниваем с ней все оставшиеся элементы
    while len(stacks[s_from]):
        t = stacks[s_from].pop()
        if t == temp:
            print('совпадение ', temp)
        #складываем их во второй стек
        stacks[s_to].append(t)

    i+= 1

[[11, 5, 13, 11, 5, 9, 15, 8, 4, 7], []]
совпадение  11
совпадение  5
→ Ссылка