#include <stdio.h>
#include "queues.h"
#include <stdbool.h>
#include <stdlib.h>
//Category Queues
//Prototype Statements
void fillQueues(QUEUE*, QUEUE*, QUEUE*, QUEUE*);
void printQueues(QUEUE*, QUEUE*, QUEUE*, QUEUE*);
void printOneQueue(QUEUE* pQueue);
int main(void)
{
//Local Definitions
QUEUE* q0to9;
QUEUE* q10to19;
QUEUE* q20to29;
QUEUE* qOver29;
//Statements
printf("Welcome to a demonstration of categorizing \n" " data. We generate 25 random numbers and then 'n"
"group them into categories using queues. \n\n");
q0to9 = createQueue();
q10to19 = createQueue();
q20to29 = createQueue();
qOver29 = createQueue();
fillQueues(q0to9, q10to19, q20to29, qOver29);
printQueues(q0to9, q10to19, q20to29, qOver29);
return 0;
}//main
//fillQueues
void fillQueues(QUEUE* q0to9, QUEUE* q10to19,
QUEUE* q20to29, QUEUE* qOver29)
{
//Local Definitions
int category;
int item;
int* dataPtr;
//Statements
printf("Categorizing data: \n");
for (int i = 1; i <= 25; i++)
{
if (!(dataPtr
= (int*)malloc(sizeof(int)))) printf("Overflow in fillQueues\a\n"),
*dataPtr
= item
= rand() % 51; category = item / 10;
if (!(i % 11))
//Start new line when line full
switch (category)
{
case 0: enqueue(q0to9, dataPtr);
break;
case 1: enqueue(q10to19, dataPtr);
break;
case 2:enqueue(q20to29, dataPtr);
break;
default: enqueue(qOver29, dataPtr);
break;
}//switch
}//for
printf("\nEnd of data categorization\n\n"); return;
}//fillQueues
//printQueues
void printQueues(QUEUE* q0to9, QUEUE* q10to19,
QUEUE* q20to29, QUEUE* qOver29)
{
//Statements
printOneQueue(q0to9);
printOneQueue(q10to19);
printOneQueue(q20to29);
printOneQueue(qOver29);
return;
}//printQueues
//printOneQueue
void printOneQueue(QUEUE* pQueue)
{
//Local Definitions
int lineCount;
int* dataPtr;
//Statements
lineCount = 0;
while (!emptyQueue(pQueue))
{
dequeue(pQueue, (void*)&dataPtr);
if (lineCount++ >= 10)
{
lineCount = 1;
}//if
}//while !emptyQueue
return;
}//prinOneQueue
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlICJxdWV1ZXMuaCIKI2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKLy9DYXRlZ29yeSBRdWV1ZXMKCi8vUHJvdG90eXBlIFN0YXRlbWVudHMKdm9pZCBmaWxsUXVldWVzKFFVRVVFKiwgUVVFVUUqLCBRVUVVRSosIFFVRVVFKik7CnZvaWQgcHJpbnRRdWV1ZXMoUVVFVUUqLCBRVUVVRSosIFFVRVVFKiwgUVVFVUUqKTsKCnZvaWQgcHJpbnRPbmVRdWV1ZShRVUVVRSogcFF1ZXVlKTsKCmludCBtYWluKHZvaWQpCnsKCS8vTG9jYWwgRGVmaW5pdGlvbnMKCVFVRVVFKiBxMHRvOTsKCVFVRVVFKiBxMTB0bzE5OwoJUVVFVUUqIHEyMHRvMjk7CglRVUVVRSogcU92ZXIyOTsKCgkvL1N0YXRlbWVudHMKCXByaW50ZigiV2VsY29tZSB0byBhIGRlbW9uc3RyYXRpb24gb2YgY2F0ZWdvcml6aW5nIFxuIgoJCSIgZGF0YS4gV2UgZ2VuZXJhdGUgMjUgcmFuZG9tIG51bWJlcnMgYW5kIHRoZW4gJ24iCgkJImdyb3VwIHRoZW0gaW50byBjYXRlZ29yaWVzIHVzaW5nIHF1ZXVlcy4gXG5cbiIpOwoKCXEwdG85ID0gY3JlYXRlUXVldWUoKTsKCXExMHRvMTkgPSBjcmVhdGVRdWV1ZSgpOwoJcTIwdG8yOSA9IGNyZWF0ZVF1ZXVlKCk7CglxT3ZlcjI5ID0gY3JlYXRlUXVldWUoKTsKCglmaWxsUXVldWVzKHEwdG85LCBxMTB0bzE5LCBxMjB0bzI5LCBxT3ZlcjI5KTsKCXByaW50UXVldWVzKHEwdG85LCBxMTB0bzE5LCBxMjB0bzI5LCBxT3ZlcjI5KTsKCglyZXR1cm4gMDsKfS8vbWFpbgoKLy9maWxsUXVldWVzCnZvaWQgZmlsbFF1ZXVlcyhRVUVVRSogcTB0bzksIFFVRVVFKiBxMTB0bzE5LAoJUVVFVUUqIHEyMHRvMjksIFFVRVVFKiBxT3ZlcjI5KQp7CgkvL0xvY2FsIERlZmluaXRpb25zCglpbnQgY2F0ZWdvcnk7CglpbnQgaXRlbTsKCWludCogZGF0YVB0cjsKCgkvL1N0YXRlbWVudHMKCXByaW50ZigiQ2F0ZWdvcml6aW5nIGRhdGE6IFxuIik7CglzcmFuZCg3OSk7CgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gMjU7IGkrKykKCXsKCQlpZiAoIShkYXRhUHRyID0gKGludCopbWFsbG9jKHNpemVvZihpbnQpKSkpCgkJCXByaW50ZigiT3ZlcmZsb3cgaW4gZmlsbFF1ZXVlc1xhXG4iKSwKCQkJZXhpdCgxMDApOwoKCQkqZGF0YVB0ciA9IGl0ZW0gPSByYW5kKCkgJSA1MTsKCQljYXRlZ29yeSA9IGl0ZW0gLyAxMDsKCQlwcmludGYoIiUzZCIsIGl0ZW0pOwoJCWlmICghKGkgJSAxMSkpCgkJCS8vU3RhcnQgbmV3IGxpbmUgd2hlbiBsaW5lIGZ1bGwKCQkJcHJpbnRmKCJcbiIpOwoKCQlzd2l0Y2ggKGNhdGVnb3J5KQoJCXsKCQljYXNlIDA6IGVucXVldWUocTB0bzksIGRhdGFQdHIpOwoJCQlicmVhazsKCQljYXNlIDE6IGVucXVldWUocTEwdG8xOSwgZGF0YVB0cik7CgkJCWJyZWFrOwoJCWNhc2UgMjplbnF1ZXVlKHEyMHRvMjksIGRhdGFQdHIpOwoJCQlicmVhazsKCQlkZWZhdWx0OiBlbnF1ZXVlKHFPdmVyMjksIGRhdGFQdHIpOwoJCQlicmVhazsKCQl9Ly9zd2l0Y2gKCX0vL2ZvcgoJcHJpbnRmKCJcbkVuZCBvZiBkYXRhIGNhdGVnb3JpemF0aW9uXG5cbiIpOwoJcmV0dXJuOwp9Ly9maWxsUXVldWVzCgovL3ByaW50UXVldWVzCnZvaWQgcHJpbnRRdWV1ZXMoUVVFVUUqIHEwdG85LCBRVUVVRSogcTEwdG8xOSwKCVFVRVVFKiBxMjB0bzI5LCBRVUVVRSogcU92ZXIyOSkKewoJLy9TdGF0ZW1lbnRzCglwcmludGYoIkRhdGEgICAwLi4gOToiKTsKCXByaW50T25lUXVldWUocTB0bzkpOwoKCXByaW50ZigiRGF0YSAgIDEwLi4xOToiKTsKCXByaW50T25lUXVldWUocTEwdG8xOSk7CgoJcHJpbnRmKCJEYXRhICAgMjAuLjI5OiIpOwoJcHJpbnRPbmVRdWV1ZShxMjB0bzI5KTsKCglwcmludGYoIkRhdGEgIG92ZXIgMjk6Iik7CglwcmludE9uZVF1ZXVlKHFPdmVyMjkpOwoKCXJldHVybjsKfS8vcHJpbnRRdWV1ZXMKCi8vcHJpbnRPbmVRdWV1ZQp2b2lkIHByaW50T25lUXVldWUoUVVFVUUqIHBRdWV1ZSkKewoJLy9Mb2NhbCBEZWZpbml0aW9ucwoJaW50IGxpbmVDb3VudDsKCWludCogZGF0YVB0cjsKCgkvL1N0YXRlbWVudHMKCWxpbmVDb3VudCA9IDA7Cgl3aGlsZSAoIWVtcHR5UXVldWUocFF1ZXVlKSkKCXsKCQlkZXF1ZXVlKHBRdWV1ZSwgKHZvaWQqKSZkYXRhUHRyKTsKCQlpZiAobGluZUNvdW50KysgPj0gMTApCgkJewoJCQlsaW5lQ291bnQgPSAxOwoJCQlwcmludGYoIlxuICAgICAgICAgICIpOwoJCX0vL2lmCgkJcHJpbnRmKCIlM2QgIiwgKmRhdGFQdHIpOwoJfS8vd2hpbGUgIWVtcHR5UXVldWUKCXByaW50ZigiXG4iKTsKCglyZXR1cm47Cn0vL3ByaW5PbmVRdWV1ZQ==