int main(void) { Queue *pQ = NULL; QueueNode *pNode = NULL; char *pStr = NULL; pQ = initQueue(); pStr = getData(); pNode = makeNode(pStr); enqueue(&pQ, pNode); pStr = getData(); pNode = makeNode(pStr); enqueue(&pQ, pNode); pStr = getData(); pNode = makeNode(pStr); enqueue(&pQ, pNode); //Print current queue printQueueRecursive(pQ->pHead); printf("\n"); system("pause"); //dequeue pStr = dequeue(&pQ); pStr = dequeue(&pQ); pStr = dequeue(&pQ); printQueueRecursive(pQ->pHead); printf("\n"); system("pause"); //add to queue pStr = getData(); pNode = makeNode(pStr); enqueue(&pQ, pNode); pStr = getData(); pNode = makeNode(pStr); enqueue(&pQ, pNode); printQueueRecursive(pQ->pHead); return 0; }
/************************************************************************************************** * Function Name: standardLaneQueue * * Date Created: 2/18/12 * * Date Last Modified:2/18/12 * * Description: function simiulates queue based on standard lane random numbers. It prints the * * queue after each new node or loss of node. * * Input Parameters: pointer to queue, simulated time scale by user in min * * Returns: NONE * * Preconditions: address to queue is passed in along with user time * * Post Conditions: queue is added to and subtracted from until user time is reached * * Test Conditions: NOT TESTED * **************************************************************************************************/ void standardLaneQueue(Queue *pQueue, int userTime) { int randArrivalTime = 0, serviceTime= 0, totalTime = 0; int timePassed = 0, custNum = 0, addCount = 0; //addcount = 0 is FALSE QueueNode data = {0, 0, 0, NULL}; while (timePassed <= userTime) { addCount = 0; //Reset each add randArrivalTime = (rand() % (STD_MAX - STD_MIN + 1) + STD_MIN); timePassed = randArrivalTime + timePassed; //Keeps track of customer number based on available service time. custNum ++; serviceTime = (rand() % (STD_SRV_MAX - STD_SRV_MIN + 1) + STD_SRV_MIN); totalTime = serviceTime + totalTime; data.customerNumber = custNum; data.serviceTime = serviceTime; data.totalTime = totalTime; if(!isEmpty(*pQueue)) { if (pQueue->pHead->serviceTime > randArrivalTime) //Person in front not standing long enough to leave yet { enqueue(pQueue, data); addCount = 1; //Node was added pQueue->pHead->serviceTime = pQueue->pHead->serviceTime - randArrivalTime; //denotes time passed while being serviced but not done } else //Person in front serviced before next addition { while (pQueue->pHead != NULL && pQueue->pHead->serviceTime <= randArrivalTime) //Keep servicing guy in front till new guy arrives { randArrivalTime = randArrivalTime - (pQueue->pHead->serviceTime); //Time less guy already served dequeue(pQueue); } } if (addCount != 1) //No Node added so add next guy { enqueue(pQueue, data); } } else { enqueue(pQueue, data); } printQueueRecursive(*pQueue); system("PAUSE"); system("cls"); } }
/************************************************************************************************** * Function Name: printQueueRecursive * * Date Created: 2/16/12 * * Date Last Modified:2/16/12 * * Description: function prints queue * * Input Parameters: queue * * Returns: NONE * * Preconditions: queue is passed in * * Post Conditions: queue is printed in order * * Test Conditions: NOT TESTED * **************************************************************************************************/ void printQueueRecursive(Queue queue) { if (!isEmpty(queue)) { printf("Customer: %d \n", (queue.pHead)->customerNumber); printf("ServiceTimeLeft: %d min \n", (queue.pHead) ->serviceTime); printf("TotalTime so far: %d min\n", (queue.pHead) ->totalTime); queue.pHead = queue.pHead ->pNext; printQueueRecursive(queue); } }