Starting from:

$25

CS300  -  Homework #2 - Notebook - Solved

In this homework, you will implement two “Notebooks” by using the AVL Search Tree and the Binary Search Tree (BST). Additionally, you will display the speed of some of the operations on these tree data structures that are used for the implementation. Each “Notebook” will have a nested tree structure, which will be explained in more detail in the rest of the documentation.

 

Although each Notebook tree will have a separate implementation, they will store the same data and will perform the same operations. Basically, the only difference between the Notebooks will be the data structures that are going to be used for the implementation. Each Notebook will contain multiple sections and each section will have multiple items which will store the information inside.

 

A notebook will have a nested structure as follows:

 

❏  Notebook 

May have one or many section/s.

❏     Section

Will have a title.

May have one or many item/s.

❏     Item

Will have a title.

Will have information.

 

Example Notebook:

 



Movies

The Holy Mountain-7.9

I Lost My Body-7.6

Phonebook

Gulsen-09990000099

Alp-09998765432

Furkan-09876543210

Serra-09898989898

 

 

As seen in the example above, a notebook is a tree of sections. Each section has got a title string and a tree of items. Each item has a title string and an information string.

There cannot be two sections with the same title inside the same notebook. Also, there cannot be two items with the same title inside the same section.

 

 

BST and AVL Tree

 

You are going to implement a BST class and an AVL Tree class. Which will get used separately to implement two different notebooks that will perform the same operations over the same data. You CANNOT USE VECTOR OR ARRAY to implement the notebooks. Also, you cannot use a BST inside an AVL Tree and vice versa. In other words, there will be two notebooks, one of them will be implemented by using nested AVL Trees and the other will get implemented by using the nested BSTs only.

 

Both the BST and the AVL Tree classes should be reusable for different types, classes, etc. Thus, both the BST and AVL Tree classes MUST be template-based classes.

 

Use the “title” properties of the section and the item to compare the nodes inside the trees.

 

 

Program Flow

 

❏     Initializing the notebooks

At the very beginning of the program, you should create two notebooks (one by using the BST, other by using the AVL Tree). 

 

Then, your program will read a text file that contains the section and item data of the notebook. Your program will insert the data into the notebooks accordingly.

 

Your program will display the elapsed insertion time of each section for both of the notebooks. Then the program will direct to the main menu.

 

 

❏     Main menu

On the main menu, there will be 6 options. The user will enter an input between [1-6] then the program will perform the commands on both notebooks accordingly. These options are:

1.      Display the sections (AVL)

Your program should perform an inorder traversal over the AVL notebook and print the section titles in ascending order (alphabetically).

2.      Display the sections (BST)

Your program should perform an inorder traversal over the BST notebook and print the section titles in ascending order (alphabetically).

3.      Select a section

The program will get a section title name from the user then it will search for the section with the same title, both in the AVL and BST notebooks. 

If there exists no such section your program will display an error. Else it will direct to the section menu to perform operations on the selected section. 

 

4.      Add new section

Get a title input from the user. If a section with the given title already exists in the notebook, display an error message. Else, create a new section with that title and insert it into the notebooks. 

5.      Delete a section

Get a title input from the user. If a section with the given title does not exist in the notebook, display an error message. Else, remove the section with that title from the notebooks.

6.      Exit

Terminate the program.

 

 

❏     Section menu

At option 3 of the main page, if the title of any section matches with the input from the user, the program should land on the section menu page to perform operations on the selected section.

 

On the main menu, there will be 7 options. The user will enter an input between [1-7] then the program will perform the commands on both notebooks accordingly. Options are:

 

1.      Display the items (AVL)

For the selected section of the AVL notebook:

Your program should perform an inorder traversal over the items tree of the section and print the item titles in ascending order (alphabetically).

2.      Display the items (BST)

For the selected section of the BST notebook:

Your program should perform an inorder traversal over the items tree of the section and print the item titles in ascending order (alphabetically).

3.      Display the information of an item

Get an item title input from the user. If an item with the given title does not exist in the notebook, display an error message. Else, display the information of the matching item.

 

Note: Although, you should make a query on both the AVL notebook and the BST notebook you can display the matching item information once. Since, if your program works correctly, matching item information of the AVL notebook and the BST notebook will be the same.

 

In both cases, display the elapsed query/insertion time for the AVL notebook and the BST notebook. 

Display the elapsed query time.

 

4.      Add a new item

Get an item title input from the user. If an item with the given title already exists in the section, display an error message. Else, create a new item with that title and insert it into the selected section. 

In both cases, display the elapsed query/insertion time.

5.      Update the information of an item:

Get an item title input from the user. If an item with the given title does not exist in the section, display an error message. Else, get the new information from the user and update the information of the item accordingly. 

Display the elapsed query/update time.

