#include "listdata.h"

//Header file for LinkList class

struct ListElement
{
  ListData ListInfo;
  ListElement *Successor;
};

typedef void (*FcnType) (ListData Info);

class LinkList
{
 protected:
  ListElement *Head, *Cursor, *Prev, *Rear;
  int Size;
  void DoSearch(ListData El,           //input - value sought
		ListElement *ListHead, //input - node to check
		int &Success);         //output - program flag

 public:
  LinkList();
  ~LinkList();
  int GetSize();
  int IsEmpty();
  void Search(ListData El,             //input - value sought
	      int &Success);           //output - program flag
  void Insert(ListData El);            //input - data to insert
  void InsertAfter(ListData El);       //input - data to insert
  void InsertAtEnd(ListData El);       //input - data to insert
  void Retrieve(ListData &El,          //output - data retrieved
		int &Success);         //output - program flag
  void DeleteNode();
  void InitCursor();
  int AtEnd();
  void Advance();
  void Traverse(FcnType Visit);        //input - function pointer
};
