Something different you maight want to look at...
Make a multidimensional (n dimensions) array of all the locations. e.g. the top-most dimension could consist of all the top level containers (rooms, labs etc.)...then in the next dimension keep all the next level containers (closets, refrigerators, racks etc.). In the next level keep the next lower level e.g. top-drawer, top-shelf in the rack etc. Keep as may levels as see ok for the purpose now. You can add another top-level or bottom-level to the array later.
So a particular item in your inventory would be stored at say location(2,3,1,5) where the first top level (2) has the room, the next level (3) has the closet identification, the next level (1) has the drawer id within the closet and the last level (5) may be has the bottle id (assuming the top drawer has a number of bottle of different chemicals).
Then you can have a sorted linked list for each member. This list would contain all the locations that this member has access to. e.g. loc(2,3,1,5), loc(2,2,3,4).....etc. You can sort this list for each member in descending order of the number of accessible locations in a room. For example, if a person has most of her items in room 3, closet 2 then the locations in room 3, closet 2 can be near the beginning in the linked list for this person so that a search would be shorter.
[ February 10, 2004: Message edited by: Dinesh Kumar ]