Стек инициализируется с помощью int MaxSize = 3. Затем я нажимаю один int в списке. «Вытолкнуто:» возвращается на консоль. Программа вылетает здесь. Я думаю, что моя логика ошибочна, но неуверена. Может быть, бесконечный цикл или неудовлетворенное условие? Спасибо за вашу помощь.Связанный список push()
Я пытаюсь пройти список до последнего узла во второй части метода full(). Я реализовал этот стек как массив, поэтому должен реализовать этот метод full(), поскольку этот метод находится внутри основного класса.
while(!stacker.full()) {
cout << "Enter number = ";
cin >> intIn;
stacker.push(intIn);
cout << "Pushed: " << intIn << endl;
}//while
Позвоните по ссылкеListStack.cpp в класс LinkList full().
int LinkList::full() {
if(head == NULL) {
top = 0;
} else {
LinkNode * tmp1;
LinkNode * tmp2;
tmp1 = head;
while(top != MaxSize) {
if(tmp1->next != NULL){
tmp2 = tmp1->next;
tmp1 = tmp2;
++top;
}//if
}//while
}//else
return (top + 1 == MaxSize);
}
Толчок метод здесь:
void LinkList::push(int numIn) {
LinkNode * nodeIn = new LinkNode(numIn);
if(head == NULL) {
head = nodeIn;
}else {
nodeIn = head;
head = nodeIn;
}
}
Почему бы не просто использовать класс Stack в C++? – zsong
'top' похоже, является членом данных LinkList. Но какова его цель? Вы просто увеличиваете его в своей ветке else, не устанавливая его на 0. Почему вы просто не помните фактический размер и избегаете перемещения по списку? Вероятно, вы должны сделать 'full' функцией' const'. Я не думаю, что «полный» действительно должен мутировать ваш список. Кроме того, 'tmp2' бесполезен. Вы могли бы просто написать 'tmp1 = tmp1-> next'. – sellibitze
Как выглядит ваш метод push? Очевидно, что это одна из проблем с вашим кодом. –