Take the **Doubly** Linked List code we worked on in class, and extend it as follows:
* Split up the code to have separate functions which do the following:
* **int main()** - central program, provides a menu to launch into each operation.
* **Node *create();** - allocate and initialize new node, returning an address to it.
* **List *build();** - passing the appropriate values, build a new list.
* **List *append(List *, Node *given, Node *newNode);** - passing the appropriate values, append a new node after a given node on a list.
* **List *insert(List *, Node *given, Node *newNode);** - passing the appropriate values, insert a new node before a given node on a list.
* **List *removenode(List *, Node **indicated);** - passing the appropriate values, remove indicated node from a list but do NOT deallocate it (that's why we are passing it by address).
* **void displayf(List *);** - passing a list, display the nodes in the list (forward, from the start).
* **void displayb(List *);** - passing a list, display the nodes in the list (backward, from the end).
* **List *sort(List *);** - passing the appropriate values, sort the list from least to greatest.
* **List *clear(List *);** - deallocate each node in the list
This is essentially testing your ability to organize code into functions, and to call those functions.
Having a menu-driven interface (just text will do), will enable more selective testing of your linked list's functionality. Note that when the program is run, the menu should be the very first thing the user sees, and no list should be in existence until (and if) a user decides to do so. The menu should also have some sort of exit option.
Be sure to add/commit/push any project code to your personal repository.
I plan to wander around and check off with each person as part of this project's evaluation, so be prepared to show me your code, perform a sample run, and potentially answer any questions I may have about the code.
Points I will look to evaluate:
* Does it compile clean?
* Does it run (any combination of actions) without error or problem?
* Does it have and use functions for the various linked list operations?
* Does the menu allow full and operational and correct control over all actions of the linked list?
Potential sample output of this desired program (remember, you have additional options to implement):
lab46:~/src/data/dllmenu$ ./dllmenu
Linked List Operations
----------------------
0. Display the list forward
1. Append a new node
2. Insert a new node
3. Remove a node
9. Quit
Enter Selection: 0
NULL
Linked List Operations
----------------------
0. Display the list forward
1. Append a new node
2. Insert a new node
3. Remove a node
9. Quit
Enter Selection: 1
Empty List Detected!
Enter Value for new node: 7
Linked List Operations
----------------------
0. Display the list forward
1. Append a new node
2. Insert a new node
3. Remove a node
9. Quit
Enter Selection: 1
(0) 7 -> NULL
Enter position to Append after (0-0): 0
Enter Value for new node: 9
Linked List Operations
----------------------
0. Display the list forward
1. Append a new node
2. Insert a new node
3. Remove a node
9. Quit
Enter Selection: 2
(0) 7 -> (1) 9 -> NULL
Enter position to Insert before (0-1): 0
Enter value for new node: 2
Linked List Operations
----------------------
0. Display the list forward
1. Append a new node
2. Insert a new node
3. Remove a node
9. Quit
Enter Selection: 0
(0) 2 -> (1) 7 -> (2) 9 -> NULL
Linked List Operations
----------------------
0. Display the list forward
1. Append a new node
2. Insert a new node
3. Remove a node
9. Quit
Enter Selection: 3
(0) 2 -> (1) 7 -> (2) 9 -> NULL
Enter position of node to remove: 0
Linked List Operations
----------------------
0. Display the list forward
1. Append a new node
2. Insert a new node
3. Remove a node
9. Quit
Enter Selection: 0
(0) 7 -> (1) 9 -> NULL
Linked List Operations
----------------------
0. Display the list forward
1. Append a new node
2. Insert a new node
3. Remove a node
9. Quit
Enter Selection: 9
lab46:~/src/data/dllmenu$