Not really. Hashing is more complicated than what you need. Instead you should be looking for linked lists.
Are you using C or C++? It makes a big difference in this case since it is easier in C++. I'll assume you mean C.
In the .h file you want to make your structure definitions as well as function prototypes. The idea is to have the minimum amount of stuff in the .h file while still completly specifying how to use the .c file it will be associated with. This way, when another .c file wants to use the functions in the first .c file it can include the .h file and the compilier will have everything it needs.
For the list of lists, you will need at least two structures. One will be an element node and one will be a row node. They should look something like the following:
PHP:
struct element_node {
struct element_node *next;
int value;
};
struct row_node {
struct row_node *next;
struct element_node *value;
}
You could also do it with just one struture where the value member is of type void*. This can cut your code in half, but may require some extra memory management. In C++ you can use templates which will reduce the code work, but may make debugging more confusing.
Next, you'll need to prototype the functions you want to use. The actual functions are up to you, or are probally mentioned in your assignment. If you use structures like the ones above, you will need two sets of functions, one for each structure. Here are some examples.
PHP:
struct element_node* NewElement(int value);
void FreeElements(struct element_node *first);
void InsertElementAfter(struct element_node *node, struct element_node *insert);
void RemoveElement(struct element_node *first, struct element_node *remove);
struct row_node* NewRow();
void FreeRows(struct row_node *first);
void InsertRowAfter(struct row_node *node, struct row_node *insert);
void RemoveRow(struct row_node *first, struct row_node *remove);
Then, in the .c file provide a definition for each of those functions.