#pragma once /* Copyright (c) 2017 Swarthmore College Computer Science Department, Swarthmore PA A. Danner, M. Gagne, J. Brody, Z. Palmer, A. Soni Distributed as course material for Fall 2017 CPSC 035: Data Structures and Algorithms */ /** * A List is an abstract (a.k.a. pure virtual) class specifying the interface * for a list of an arbitrary data type. */ template <typename T> class List { public: virtual ~List() { /* do nothing */ }; /** * Determines the size of the list. * @return The number of elements in the list. */ virtual int getSize() = 0; /** * Determines whether the list is empty. * @return true if the list is empty; false if it is not. */ virtual bool isEmpty() = 0; /** * Retrieves the first element of the list. * @return The element at index 0 of this list. * @throws runtime_error If the list is empty. */ virtual T peekHead() = 0; /** * Retrieves the last element of the list. * @return The element at the last index of this list. * @throws runtime_error If the list is empty. */ virtual T peekTail() = 0; /** * Retrieves the element from the list at index i. * @param i The index for the element to retrieve. * @return The element at that index. * @throws runtime_error If there is no index i in this list. */ virtual T get(int i) = 0; /** * Inserts a value at the beginning of this list. * @param value The value to insert. */ virtual void insertAtHead(T value) = 0; /** * Inserts the value at the end of this list. * @param value The value to insert. */ virtual void insertAtTail(T value) = 0; /** * Removes the first element from this list. * @return The element that was removed. * @throws runtime_error If the list was empty. */ virtual T removeHead() = 0; /** * Removes the last element from this list. * @return The element that was removed. * @throws runtime_error If the list was empty. */ virtual T removeTail() = 0; // You can safely ignore the following code. This eliminates some default // class routines, preventing you from using them accidentally. // Specifically, we are disabling the use of the copy constructor and the // copy assignment operator. You can read more here: // http://www.cplusplus.com/articles/y8hv0pDG/ public: List() { } private: List(const List& other) = delete; List& operator=(const List& other) = delete; };