#c #linked-list #stack
#c #связанный список #стек
Вопрос:
Я реализовал стек с помощью связанного списка, как вы можете видеть ниже, но я не могу получить максимальный размер для работы. Я хочу, чтобы стек содержал максимум 20 элементов, а также отображался, когда стек заполнен.
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *link;
};
Node *top = NULL;
bool isempty()
{
if(top == NULL)
return true; else
return false;
}
void push (int value)
{
Node *ptr = new Node();
ptr->data = value;
ptr->link = top;
top = ptr;
}
void pop ( )
{
if ( isempty() )
cout<<"Stack is Empty";
else
{
cout << "pop element" << endl;
Node *ptr = top;
top = top -> link;
delete(ptr);
}
}
void showTop()
{
if ( isempty() )
cout<<"Stack is Empty";
else
cout<<"Element at top is : "<< top->data << endl;
}
void displayStack()
{
//print stack
if ( isempty() )
cout<<"Stack is Empty" << endl;
else
{
cout << "Stack: " << endl;
Node *temp=top;
while(temp!=NULL)
{ cout<<temp->data<<" ";
temp=temp->link;
}
cout<<"n";
}
}
Я хотел бы иметь функцию, подобную моей isEmpty (), но isFull () для отображения того, что стек заполнен, когда в стеке 20 элементов. Я не включил свою основную функцию в приведенный выше фрагмент, поскольку я просто вызываю свои функции.
Большое спасибо за все предложения 🙂 Я довольно хорошо знаком с c , так что успокойтесь.
Комментарии:
1. Если вам нужно максимум 20 объектов, зачем использовать связанный список? Было бы достаточно массива. Одним из преимуществ связанного списка является то, что в нем нет максимального значения (за исключением общего объема памяти, который может использовать ваша программа, конечно).
2. Как вы собираетесь вести подсчет количества элементов? Каким-то образом, какими-то средствами (возможно, создать класс, изменить код и т.д.), Вам нужно где-то вставить счетчик — возможно, выяснение этого было частью назначения. Что касается кода — вы показываете код, в котором полностью отсутствует способ отслеживания этой информации. На самом деле, это в основном вопрос дизайна, а не подробностей о том, как
pop()
илиdisplayStack()
выглядит.
Ответ №1:
По сути, вы хотите обернуть все в класс, у которого есть переменная размера.
struct Stack
{
struct Node
{
int data;
Node * link;
};
Node * top = NULL;
size_t size = 0U;
void push(int val)
{
// stuff you already have
size;
}
void pop()
{
// stuff you already have
--size;
}
// other methods you have
};
Node не знает о том, сколько их в списке, поэтому вам нужно использовать Node как строительный блок, а не саму структуру.
Ответ №2:
Итак, я бы использовал какую-нибудь структуру с указателем на головной узел и значением для определения максимального размера стека. Когда вы нажимаете на стек, вам нужно увеличить это значение и проверить, не превысило ли оно максимальный размер стека до нажатия. Кроме того, peek обычно является принятым именем функции для showTop().