Используя стек проверить, чтов последовательностивсе числа разные
Стек я создал, осталось сделать функцию, которая проверит, что все числа разные. Вот с ней и не получается.
#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