Dynamic Memory

This assignment will re-implement the social network database(can be provided) with dynamic memory and saving into files. Heres the specification for the application:
a) User entries should be kept in a linked (ordered alphabetically by name) list with memory allocated when a new student is introduced by the user. Memory should be deallocated when a user is removed. Storage of user’s friends can still be kept in arrays
b) The Menu presented to the user should be:
      1) Introduce  user
      2) Introduce relationship/friendship
      3) Remove user
      4) Print user information
      5) Print report for all users (all information)
      6) Save to file
      7) Retrieve data from file
      8) Exit
c) Your code should contain a insert and remove function. Ideally these will receive a pointer to pointer to the head of the list (but you can keep the head of the list as a global variable)
d) You should also implement a version of insert and remove functions that use balanced binary trees. This will be worth 20% of you final mark. The user should be able to choose the data structure directly from the command line when it starts the program. This should use the argc/argv arguments to main()