Как внести значение в стек
как внести значение в стек? И если не сложно обьяснить что за 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);