Как добавить максимальный размер 20 в стек по связанному списку

#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().