From c1b6ffe70bd281c6c230fd63fabcaac2aff47514 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 7 Apr 2024 23:18:32 -0700 Subject: feat: initial commit --- chapter7/stack2.h | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 chapter7/stack2.h (limited to 'chapter7/stack2.h') diff --git a/chapter7/stack2.h b/chapter7/stack2.h new file mode 100644 index 0000000..739f1ad --- /dev/null +++ b/chapter7/stack2.h @@ -0,0 +1,78 @@ +// FILE: stack2.h (part of the namespace main_savitch_7B) +// TEMPLATE CLASS PROVIDED: stack (a stack of items) +// The template parameter, Item, is the data type of the items in the stack, +// also defined as stack::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 stack::size_type is the data type of +// any variable that keeps track of how many items are in a stack. +// +// CONSTRUCTOR for the stack template class: +// stack( ) +// Postcondition: The stack has been initialized as an empty stack. +// +// MODIFICATION MEMBER FUNCTIONS for the stack class: +// void push(const Item& entry) +// Precondition: size( ) < CAPACITY. +// Postcondition: A new copy of entry has been pushed onto the stack. +// +// Item pop( ) +// Precondition: size( ) > 0. +// Postcondition: The top item of the stack has been removed. +// +// CONSTANT MEMBER FUNCTIONS for the stack class: +// bool empty( ) const +// Postcondition: Return value is true if the stack is empty. +// +// size_type size( ) const +// Postcondition: Return value is the total number of items in the stack. +// +// Item top( ) +// Precondition: size( ) > 0. +// Postcondition: The return value is the top item of the stack (but the +// stack is unchanged. This differs slightly from the STL stack (where +// the top function returns a reference to the item on top of the stack). +// +// VALUE SEMANTICS for the stack class: +// Assignments and the copy constructor may be used with stack +// objects. +// +// DYNAMIC MEMORY USAGE by the stack template class: +// If there is insufficient dynamic memory, then the following functions +// throw bad_alloc: +// the copy constructor, push, and the assignment operator. + +#ifndef MAIN_SAVITCH_STACK2_H +#define MAIN_SAVITCH_STACK2_H +#include // Provides NULL and size_t +#include "node2.h" // Node template class from Figure 6.5 on page 308 + +namespace main_savitch_7B +{ + template + class stack + { + public: + // TYPEDEFS + typedef std::size_t size_type; + typedef Item value_type; + // CONSTRUCTORS and DESTRUCTOR + stack( ) { top_ptr = NULL; } + stack(const stack& source); + ~stack( ) { list_clear(top_ptr); } + // MODIFICATION MEMBER FUNCTIONS + void push(const Item& entry); + void pop( ); + void operator =(const stack& source); + // CONSTANT MEMBER FUNCTIONS + size_type size( ) const + { return main_savitch_6B::list_length(top_ptr); } + bool empty( ) const { return (top_ptr == NULL); } + Item top( ) const; + private: + main_savitch_6B::node *top_ptr; // Points to top of stack + }; +} + +#include "stack2.template" // Include the implementation +#endif -- cgit v1.2.3