Linked design of the List ADT

template<class T,int Max >

class list

{

list();

boolean is_empty();

boolean is_full();

void reset();

boolean end_of_list();

void advance();

item_type current_item();

void insert_before(item_type some_item);

void insert_after(item_type some_item);

void erase();

~list();

}

size=0; head=cursor=0;

return size==0;

return size==Max;

cursor = head;

return cursor==0; // assuming that null == 0

before = cursor; cursor = cursor->next;

return cursor->item;

create a new_node;

new_node->item=item;

new_node->next = cursor;

if(cursor == head)

head = new_node;

else

before->next=new_node;

cursor = new_node;

create a new_node;

new_node->item=item;

new_node->next =cursor->next;

cursor->next = new_node;

before = cursor;

cursor = new_node;

if (head == cursor)

{

head = cursor->next;

destroy cursor;

cursor = head;

}

else

{

before->next = cursor->next;

destroy cursor;

cursor = before->next;

}

for(cursor = head; cursor != 0;)

{

temp = cursor;

cursor = cursor->next;

destroy temp;

}

Implementation

template <class T>

struct node

{

T item;

node<T> *next;

};

int j, *ip;

template <class T>

struct node

{

T item;

node<T> *next;

};

template<class T,int Max >

class list

{

private:

node<T> *head,*cursor,*before;

int size;

list();

bool is_empty();

bool is_full();

void reset();

bool end_of_list();

void advance();

T current_item();

void insert_before(T some_item);

void insert_after(T some_item);

void erase();

~list();

};

template<class T, int Max>

list<T,Max>::list()

{

size=0; head=cursor=0;

}

template<class T, int Max>

void list<T,Max>::insert_before(T item)

{

node<T> *new_node;

new_node = new node<T>;

new_node->item=item;

new_node->next = cursor;

if(cursor == head)

head = new_node;

else

before->next=new_node;

cursor = new_node;

}

template<class T, int Max>

void list<T,Max>::erase()

{

if (head == cursor)

{

head = cursor->next;

delete cursor;

cursor = head;

}

else

{

before->next = cursor->next;

delete cursor;

cursor = before->next;

}

}