Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- // Lesson 13, pointers and dynamic memory
- //
- //
- // lists of nodes should look like this
- //
- // [data]->[data]->[data]->[data]->[data]->NULL
- //
- // in this exercise you will implement functions to add nodes to the end of the list
- // and remove nodes from the end of the list.
- //
- // the data in this exercise are simple ints. when creating new nodes use the getnum() function to fill the data.
- //
- // when everything works you should be able to add as many elements as you want, and remove elements back to zero.
- //
- // Fun Fact: this is a more simple version of an excercise you will be required to do one day in any programming course and many interviews.
- //
- */
- #include <iostream>
- /////////////////////////////////
- //define objects here
- struct node
- {
- int data;
- node* next;
- };
- //////////////////////////////////
- //place function declarations here
- void insert(node** root);
- void remove(node** root);
- void display(node* root);
- int getsize(node* root);
- int getnum();
- //////////////////////////////////
- //main program (do not modify)
- int main(int argc, char** argv)
- {
- bool done = false;
- node* list = NULL;
- while( !done )
- {
- int choice;
- std::cout<<"\n\n========choices========\n";
- std::cout<<"1. add a random number to the end of the list\n";
- std::cout<<"2. remove a number from the end of the list\n";
- std::cout<<"3. display the list\n";
- std::cout<<"4. display the size of the list\n";
- std::cout<<"0. quit\n";
- std::cout<<"please choose an option: ";
- std::cin>>choice;
- std::cout<<"\n--------------------------\n";
- switch(choice)
- {
- case 0: done = true; break;
- case 1:
- insert(&list);
- break;
- case 2:
- remove(&list);
- break;
- case 3:
- display(list);
- break;
- case 4:
- std::cout<<"the list size is "<<getsize(list)<<std::endl;
- break;
- default: break;
- }
- }
- while( list )
- {
- node* next = list->next;
- delete list;
- list = next;
- }
- return 0;
- }
- //////////////////////////////////
- //place function definitions here
- void insert(node** root)
- {
- //TODO: your code here
- node* temp = *root;
- if(*root)
- {
- while((*root)->next)
- {
- (*root) = (*root)->next;
- }
- (*root)->next = new node;
- (*root)->next->data = getnum();
- (*root)->next->next = 0;
- *root = temp;
- }
- else
- {
- (*root) = new node;
- (*root)->data = getnum();
- (*root)->next = 0;
- }
- }
- void remove(node** root)
- {
- //TODO: your code here
- node* temp = *root;
- node* previous = 0;
- if(*root)
- {
- while((*root)->next)
- {
- previous = *root;
- *root = (*root)->next;
- }
- delete *root;
- *root = temp;
- if(previous)
- {
- previous->next = 0;
- }
- }
- else
- {
- std::cout<<"cannot delete items from empty list\n";
- }
- }
- void display(node* root)
- {
- //TODO: your code here
- if(root)
- {
- while(root)
- {
- std::cout<<root->data<<"\n";
- root = root->next;
- }
- }
- else
- {
- std::cout<<"list is currently empty\n";
- }
- }
- int getsize(node* root)
- {
- int size = 0;
- //TODO: your code here
- if(root)
- {
- while(root)
- {
- ++size;
- root = root->next;
- }
- }
- else
- {
- return 0;
- }
- return size;
- }
- #include <cstdlib>
- int getnum()
- { return rand()%100; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement