Давайте посмотрим на ваши актуальные вопросы
Stack::Stack() {
head= NULL;
tail= NULL;
}
приводит к ошибке "head" and "tail" is undefined
. Теперь посмотрите на файлы заголовков, где объявления head
и tail
? Ответ: в классе LL
, а не в классе Stack
. Класс LL
несет ответственность за инициализацию head
и tail
, что он делает в конструкторе класса LL
по умолчанию. Итак, ваш Stack
конструктор должен выглядеть так
Stack::Stack() {
}
Всякий раз, когда у вас есть конструктор для класса, который содержит другой класс, будет вызываться конструктор для другого класса. В случае Stack
конструктор по умолчанию для LL
вызывается неявно, и это инициализирует head
и tail
для вас. Вам не нужно ничего делать.
Теперь давайте рассмотрим еще несколько ваших реализаций.
Stack::~Stack() {
delete intlist;
}
intList
не является указателем, поэтому его нельзя удалить. Понятно, что вы пытаетесь вызвать деструктор для вашего списка, но, как и конструктор, это происходит автоматически. Ваш деструктор должен выглядеть так
Stack::~Stack() {
}
Или вы можете (вероятно, должны) просто полностью удалить его.
Переезд
int Stack::isEmpty() {
return (head==NULL);
}
Опять вы пытаетесь получить доступ к head
там, где это недоступно. Ваш класс Stack
имеет объект LL intlist
, и это то, что он должен использовать, поэтому (например)
int Stack::isEmpty() {
return intlist.get_head() == NULL;
}
Что-то здесь
void Stack::push(int value) {
head= value;
}
должно быть
void Stack::push(int value) {
intlist.prepend(value);
}
Используйте объект, который есть в стеке (intlist
), а не внутренние объекты других объектов.
Я оставлю тебя, разберись с остальными. Но вы должны понимать разделение обязанностей, которые существуют в дизайне вашего класса. Класс Stack
не должен (и не может) касаться внутренних элементов класса LL
. Все, что нужно выполнить Stack
, должно выполняться с открытым интерфейсом класса LL
. Если нет, то класс LL
необходимо изменить.
Также обратите внимание, что ваша реализация pop
не просто неверна в исполнении, она неверна в концепции. Pop
должен удалить голову списка, а не хвост. Стек - это список LIFO (последний пришел, первый вышел), поэтому pop
удаляет последний добавленный элемент. Теперь, глядя на класс LL
, есть метод removeHead
(подсказка, подсказка).