Push-список связанных () - PullRequest
0 голосов
/ 26 апреля 2010

Стек инициализируется с int MaxSize = 3. Затем я помещаю один int в список. «Нажатие» возвращается в консоль. Программа вылетает здесь. Я думаю, что моя логика ошибочна, но не уверенна. Может быть, бесконечный цикл или неудовлетворенное состояние? Спасибо за вашу помощь.

Я пытаюсь пройти список до последнего узла во второй части метода full (). Я реализовал этот стек как основанный на массиве, поэтому должен реализовать этот метод full (), поскольку этот метод находится внутри основного класса.

while(!stacker.full()) {
    cout << "Enter number = ";
    cin >> intIn;
    stacker.push(intIn);
    cout << "Pushed: " << intIn <<  endl;
}//while

Вызовите LinkListStack.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;
    }
}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2010
int LinkList::full() {
        int top = 0;
        LinkNode * tmp1;
        tmp1 = head;
        while(top <= MaxSize && tmp1 != NULL) {
                tmp1 = tmp1->next;
                ++top;
        }//while
    return (top <= MaxSize);
}
0 голосов
/ 26 апреля 2010

Посмотрите на весь цикл while ():

while(top != MaxSize) {
        if(tmp1->next != NULL){
            tmp2 = tmp1->next;
            tmp1 = tmp2;
            ++top;
        }//if
    }//while

Итак, если у вас есть один элемент в списке, вы входите в цикл while (предполагая, что top == 0?), И, поскольку это первый узел в списке, tmp1->next равен NULL, что удерживает top от увеличения, поэтому Вы застряли в петле.

Вам также не нужно tmp2, вы можете просто использовать tmp1 = tmp1 -> next;.

И чтобы исправить проблему, посмотрите на утверждение if. Почему вы проверяете, чтобы следующий узел не был нулевым?

Также посмотрите в push ():

void LinkList::push(int numIn) {
    LinkNode * nodeIn = new LinkNode(numIn);
    if(head == NULL) {
        head = nodeIn;
    }else {
        nodeIn = head;
        head = nodeIn;
    }
}

Вы должны установить nodeIn->next на head, прежде чем указывать head на nodeIn. Как написано, новый узел никогда не добавляется в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...