/***********************************************************************/
/* file slist.h */
/* contains the class definition of class slist */
/***********************************************************************/
#ifndef SLIST_H
#define SLIST_H
#include <assert.h>
#include "base_slist.h"
/***********************************************************************/
/* class definition of class slist. slist is a singly linked list. */
/***********************************************************************/
template <class type>
class slist: public base_slist<type>
{
friend class slist_iterator<type>; // slist_iterator may access
// private data fields
public:
slist() { } // constructor
slist(const slist<type>&) { } // copy constructor
const slist<type>& operator= // copy operator
(const slist<type>&);
virtual ~slist() { } // destructor (empty)
virtual slist_item<type> *prepend(const type&); // prepends item with add
virtual type del_item(slist_item<type> *); // removes arg. from slist
virtual slist_item<type> *first(); // returns first node
virtual slist_item<type> *last(); // returns last node
virtual slist_item<type> *search(const type&); // searches node
virtual slist_item<type> *succ // returns successor
(slist_item<type> *);
virtual slist_item<type> *insert // inserts a node after a
(slist_item<type> *, const type&); // specific node
virtual slist_item<type> *append(const type&); // appends node
};
template <class type>
ostream &operator<<(ostream&, slist<type>&);
template <class type>
istream &operator>>(istream&, slist<type>&);
#include "slist.cc" // because of templates
#endif