6.      Delete an item

Get an item title input from the user. If an item with the given title does not exist in the section, display an error message. Else, remove the item with that title from the section. Display the elapsed deletion time.

7.      Return to main menu

Go back to the main menu.

 

Text File

As mentioned before we have provided initial data to fill the notebooks at the beginning of the program. You should read the data from a text file (.txt extension) and insert it into the notebooks accordingly.

 

The text file will contain the following 3 sections:

 

-          Courseworks: contains 5 non-sorted items.

-          Movies: contains +90000 non-sorted items.

-          Phonebook: contains +6000 sorted items.

 

❏     Data format

If the first character of a line is not a ‘-‘ (dash), it is the title of a new section. Until the occurrence of a new section, as long as a new line starts with a dash it denotes the item of the given section. Each item line contains exactly two dashes. The first one denotes that it is an item line and the second one separates the item title from the item info.   

 

So, a text file with notebook data inside it will look like the following:

Section title 1

-item title 1-item info 1

-item title 2-item info 2

-item title 3-item info 3

Section title 2

-item title 1-item info 1

-item title 2-item info 2

 

 

Example text file:

 



Movies

-The Holy Mountain (1973)-7.9

-Climax-7

-Midsommar-7.6

 

 

Elapsed Time

 

You should display the elapsed time of the notebook operations. For that purpose, you can use the C++ built-in library chrono. You can include the library by using #include <chrono>.

 

You are recommended to use chrono::high_resolution_clock to obtain accurate results.

Documentation: https://en.cppreference.com/w/cpp/chrono/high_resolution_clock 

 

Here is an example to get the time duration of a foo() function in microseconds:

 


 

Between the start and the end clocks, you should only include the member functions of the trees (insert, delete, update, etc.) and exclude the rest of the code (getline, loops, arithmetic operations, etc.).

 
Sample Run

 

Welcome to the the Notes

 

Section "Courseworks" has been inserted into the AVL notebook.

[AVL] Elapsed time: 15 microseconds

Section "Courseworks" has been inserted into the BST notebook.

[BST] Elapsed time: 7 microseconds

 

Section "Phonebook" has been inserted into the AVL notebook.

[AVL] Elapsed time: 18236 microseconds

Section "Phonebook" has been inserted into the BST notebook.

[BST] Elapsed time: 3864642 microseconds

 

Section "Movies" has been inserted into the AVL notebook.

[AVL] Elapsed time: 300933 microseconds

Section "Movies" has been inserted into the BST notebook.

[BST] Elapsed time: 353231 microseconds

  

MENU

Please enter an input between [1 - 6]:

1- Display the sections [AVL]

2- Display the sections [BST]

3- Select a section

4- Add new section

5- Delete a section

6- Exit

Input: 1

 

*****

Courseworks

Movies

Phonebook

*****

 

Input: 2

 

*****

Courseworks

Movies

Phonebook

*****

 

Input: 3

Enter the title of the section: Cour

Invalid title!

 

Input: 3

Enter the title of the section: Courseworks

 

Selected section -> Courseworks

Please enter an input between [1 - 7]:

1- Display the items [AVL]

2- Display the items [BST]

3- Display the information of a item

4- Add new item

5- Update the information of a item

6- Delete an item

7- Return to main menu

Input: 1

 

*****

CS300

CS303

CS408

ENS492

SPS303

*****

 

Input: 2

 

*****

CS300

CS303

CS408

ENS492

SPS303

*****

 

Input: 3

Enter the title of the item: CS100

[AVL] Elapsed time: 8 microseconds

[BST] Elapsed time: 2 microseconds

Invalid title.

 

Input: 3

Enter the title of the item: CS300

[AVL] Elapsed time: 6 microseconds

[BST] Elapsed time: 0 microseconds

the homework is due Sunday

 

Input: 4

Enter a title for the item: CS303

Item "CS303" already exists in the "Courseworks".

 

Input: 4

Enter a title for the item: CS600

Enter a description for the item: huh?

[AVL] Elapsed time: 14 microseconds

[BST] Elapsed time: 3 microseconds

The new item "CS600" has been inserted.

 

Input: 5

Enter the title of the item: CS999

[AVL] Elapsed time: 5 microseconds

[BST] Elapsed time: 2 microseconds

Item "CS999" does not exist in the "Courseworks".

 

Input: 5

Enter the title of the item: CS300

[AVL] Elapsed time: 6 microseconds

[BST] Elapsed time: 0 microseconds

Enter the new information: great

The content CS300 has updated.

 

Input: 3

Enter the title of the item: CS300

[AVL] Elapsed time: 7 microseconds

[BST] Elapsed time: 1 microseconds

great

 

Input: 6

Enter the title of the item: CS123

Item "CS123" does not exist in the "Courseworks".

 

