Создание АТД “Стек” на основе массива - C++

203
19 апреля 2017, 13:37

"Реализуйте АТД “стек” на основе массива фиксированного размера для элементов, являющихся односвязными списками целых чисел (т.е., стек списков). При помещении списков в стек они должны корректно копироваться. При удалении списков из стека - корректно уничтожаться. Также, самостоятельно создайте тестовую программу, демонстрирующую возможности разработанного стека. "

Если я правильно понял, то стек будет представлять собой массив, а каждый элемент массива это односвязный список? В моем распоряжении есть готовый блок, который мне нужно переделать под свои условия. Что именно нужно поменять? Не могу понять как именно используется созданный массив.

#include "integer_stack.h"
#include "integer_list.h" 
#include <cassert>
struct IntegerStack
{
    int * m_pData;
    int * m_pTop;
    int m_Size;
};

 IntegerStack * IntegerStackCreate(int _fixedSize)
{
     IntegerStack * pStack = new IntegerStack;
    pStack->m_pData = new int[_fixedSize];
    pStack->m_pTop = pStack->m_pData;
    pStack->m_Size = _fixedSize;
    return pStack;
}

void IntegerStackDestroy(IntegerStack * _pStack)
  {
    delete[] _pStack->m_pData;
    delete _pStack;
  }

void IntegerStackClear(IntegerStack & _stack)
  {
    _stack.m_pTop = _stack.m_pData;
}

 void IntegerStackPush(IntegerStack & _stack, int _value)
{
    assert(!IntegerStackIsFull(_stack));
    *_stack.m_pTop = _value;
    ++_stack.m_pTop;
}

void IntegerStackPop(IntegerStack & _stack)
{
   assert(!IntegerStackIsEmpty(_stack));
   --_stack.m_pTop;
 }

int IntegerStackTop(const IntegerStack & _stack)
{
   assert(!IntegerStackIsEmpty(_stack));
    return *(_stack.m_pTop - 1);
}

bool IntegerStackIsEmpty(const IntegerStack & _stack)
 {
   return _stack.m_pData == _stack.m_pTop;
}

   bool IntegerStackIsFull(const IntegerStack & _stack)
   {
     return (_stack.m_pTop - _stack.m_pData) == _stack.m_Size;
  }
Answer 1

Если уж вы работаете с C++, то делайте стек классом, как и список. Как я понимаю, до шаблонов вы еще не доучились, так что делайте что-то типа

class IntList
{
    struct Node
    {
        int value;
        Node * prev, * next;
    };
    ...

Затем реализуете этот класс, отрабатываете, обязательно не забудьте глубокое копирование и присваивание.

Потом создаете класс стека.

class IntStack
{
    ...
    size_t    size;
    IntList * data;
    ...
    IntStack(size_t size):size(size),data(new IntList[size]){}

Примерно так. Интерфейсы продумайте сами.

READ ALSO
Electron.Запуск ncpa.cpl в ОС Windows

Electron.Запуск ncpa.cpl в ОС Windows

ЗдравствуйтеЕсть ли возможность запустить скрипт ncpa

233
mongoose Проблемы с сохранением схемы

mongoose Проблемы с сохранением схемы

Во-первых хочу прояснить почему не срабатывает данный код, так как почти аналогичный работает

252
Поставить в массив и отправить через ajax

Поставить в массив и отправить через ajax

с dataMessage приходит данные в виде Test: "test" хочу эти данные отправить через ajax запрос но вижу что в массив ничего не записывается

202