"Реализуйте АТД “стек” на основе массива фиксированного размера для элементов, являющихся односвязными списками целых чисел (т.е., стек списков). При помещении списков в стек они должны корректно копироваться. При удалении списков из стека - корректно уничтожаться. Также, самостоятельно создайте тестовую программу, демонстрирующую возможности разработанного стека. "
Если я правильно понял, то стек будет представлять собой массив, а каждый элемент массива это односвязный список? В моем распоряжении есть готовый блок, который мне нужно переделать под свои условия. Что именно нужно поменять? Не могу понять как именно используется созданный массив.
#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;
}
Если уж вы работаете с 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]){}
Примерно так. Интерфейсы продумайте сами.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Во-первых хочу прояснить почему не срабатывает данный код, так как почти аналогичный работает
с dataMessage приходит данные в виде Test: "test" хочу эти данные отправить через ajax запрос но вижу что в массив ничего не записывается