Input: 6

Enter the title of the item: CS300

[AVL] Elapsed time: 2 microseconds

[BST] Elapsed time: 2 microseconds

The item "CS300" has been deleted.

 

Input: 1

 

*****

CS303

CS408

CS600

ENS492

SPS303

*****

 

Input: 2

 

*****

CS303

CS408

CS600

ENS492

SPS303

*****

 

Input: 7

 

MENU

Please enter an input between [1 - 6]:

1- Display the sections [AVL]

2- Display the sections [BST]

3- Select a section

4- Add new section

5- Delete a section

6- Exit

Input: 4

Enter a title for the section: Courseworks

Section "Courseworks" already exists.

 

Input: 4

Enter a title for the section: Colors

The new section "Colors" has been inserted.

 

Input: 3

Enter the title of the section: Colors

 

Selected section -> Colors

Please enter an input between [1 - 7]:

1- Display the items [AVL]

2- Display the items [BST]

3- Display the information of a item

4- Add new item

5- Update the information of a item

6- Delete an item

7- Return to main menu

Input: 1

 

*****

*****

 

Input: 2

 

*****

*****

 

Input: 4

Enter a title for the item: Red

Enter a description for the item: Fav

[AVL] Elapsed time: 4 microseconds

[BST] Elapsed time: 1 microseconds

The new item "Red" has been inserted.

 

Input: 1

 

*****

Red

*****

 

Input: 2

 

*****

Red

*****

 

Input: 7

 

MENU

Please enter an input between [1 - 6]:

1- Display the sections [AVL]

2- Display the sections [BST]

3- Select a section

4- Add new section

5- Delete a section

6- Exit

Input: 1

 

*****

Colors

Courseworks

Movies

Phonebook

*****

 

Input: 2

 

*****

Colors

Courseworks

Movies

Phonebook

*****

 

Input: 5

Enter the title of the section: Course

Section "Course" does not exist.

 

Input: 5

Enter the title of the section: Courseworks

The section has been deleted.

 

Input: 1

 

*****

Colors

Movies

Phonebook

*****

 

Input: 2

 

*****

Colors

Movies

Phonebook

*****

 

Input: 3

Enter the title of the section: Phonebook

 

Selected section -> Phonebook

Please enter an input between [1 - 7]:

1- Display the items [AVL]

2- Display the items [BST]

3- Display the information of a item

4- Add new item

5- Update the information of a item

6- Delete an item

7- Return to main menu

Input: 3

Enter the title of the item: Aada

[AVL] Elapsed time: 2465 microseconds

[BST] Elapsed time: 0 microseconds

0016839979200

 

Input: 3

Enter the title of the item: Zyrie

[AVL] Elapsed time: 2302 microseconds

[BST] Elapsed time: 2276 microseconds

0017707501460

 

Input: 5

Enter the title of the item: Zyrie

[AVL] Elapsed time: 2410 microseconds

[BST] Elapsed time: 2327 microseconds

Enter the new information: 000000

The content Zyrie has updated.

 

Input: 6

Enter the title of the item: Kadeem

[AVL] Elapsed time: 6 microseconds

[BST] Elapsed time: 878 microseconds

The item "Kadeem" has been deleted.

 

Input: 4

Enter a title for the item: Zxxy

Enter a description for the item: ???

[AVL] Elapsed time: 12 microseconds

[BST] Elapsed time: 2143 microseconds

The new item "Zxxy" has been inserted.

 

Input: 7

 

MENU

Please enter an input between [1 - 6]:

1- Display the sections [AVL]

2- Display the sections [BST]

3- Select a section

4- Add new section

5- Delete a section

6- Exit

Input: 3

Enter the title of the section: Movies

 

Selected section -> Movies

Please enter an input between [1 - 7]:

1- Display the items [AVL]

2- Display the items [BST]

3- Display the information of a item

4- Add new item

5- Update the information of a item

6- Delete an item

7- Return to main menu

Input: 3

Enter the title of the item: Zingaresca

[AVL] Elapsed time: 31739 microseconds

[BST] Elapsed time: 2 microseconds

6.6

 

Input: 5

Enter the title of the item: Aurora

[AVL] Elapsed time: 30734 microseconds

[BST] Elapsed time: 2 microseconds

Enter the new information: cool

The content Aurora has updated.

 

Input: 6

Enter the title of the item: Redskin

[AVL] Elapsed time: 8 microseconds

[BST] Elapsed time: 1 microseconds

The item "Redskin" has been deleted.

 

Input: 7

 

MENU

Please enter an input between [1 - 6]:

1- Display the sections [AVL]

2- Display the sections [BST]

3- Select a section

4- Add new section

5- Delete a section

6- Exit

Input: 6

 

Terminating...

Program ended with exit code: 

More products