Rev 2 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Copyright 1995, Brown University, Providence, RI
*
* Permission to use and modify this software and its documentation for
* any purpose other than its incorporation into a commercial product is
* hereby granted without fee. Permission to copy and distribute this
* software and its documentation only for non-commercial use is also
* granted without fee, provided, however, that the above copyright notice
* appear in all copies, that both that copyright notice and this permission
* notice appear in supporting documentation, that the name of Brown
* University not be used in advertising or publicity pertaining to
* distribution of the software without specific, written prior permission,
* and that the person doing the distribution notify Brown University of
* such distributions outside of his or her organization. Brown University
* makes no representations about the suitability of this software for
* any purpose. It is provided "as is" without express or implied warranty.
* Brown University requests notification of any modifications to this
* software or its documentation.
*
* Send the following redistribution information:
*
* Name:
* Organization:
* Address (postal and/or electronic):
*
* To:
* Software Librarian
* Computer Science Department, Box 1910
* Brown University
* Providence, RI 02912
*
* or
*
* brusd@cs.brown.edu
*
* We will acknowledge all electronic notifications.
*/
#include "queue_int.H"
QUEUEint::QUEUEint()
: headOfList(NULL),
tailOfList(NULL)
{
}
//Deconstructor
QUEUEint::~QUEUEint()
{
//Dequeue all the nodes
for (int result=1,tmp;result;tmp=deQueue(result)) {
}
}
int QUEUEint::deQueue(int &result)
{
if (!tailOfList) {
result=0;
return 0;
} else result=1;
int retVal = headOfList->data;
//save node to delete
Item *deleteNode=headOfList;
// only one node on list?
if (tailOfList==headOfList) {
tailOfList=headOfList=NULL;
} else headOfList=headOfList->next;
delete [] deleteNode;
return retVal;
}
void
QUEUEint::enQueue(const int& inVal)
{
//Allocate new node
Item *newNode=(Item *) new char[sizeof(Item)];
//Set value
newNode->data=inVal;
//Set links in newNode
newNode->prev=tailOfList;
newNode->next=NULL;
//Set links to this node
if (tailOfList) {
//Already a tail node whose next pointer we have to fix
tailOfList->next=newNode;
} else {
//first node
headOfList=newNode;
}
tailOfList=newNode;
}