Как добавить максимальный размер 20 в стек по связанному списку - PullRequest
0 голосов
/ 26 марта 2019

Я реализовал стек по связанному списку, как вы можете видеть ниже, но я не могу получить максимальный размер для работы.Я хочу, чтобы в стеке хранилось не более 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 ++, так что успокойтесь.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Вы, по сути, хотите обернуть вещи в классе, который имеет переменную размера.

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
};

Узел не знает, сколько их в списке, поэтому вам нужно использовать узел как строительный блок, а не саму структуру.

0 голосов
/ 26 марта 2019

Так что я бы использовал некую структуру с указателем на головной узел и значением для захвата максимального размера стека. Когда вы загружаете в стек, вам нужно увеличить это значение и убедиться, что оно не превысило максимальный размер стека перед загрузкой. Кроме того, peek обычно является допустимым именем функции для showTop ().

...