summaryrefslogtreecommitdiff
path: root/chapter8/queue2.h
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-04-07 23:18:32 -0700
committerFuwn <[email protected]>2024-04-07 23:18:32 -0700
commitc1b6ffe70bd281c6c230fd63fabcaac2aff47514 (patch)
treee8af3b1782a7cd0754590ed618fddc1bdb9b7385 /chapter8/queue2.h
downloaddscode-main.tar.xz
dscode-main.zip
feat: initial commitHEADmain
Diffstat (limited to 'chapter8/queue2.h')
-rw-r--r--chapter8/queue2.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/chapter8/queue2.h b/chapter8/queue2.h
new file mode 100644
index 0000000..a9a7003
--- /dev/null
+++ b/chapter8/queue2.h
@@ -0,0 +1,76 @@
+// FILE: queue2.h (part of the namespace
+// TEMPLATE CLASS PROVIDED: queue<Item> (a queue of items)
+//
+// TEMPLATE PARAMETER, TYPEDEFS and MEMBER CONSTANTS for the stack<Item> class:
+// The template parameter, Item, is the data type of the items in the queue,
+// also defined as queue<Item>::value_type. It may be any of the C++ built-in
+// types (int, char, etc.), or a class with a default constructor, a copy
+// constructor, and an assignment operator. The definition
+// queue<Item>::size_type is the data type of any variable that keeps track of
+// how many items are in a queue.
+// NOTE:
+// Many compilers require the use of the new keyword typename before using
+// the expressions queue<Item>::value_type and queue<Item>::size_type.
+// Otherwise the compiler doesn't have enough information to realize that it
+// is the name of a data type.
+//
+// CONSTRUCTOR for the queue<Item> template class:
+// queue( )
+// Postcondition: The queue has been initialized as an empty queue.
+//
+// MODIFICATION MEMBER FUNCTIONS for the queue<Item> template class:
+// void pop( )
+// Precondition: size( ) > 0.
+// Postcondition: The front item of the queue has been removed.
+//
+// void push(const Item& entry)
+// Postcondition: A new copy of entry has been inserted at the rear of the
+// queue.
+//
+// CONSTANT MEMBER FUNCTIONS for the queue<Item> template class:
+// bool empty( ) const
+// Postcondition: The return value is true if the queue is empty.
+//
+// Item front( ) const
+//
+// size_type size( ) const
+// Postcondition: The return value is the total number of items in the queue.
+//
+// VALUE SEMANTICS for the queue<Item> template class:
+// Assignments and the copy constructor may be used with queue<Item> objects.
+
+#ifndef MAIN_SAVITCH_QUEUE2_H // Prevent duplicate definition
+#define MAIN_SAVITCH_QUEUE2_H
+#include <cstdlib> // Provides std::size_t
+#include "node2.h" // Node template class
+
+namespace main_savitch_8C
+{
+ template <class Item>
+ class queue
+ {
+ public:
+ // TYPEDEFS
+ typedef std::size_t size_type;
+ typedef Item value_type;
+ // CONSTRUCTORS and DESTRUCTOR
+ queue( );
+ queue(const queue<Item>& source);
+ ~queue( );
+ // MODIFICATION MEMBER FUNCTIONS
+ void pop( );
+ void push(const Item& entry);
+ void operator =(const queue<Item>& source);
+ // CONSTANT MEMBER FUNCTIONS
+ bool empty( ) const { return (count == 0); }
+ Item front( ) const;
+ size_type size( ) const { return count; }
+ private:
+ main_savitch_6B::node<Item> *front_ptr; // head_ptr
+ main_savitch_6B::node<Item> *rear_ptr;
+ size_type count; // Total number of items in the queue
+ };
+}
+#include "queue2.template" // Include the implementation
+
+#endif