#include typedef struct node { double data; struct node *next; } Node; /* function: tests whether a list is empty input: head: pointer to the first node output: true if the list is empty and false otherwise */ bool IsEmpty(Node *head); /* function: inserts a new node with certain data after a certain position input: phead: pointer to the pointer to the first node index: the new node is inserted after position index insert a new node as the head if index is 0 x: data of the new node output: a pointer to the new node if insertion is successful, NULL otherwise */ Node *InsertNode(Node **phead, int index, double x); /* function: finds node with certain data input: head: pointer to the first node x: the first node whose data = x is returned output: returns the position of the first node whose data = x returns 0 if no such node exists */ int FindNode(Node *head, double x); /* function: deletes a node with certain data input: phead: pointer to the pointer to the first node x: the first node whose data = x is deleted output: returns the position of the deleted node returns 0 if no such node exists */ int DeleteNode(Node **phead, double x); /* function: prints all the nodes in the list input: head: pointer to the first node */ void DisplayList(Node *head); /* function: deletes all the nodes in the list and frees their memory input: head: pointer to the first node */ void DestroyList(Node *head);