0

Я пытаюсь сделать программу стека с динамически распределенным связанным списком, и я очень смущен всем этим. Во всяком случае, я создал собственную конструкцию стека, но отображает только первый элемент. Вот мой main.cpp файл:Стек отображает только первое значение?

// (Description in Word File) 

#include "Prototypes.h" 

unsigned seed = time(0); 

int main() 
{ 
    int random; // score between 30 and 95 

    Stack stk; // stack of random scores 

    srand(seed); 

    // Populate that stack! 
    for (int count = 0; count != 20; count++) 
    { 
     // generate a random number between 30 and 95 
     random = (95 - (rand() % 65)) + 1; 
     stk.push(random); 

     // just to check for values 
     //cout << stk.lst.getFirst() << endl; 
    } 

    // now display 
    stk.lst.print(); 

    return 0; 
} 

Вот функции, используемые в файле:

int List::getFirst() const{ 
    return first->data;} 

void List::addFirst(int value) 
{ 
    Node* tmp = new Node(value); 
    first = tmp; 
} 

void Stack::push(int value){ 
    lst.addFirst(value);} 

void List::print() const 
{ 
    Node* cur = first; 

    cout << "\tValues:\n\n"; 

    for (int count = 1; cur != nullptr; count++) 
    { 
     cout << " " << cur->data; 

     // print in rows of 5 
     if ((count % 5) == 0) 
      cout << endl; 

     // move down the list 
     cur = cur->next; 
    } 

    cout << endl << endl; 
} 

Наконец, вот те структуры, которые я использовал:

struct Node 
{ 
    int data; 
    Node* next; 

    Node(int value) : data(value), next(nullptr){} 
}; 

struct List 
{ 
    Node* first; // a pointer to the first Node 
    List() : first(nullptr){} 

    void addFirst(int); 

    int getFirst() const; 

    bool removeFirst(); 

    void addLast(int); 

    int getLast() const; 

    bool removeLast(); 

    void print() const; 
}; 

struct Stack 
{ 
    List lst; 

    void push(int); 

    int pop(); 

    bool isEmpty() const; 
}; 

Может кто-то объяснить, для меня, почему отображается только одно значение? Пожалуйста, сделайте это простым, я новичок в программировании. Благодаря!

ответ

1
void List::addFirst(int value) 
{ 
    Node* tmp = new Node(value); 
    /* without the next line, you throw away the old first node. */ 
    tmp->next = first; 
    first = tmp; 
} 
+0

Спасибо! Это сработало! – SoloMael

+0

Yup! Добро пожаловать в SO; здесь принято помещать галочку на ответ, который решает вашу проблему, чтобы указать людям, которые ищут похожие вопросы, что это правильно. Кроме того, я получаю rep для него = D. – sqykly

+0

Извините, я забыл. Спасибо за напоминание. – SoloMael

Смежные вопросы