0% found this document useful (0 votes)
6 views10 pages

CS301 Assignment No 2

CS301 assignment

Uploaded by

nkm445195
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views10 pages

CS301 Assignment No 2

CS301 assignment

Uploaded by

nkm445195
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 10

CS301 ASSIGNMENT NO 2

#include<iostream>

#include<stack>

#include<string>

using namespace std;

class Book

public:

string title;

string ISBN;

Book (string t , string isbn) : title(t) , ISBN(isbn){}

};

class BSTNode

public:

Book book;

BSTNode* right;

BSTNode* left;

BSTNode(Book b) : book(b) , left(NULL) , right(NULL){}

};

class BookStack

private:
stack<Book> bookStack;

BSTNode* root;

BSTNode* insertBST (BSTNode* node , Book newBook)

if ( node == NULL)

return new BSTNode(newBook);

if (newBook.title < node->book.title)

node->left = insertBST(node->left , newBook);

else if(newBook.title > node->book.title)

node->right = insertBST(node->right , newBook);

return node;

void inOrderTraversal(BSTNode* node)

if (node != NULL)

inOrderTraversal(node->left);

cout<<"Book :";

cout<<node->book.title<<"(ISBN: "<<node->book.ISBN<<")\n";
inOrderTraversal(node->right);

public:

BookStack() : root(NULL){}

void push(Book newBook)

bookStack.push(newBook);

root = insertBST(root , newBook);

void pop()

if (!bookStack.empty())

Book topBook = bookStack.top();

bookStack.pop();

BSTNode* currentNode = root;

BSTNode* parent = NULL;

while(currentNode != NULL && currentNode->book.title !=


topBook.title)

parent = currentNode;

if(topBook.title < currentNode->book.title)

currentNode = currentNode->left;

}
else

currentNode = currentNode->right;

if (currentNode != NULL)

if(currentNode->left == NULL && currentNode->right == NULL)

if(parent == NULL)

root = NULL;

else if(parent->left == currentNode)

parent->left = NULL;

cout<<"Book Removed :" <<currentNode-


>book.title<<"\n\n";

delete currentNode;

else

BSTNode* successor = currentNode->right;

while(successor->left !=NULL)

{
successor = successor->left;

currentNode->book = successor->book;

popsuccessor(currentNode , successor);

void popsuccessor ( BSTNode* parent, BSTNode* node)

if(node->left == NULL && node->right == NULL)

if(parent->left == node)

parent->left == NULL;

else

parent->right == NULL;

delete node;

else if(node->left == NULL)

{
node->book = node->right->book ;

popsuccessor(node , node->right);

else

BSTNode* successor = node->left;

while(successor->right != NULL)

successor = successor->right;

node->book = successor->book;

popsuccessor(node , successor);

void listBook()

if(root == NULL)

cout<<"\n\n Library is empty";

else

cout<<"Library Book list:\n";

inOrderTraversal(root);

}
}

Book* search(string title)

BSTNode* currentNode = root;

while(currentNode != NULL)

if(title == currentNode->book.title)

return &currentNode->book;

else if(title < currentNode->book.title)

currentNode = currentNode->left;

else

currentNode = currentNode->right;

return NULL;

};

main()

BookStack library;
Book* foundBook;

int choice;

string title , ISBN;

library.push(Book("Aladdin" , "BC22076888")) ;

library.push(Book("Bad Habbits" , "BC432224022"));

while(1)

cout<<"\n\n Enter 1 to LIst All Book";

cout<<"\n\n Enter 2 To Add a New Book ";

cout<<"\n\n Enter 3 to search for a Book";

cout<<"\n\n Enter 4 to remove a Book ";

cout<<"\n\n Enter 5 to Exist\n ";

cin>>choice;

switch(choice)

case 1:

library.listBook();

cout<<"\n\n ";

break;

case 2:

cout<<"\n\n Enter Book title: ";

cin.ignore();

getline(cin , title);

cout<<"\n\n Enter ISBN: ";

getline(cin , ISBN);
library.push(Book(title , ISBN));

cout<<"\n\n ";

break;

case 3:

cout<<"\n\n Enter Book title :";

cin.ignore();

getline(cin , title);

foundBook = library.search(title);

if(foundBook != NULL)

cout<<"\n\n Book found: " << foundBook->title;

cout<<"\n\n (ISBN: "<<foundBook->ISBN<<")\n\n";

else

cout<<"\n\n Not Book found:";

break;

case 4:

library.pop();

break;

case 5:

exit(0);

}
}

You might also like