Я реализовал стек с указателями, который работает так, как предполагается. Теперь мне нужно, чтобы он нажимал на стек, не нажимая дубликат. Например, если я нажимаю «2» в стек, нажатие другого «2» по-прежнему будет иметь только один «2» в стеке, поскольку он уже существует.Нажатие на стек, содержащий ТОЛЬКО уникальные значения в C
Ниже приведен пример того, как я пытался создать новую функцию push. Я знаю, что я должен пересекать стек и проверять его на элемент, который я добавляю, но я думаю, что я делаю это неправильно? Может кто-нибудь мне помочь?
typedef struct Node {
void *content;
struct Node *next;
} Node;
typedef struct Stack {
Node *head;
int count;
} Stack;
void push(Stack *stack, void *newElem) {
Node *newNode = (Node*) malloc(sizeof(Node));
if (stack->count > 0) {
int i;
for (i = 0, newNode = stack->head; i < stack->count; i++, newNode =
newNode->next) {
if (newNode->content == newElem) return;
}
} else {
newNode->next = stack->head;
newNode->content = newElem;
stack->head = newNode;
stack->count++;
}
}
Обратите внимание, что вы не должны выполнять 'malloc()', пока не знаете, что вам нужно добавить элемент. Если элемент, который вы нажали, уже существует, вы будете утечки памяти. У вас есть проблема с пониманием того, как сравнивать значения (содержимое) двух узлов; насколько большим является пространство, на которое указывает «контент», и какая соответствующая функция компаратора. –