/* Steven Andrews, 4/20/95, modified 9/98 *//* Performs basic set operations with a linked list *//* dictionary commands completed 5/12/95 *//* See documentation called Set doc *//* Copyright 2003 by Steven Andrews.  Permission is granted   for non-commercial use of and modifications to the code. */#ifndef __Set_h#define __Set_hstruct scell{	void *key;	void *item;	struct scell *next; };typedef struct sstruct{	struct scell *list;	int (*keycmp)(void *,void *);	int (*itemcmp)(void *,void *); } *set;set SetAlloc(int (*keycmp)(void *,void *),int (*itemcmp)(void *,void *));void SetFree(set s,int freek,int freex);void SetNull(set s,int freek,int freex);int SetInsert(void *k,void *x,set s);int SetDelete(void *k,void *x,set s,int freek,int freex);int SetMember(void *k,void *x,set s);void *SetItem(void *k,set s);void **SetItemAt(void *k,set s);void *SetKey(void *x,set s);struct scell *SetNext(struct scell *ptr,void **k,void **x,set s);int Subset(set s1,set s2);int SetEqual(set s1,set s2);set SetUnion(set s1,set s2);set SetIntersect(set s1,set s2);set SetDiff(set s1,set s2);int SetCard(set s);#endif
