Как внести значение в стек

как внести значение в стек? И если не сложно обьяснить что за t ( в insert t->next = top; )

#include <iostream>
using namespace std;


typedef int Item; // тип информационной части элемента стека
struct Stack // структура элемента для формирования стека
{
    Item value; // информационная часть элемента стека
    Stack* next; // указатель на элемент стека
};
typedef Stack* Link; // тип указателя на структуру типа Stack
Link top = NULL; // указатель на вершину стека 
// если top = = NULL, то стек пуст
Link cur = NULL; // временный указатель

Link newNode()// Link тип указателя на структуру типа Stack
{
    int n;
    cout << " Vvedite element " << endl;
    scanf_s("%d", &n);  
    Link v = new Stack; // создание элемента под стек 
    v->value = n; // инициализация информ. части стека 
    v->next = NULL;
    return v;
}
Link insert(Link top, Link t)
{
    t->next = top;
    top = t;
    return top;
}

Link pop_stack(Link top)
{
    if (top == NULL) // если стек пуст
    {
        cout << " Stack is empty! " << endl;
        return top;
    }
    else
    {
        cout << "poping top->value=" << top->value << endl;
        Link t = top;
        top = t->next;
        delete (t);
        return top;
    }
}

void print_top_stack(Link t)
{
    if (t == NULL) // если стек пуст
        cout << " Stack is empty! " << endl;
    else
        cout << " top->value= " << t->value << endl;
}

void empty_stack(Link top)
{
    if (cur == NULL) // если стек пуст
        cout << " Stack is empty! " << endl;
    else
        cout << " Stack is not empty! " << endl;
}

Link delete_stack(Link top)
{
    if (top == NULL) // если стек пуст
    {
        cout << " Stack is empty! " << endl; return top;
    }
    else
    {
        while (top != NULL) // условие можно написать проще - (t)
        {
            Link t = top;
            top = t->next;
            delete (t);
        }
        cout << " You do stack empty! top = = NULL " << endl;
        return top;
    }
}


int count_stack(Link top)
{
    if (cur == NULL) // пуст ли стек?
    {
        cout << " Stack is empty! " << endl; return -1;
    }
    else // если стек не пуст
    {
        Link t = top;
        int i = 0; // счетчик числа элементов в стеке
        while (t != NULL)
        {
            t = t->next; i++;
        }
        cout << " Number of stack elements equal - " << i << endl;
        return i;
    }
}

void print_stack(Link top) // печать элементов
{
    Link t = top;
    while (t != NULL) // проход по элементам стека
    {
        cout << t->value << " ";
        t = t->next;
    }
    cout << endl;
}


int main()
{
    int choice;
    while (1)
    {
        printf("\nOperations performed by Stack");
        printf("\n1.New node\n2.\n3.Show\n4.");
        printf("\n\nEnter the choice:");
        scanf_s("%d", &choice);
        switch (choice)
        {
        case 1: newNode();
            insert(top, cur);
            break;
        case 2: 
            break;
        case 3: print_stack(top);
            break;
        case 4: exit(0);

        default: printf("\nInvalid choice!!");
        }
    }
    return 0;
}

Ответы (1 шт):

Автор решения: DmitryK

У вас стек реализован на базе однонаправленного списка. Значения в стек вносятся (добавляются) при помощи функции insert(). В функцию insert() передается указатель на новый элемент t, который добавляется в начало списка (вершину стека). Т.е. вы где-то должны создать новый элемент (например с помощью newNode() или просто new Stack;), а потом добавить его в стек при помощи функции insert().

insert( top, newNode() );
// или 
Link tmp = newNode();
insert( top, tmp);

И кстати в switch() у вас ошибка - newNode() возвращает указатель на новый узел, а не присваивает его переменной cur.

switch (choice)
{
    case 1: newNode();
            insert(top, cur);
// должно быть
    case 1: cur = newNode();
            insert(top, cur);
→ Ссылка