Итак, у меня есть проект для моего класса C++, и нас попросят создать библиотечную программу, используя Stacks и Doubly Linked Lists. Теперь мы не можем использовать файл заголовка стека, чтобы все, что было создано от push, pop, display и т. Д.Невозможно отобразить стеки или нажать
У меня есть функция push, но функция отображения я не могу заставить ее отображать больше, чем только элемент lastNode. Когда он пытается получить доступ к предыдущемуNode, он сбой. Любые идеи о том, что я делаю неправильно?
Также я не могу заставить функцию pop работать. Программа также срабатывает, когда она запускается.
void pushBook(BookStack *bkStack, BookNode *bkNode)
{
if(isEmpty(bkStack))
{
bkStack->lastNode = bkNode;
bkStack->lastNode->previousNode = NULL;
}
else
{
bkStack->lastNode->previousNode = bkStack->lastNode;
bkStack->lastNode = bkNode;
}
}
BookNode *popBook(BookStack *bkStack)
{
BookNode *temp = new BookNode;
if(isEmpty(bkStack))
{
temp = bkStack->lastNode;
return temp;
}
else if(bkStack->lastNode->previousNode == NULL)
{
temp = bkStack->lastNode;
bkStack->lastNode = NULL;
return temp;
}else
{
temp = bkStack->lastNode->previousNode;
bkStack->lastNode->previousNode = NULL;
bkStack->lastNode = temp;
return temp;
}
}
void displayStackElements(BookStack *bkStack)
{
BookNode *nodePtr = new BookNode;
nodePtr = bkStack->lastNode;
if(isEmpty(bkStack))
{
cout << "Book stack is empty." << endl;
}
else
{
while(nodePtr != NULL)
{
cout << "\nBook Name: " << nodePtr->bk.name << endl;
cout << "Author Name: " << nodePtr->bk.authorName << endl;
cout << "Page Numbers: " << nodePtr->bk.pagesNumber << endl;
cout << "ISBN: " << nodePtr->bk.isbn << endl;
cout << endl;
nodePtr = bkStack->lastNode->previousNode;
}
}
}
bool isEmpty(BookStack *bkStack)
{
bool status;
if(bkStack->lastNode == NULL)
status = true;
else
status = false;
return status;
}
void addBook(BookStack *bkStack)
{
BookNode *bkNode = new BookNode;
cout << "\nEnter the book name: ";
getline(cin, bkNode->bk.name);
cout << "Enter the Author's Name: ";
getline(cin, bkNode->bk.authorName);
cout << "Enter the ISBN: ";
cin >> bkNode->bk.isbn;
cout << "Enter the page numbers: ";
cin >> bkNode->bk.pagesNumber;
pushBook(bkStack, bkNode);
}
void removeBook(BookStack *bkStack)
{
BookNode *removedNode = new BookNode;
removedNode = popBook(bkStack);
if(removedNode == NULL)
{
cout << "\nNo books to remove." << endl;
}else
{
cout << endl << removedNode->bk.name << " was removed." << endl;
}
}
(редактировать) К сожалению о том, что вот Структуры из основного файла заголовка
struct Book
{
int isbn;
string name;
string authorName;
int pagesNumber;
};
struct BookNode
{
Book bk;
BookNode *previousNode;
};
struct BookStack
{
BookNode *lastNode = NULL;
};
Пожалуйста, создайте [Minimal, полный и проверяемых пример] (http://stackoverflow.com/help/mcve) –
'bkStack-> lastNode-> previousNode' всегда то же самое. Вы имеете в виду 'nodePtr-> previousNode'? – molbdnilo
Вы говорите в функции popBook? если так, то я думаю. Я действительно не знаю.Учитель не очень хорошо объяснил эту тему, и я посмотрел видео и прочитал об этом. Как будто я немного разбираюсь в том, как это делается, но реализация этой идеологии по-прежнему вызывает беспокойство. –