summaryrefslogtreecommitdiffstats
path: root/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14
downloadStudium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz
Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14')
-rw-r--r--Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/fig17_14.cpp72
-rw-r--r--Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/list.h216
-rw-r--r--Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/listnode.h56
-rw-r--r--Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/queue.h57
-rw-r--r--Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/queuecomposition.h59
5 files changed, 460 insertions, 0 deletions
diff --git a/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/fig17_14.cpp b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/fig17_14.cpp
new file mode 100644
index 0000000..a5c24d5
--- /dev/null
+++ b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/fig17_14.cpp
@@ -0,0 +1,72 @@
+// Fig. 17.14: fig17_14.cpp
+// Template Queue class test program.
+#include <iostream>
+
+using std::endl;
+
+#include "queue.h" // Queue class definition
+
+int main()
+{
+ Queue< int > intQueue; // create Queue of ints
+
+ cout << "processing an integer Queue" << endl;
+
+ // enqueue integers onto intQueue
+ for ( int i = 0; i < 4; i++ ) {
+ intQueue.enqueue( i );
+ intQueue.printQueue();
+
+ } // end for
+
+ // dequeue integers from intQueue
+ int dequeueInteger;
+
+ while ( !intQueue.isQueueEmpty() ) {
+ intQueue.dequeue( dequeueInteger );
+ cout << dequeueInteger << " dequeued" << endl;
+ intQueue.printQueue();
+
+ } // end while
+
+ Queue< double > doubleQueue; // create Queue of doubles
+ double value = 1.1;
+
+ cout << "processing a double Queue" << endl;
+
+ // enqueue floating-point values onto doubleQueue
+ for ( int j = 0; j< 4; j++ ) {
+ doubleQueue.enqueue( value );
+ doubleQueue.printQueue();
+ value += 1.1;
+
+ } // end for
+
+ // dequeue floating-point values from doubleQueue
+ double dequeueDouble;
+
+ while ( !doubleQueue.isQueueEmpty() ) {
+ doubleQueue.dequeue( dequeueDouble );
+ cout << dequeueDouble << " dequeued" << endl;
+ doubleQueue.printQueue();
+
+ } // end while
+
+ return 0;
+
+} // end main
+
+/**************************************************************************
+ * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice *
+ * Hall. All Rights Reserved. *
+ * *
+ * DISCLAIMER: The authors and publisher of this book have used their *
+ * best efforts in preparing the book. These efforts include the *
+ * development, research, and testing of the theories and programs *
+ * to determine their effectiveness. The authors and publisher make *
+ * no warranty of any kind, expressed or implied, with regard to these *
+ * programs or to the documentation contained in these books. The authors *
+ * and publisher shall not be liable in any event for incidental or *
+ * consequential damages in connection with, or arising out of, the *
+ * furnishing, performance, or use of these programs. *
+ *************************************************************************/ \ No newline at end of file
diff --git a/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/list.h b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/list.h
new file mode 100644
index 0000000..c6d2219
--- /dev/null
+++ b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/list.h
@@ -0,0 +1,216 @@
+// Fig. 15.4: list.h
+// Template List class definition.
+#ifndef LIST_H
+#define LIST_H
+
+#include <iostream>
+
+using std::cout;
+
+#include <new>
+#include "listnode.h" // ListNode class definition
+
+template< class NODETYPE >
+class List {
+
+public:
+ List(); // constructor
+ ~List(); // destructor
+ void insertAtFront( const NODETYPE & );
+ void insertAtBack( const NODETYPE & );
+ bool removeFromFront( NODETYPE & );
+ bool removeFromBack( NODETYPE & );
+ bool isEmpty() const;
+ void print() const;
+
+private:
+ ListNode< NODETYPE > *firstPtr; // pointer to first node
+ ListNode< NODETYPE > *lastPtr; // pointer to last node
+
+ // utility function to allocate new node
+ ListNode< NODETYPE > *getNewNode( const NODETYPE & );
+
+}; // end class List
+
+// default constructor
+template< class NODETYPE >
+List< NODETYPE >::List()
+ : firstPtr( 0 ),
+ lastPtr( 0 )
+{
+ // empty body
+
+} // end List constructor
+
+// destructor
+template< class NODETYPE >
+List< NODETYPE >::~List()
+{
+ if ( !isEmpty() ) { // List is not empty
+ cout << "Destroying nodes ...\n";
+
+ ListNode< NODETYPE > *currentPtr = firstPtr;
+ ListNode< NODETYPE > *tempPtr;
+
+ while ( currentPtr != 0 ) { // delete remaining nodes
+ tempPtr = currentPtr;
+ cout << tempPtr->data << '\n';
+ currentPtr = currentPtr->nextPtr;
+ delete tempPtr;
+
+ } // end while
+
+ } // end if
+
+ cout << "All nodes destroyed\n\n";
+
+} // end ~List destructor
+
+// insert node at front of list
+template< class NODETYPE >
+void List< NODETYPE >::insertAtFront( const NODETYPE &value )
+{
+ ListNode< NODETYPE > *newPtr = getNewNode( value );
+
+ if ( isEmpty() ) // List is empty
+ firstPtr = lastPtr = newPtr;
+
+ else { // List is not empty
+ newPtr->nextPtr = firstPtr;
+ firstPtr = newPtr;
+
+ } // end else
+
+} // end function insertAtFront
+
+// insert node at back of list
+template< class NODETYPE >
+void List< NODETYPE >::insertAtBack( const NODETYPE &value )
+{
+ ListNode< NODETYPE > *newPtr = getNewNode( value );
+
+ if ( isEmpty() ) // List is empty
+ firstPtr = lastPtr = newPtr;
+
+ else { // List is not empty
+ lastPtr->nextPtr = newPtr;
+ lastPtr = newPtr;
+
+ } // end else
+
+} // end function insertAtBack
+
+// delete node from front of list
+template< class NODETYPE >
+bool List< NODETYPE >::removeFromFront( NODETYPE &value )
+{
+ if ( isEmpty() ) // List is empty
+ return false; // delete unsuccessful
+
+ else {
+ ListNode< NODETYPE > *tempPtr = firstPtr;
+
+ if ( firstPtr == lastPtr )
+ firstPtr = lastPtr = 0;
+ else
+ firstPtr = firstPtr->nextPtr;
+
+ value = tempPtr->data; // data being removed
+ delete tempPtr;
+
+ return true; // delete successful
+
+ } // end else
+
+} // end function deleteFromFront
+
+// delete node from back of list
+template< class NODETYPE >
+bool List< NODETYPE >::removeFromBack( NODETYPE &value )
+{
+ if ( isEmpty() )
+ return false; // delete unsuccessful
+
+ else {
+ ListNode< NODETYPE > *tempPtr = lastPtr;
+
+ if ( firstPtr == lastPtr )
+ firstPtr = lastPtr = 0;
+ else {
+ ListNode< NODETYPE > *currentPtr = firstPtr;
+
+ // locate second-to-last element
+ while ( currentPtr->nextPtr != lastPtr )
+ currentPtr = currentPtr->nextPtr;
+
+ lastPtr = currentPtr;
+ currentPtr->nextPtr = 0;
+
+ } // end else
+
+ value = tempPtr->data;
+ delete tempPtr;
+
+ return true; // delete successful
+
+ } // end else
+
+} // end function deleteFromBack
+
+// is List empty?
+template< class NODETYPE >
+bool List< NODETYPE >::isEmpty() const
+{
+ return firstPtr == 0;
+
+} // end function isEmpty
+
+// return pointer to newly allocated node
+template< class NODETYPE >
+ListNode< NODETYPE > *List< NODETYPE >::getNewNode(
+ const NODETYPE &value )
+{
+ return new ListNode< NODETYPE >( value );
+
+} // end function getNewNode
+
+// display contents of List
+template< class NODETYPE >
+void List< NODETYPE >::print() const
+{
+ if ( isEmpty() ) {
+ cout << "The list is empty\n\n";
+ return;
+
+ } // end if
+
+ ListNode< NODETYPE > *currentPtr = firstPtr;
+
+ cout << "The list is: ";
+
+ while ( currentPtr != 0 ) {
+ cout << currentPtr->data << ' ';
+ currentPtr = currentPtr->nextPtr;
+
+ } // end while
+
+ cout << "\n\n";
+
+} // end function print
+
+#endif
+
+/**************************************************************************
+ * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice *
+ * Hall. All Rights Reserved. *
+ * *
+ * DISCLAIMER: The authors and publisher of this book have used their *
+ * best efforts in preparing the book. These efforts include the *
+ * development, research, and testing of the theories and programs *
+ * to determine their effectiveness. The authors and publisher make *
+ * no warranty of any kind, expressed or implied, with regard to these *
+ * programs or to the documentation contained in these books. The authors *
+ * and publisher shall not be liable in any event for incidental or *
+ * consequential damages in connection with, or arising out of, the *
+ * furnishing, performance, or use of these programs. *
+ *************************************************************************/ \ No newline at end of file
diff --git a/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/listnode.h b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/listnode.h
new file mode 100644
index 0000000..7980786
--- /dev/null
+++ b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/listnode.h
@@ -0,0 +1,56 @@
+// Fig. 15.3: listnode.h
+// Template ListNode class definition.
+#ifndef LISTNODE_H
+#define LISTNODE_H
+
+// forward declaration of class List
+template< class NODETYPE > class List;
+
+template< class NODETYPE >
+class ListNode {
+ friend class List< NODETYPE >; // make List a friend
+
+public:
+ ListNode( const NODETYPE & ); // constructor
+ NODETYPE getData() const; // return data in node
+
+private:
+ NODETYPE data; // data
+ ListNode< NODETYPE > *nextPtr; // next node in list
+
+}; // end class ListNode
+
+// constructor
+template< class NODETYPE >
+ListNode< NODETYPE >::ListNode( const NODETYPE &info )
+ : data( info ),
+ nextPtr( 0 )
+{
+ // empty body
+
+} // end ListNode constructor
+
+// return copy of data in node
+template< class NODETYPE >
+NODETYPE ListNode< NODETYPE >::getData() const
+{
+ return data;
+
+} // end function getData
+
+#endif
+
+/**************************************************************************
+ * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice *
+ * Hall. All Rights Reserved. *
+ * *
+ * DISCLAIMER: The authors and publisher of this book have used their *
+ * best efforts in preparing the book. These efforts include the *
+ * development, research, and testing of the theories and programs *
+ * to determine their effectiveness. The authors and publisher make *
+ * no warranty of any kind, expressed or implied, with regard to these *
+ * programs or to the documentation contained in these books. The authors *
+ * and publisher shall not be liable in any event for incidental or *
+ * consequential damages in connection with, or arising out of, the *
+ * furnishing, performance, or use of these programs. *
+ *************************************************************************/ \ No newline at end of file
diff --git a/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/queue.h b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/queue.h
new file mode 100644
index 0000000..84054c9
--- /dev/null
+++ b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/queue.h
@@ -0,0 +1,57 @@
+// Fig. 17.13: queue.h
+// Template Queue class definition derived from class List.
+#ifndef QUEUE_H
+#define QUEUE_H
+
+#include "list.h" // List class definition
+
+template< class QUEUETYPE >
+class Queue: private List< QUEUETYPE > {
+
+public:
+ // enqueue calls List function insertAtBack
+ void enqueue( const QUEUETYPE &data )
+ {
+ insertAtBack( data );
+
+ } // end function enqueue
+
+ // dequeue calls List function removeFromFront
+ bool dequeue( QUEUETYPE &data )
+ {
+ return removeFromFront( data );
+
+ } // end function dequeue
+
+ // isQueueEmpty calls List function isEmpty
+ bool isQueueEmpty() const
+ {
+ return isEmpty();
+
+ } // end function isQueueEmpty
+
+ // printQueue calls List function print
+ void printQueue() const
+ {
+ print();
+
+ } // end function printQueue
+
+}; // end class Queue
+
+#endif
+
+/**************************************************************************
+ * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice *
+ * Hall. All Rights Reserved. *
+ * *
+ * DISCLAIMER: The authors and publisher of this book have used their *
+ * best efforts in preparing the book. These efforts include the *
+ * development, research, and testing of the theories and programs *
+ * to determine their effectiveness. The authors and publisher make *
+ * no warranty of any kind, expressed or implied, with regard to these *
+ * programs or to the documentation contained in these books. The authors *
+ * and publisher shall not be liable in any event for incidental or *
+ * consequential damages in connection with, or arising out of, the *
+ * furnishing, performance, or use of these programs. *
+ *************************************************************************/ \ No newline at end of file
diff --git a/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/queuecomposition.h b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/queuecomposition.h
new file mode 100644
index 0000000..01c2ad4
--- /dev/null
+++ b/Bachelor/Prog2/Codebeispiele/6_ch17/fig17_13_14/queuecomposition.h
@@ -0,0 +1,59 @@
+// Definition of Queue class composed of List object
+#ifndef QUEUE_C
+#define QUEUE_C
+
+#include "list.h"
+
+template< class QUEUETYPE >
+class Queue {
+
+public:
+ // enqueue calls queueList object's insertAtBack function
+ void enqueue( const QUEUETYPE &data )
+ {
+ queueList.insertAtBack( data );
+
+ } // end function enqueue
+
+ // dequeue calls queueList object's removeFromFront function
+ bool dequeue( QUEUETYPE &data )
+ {
+ return queueList.removeFromFront( data );
+
+ } // end function dequeue
+
+ // isQueueEmpty calls queueList object's isEmpty function
+ bool isQueueEmpty() const
+ {
+ return queueList.isEmpty();
+
+ } // end function isQueueEmpty
+
+ // printQueue calls queueList object's print function
+ void printQueue() const
+ {
+ queueList.print();
+
+ } // end function printQueue
+
+private:
+ List< QUEUETYPE > queueList; // composed List object
+
+}; // end class Queue
+
+#endif
+
+/**************************************************************************
+ * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice *
+ * Hall. All Rights Reserved. *
+ * *
+ * DISCLAIMER: The authors and publisher of this book have used their *
+ * best efforts in preparing the book. These efforts include the *
+ * development, research, and testing of the theories and programs *
+ * to determine their effectiveness. The authors and publisher make *
+ * no warranty of any kind, expressed or implied, with regard to these *
+ * programs or to the documentation contained in these books. The authors *
+ * and publisher shall not be liable in any event for incidental or *
+ * consequential damages in connection with, or arising out of, the *
+ * furnishing, performance, or use of these programs. *
+ *************************************************************************/ \ No newline at end of file