#include <stdio.h>
#include <stdlib.h> // For qsort
#define QUEUESIZE 10 // Number of items the Queue can hold
typedef enum { false, true } bool; // Use #include <stdbool.h> if available
typedef struct {
char name[10];
int priority;
} Item;
Item *templist[QUEUESIZE]; // Used for sorting
typedef struct {
Item *q[QUEUESIZE+1]; // queue container
int first; // index of first element
int last; // index of last element
int count; // number of elements currently in queue
} Queue;
init_queue(Queue *q) {
q->first = 0;
q->last = QUEUESIZE-1;
q->count = 0;
}
int cmpfunc (const void * a, const void * b) {
// Modify this function to do comparision on structure's other properties
return ((*(Item**)a)->priority > (*(Item**)b)->priority);
}
void enqueue(Queue *q, Item *x){
if (q->count >= QUEUESIZE) {
} else {
q->last = (q->last+1) % QUEUESIZE;
q->q[ q->last ] = x;
q->count = q->count + 1;
}
}
Item *dequeue(Queue *q) {
Item *x;
if (q->count <= 0) {
} else {
x = q->q[ q->first ];
q->first = (q->first+1) % QUEUESIZE;
q->count = q->count - 1;
}
return(x);
}
void enqueue_with_priority(Queue *q, Item *x) {
int i, count;
enqueue(q, x);
count = q->count;
for(i=0; i < count; ++i) {
templist[i] = dequeue(q);
}
qsort(templist
, count
, sizeof(Item
*), cmpfunc
); for(i=0; i < count; ++i ) {
enqueue(q, templist[i]);
}
}
int empty(Queue *q) {
return q->count <= 0 ? true : false;
}
int main() {
Queue item_queue;
init_queue(&item_queue);
Item apple = {"apple", 10};
Item ball = {"ball", 2};
Item onion = {"onion", 8};
enqueue_with_priority(&item_queue, &apple);
enqueue_with_priority(&item_queue, &ball);
enqueue_with_priority(&item_queue, &onion);
dequeue(&item_queue);
dequeue(&item_queue);
dequeue(&item_queue);
return empty(&item_queue) ? 0 : -1;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4gLy8gRm9yIHFzb3J0CiNkZWZpbmUgUVVFVUVTSVpFIDEwIC8vIE51bWJlciBvZiBpdGVtcyB0aGUgUXVldWUgY2FuIGhvbGQKdHlwZWRlZiBlbnVtIHsgZmFsc2UsIHRydWUgfSBib29sOyAgLy8gVXNlICNpbmNsdWRlIDxzdGRib29sLmg+IGlmIGF2YWlsYWJsZQoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciBuYW1lWzEwXTsKICAgIGludCBwcmlvcml0eTsKfSBJdGVtOwoKSXRlbSAqdGVtcGxpc3RbUVVFVUVTSVpFXTsgLy8gVXNlZCBmb3Igc29ydGluZwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgSXRlbSAqcVtRVUVVRVNJWkUrMV07CQkvLyBxdWV1ZSBjb250YWluZXIKICAgIGludCBmaXJzdDsgICAgICAgICAgICAgICAgICAvLyBpbmRleCBvZiBmaXJzdCBlbGVtZW50CiAgICBpbnQgbGFzdDsgICAgICAgICAgICAgICAgICAgLy8gaW5kZXggb2YgbGFzdCBlbGVtZW50CiAgICBpbnQgY291bnQ7ICAgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGVsZW1lbnRzIGN1cnJlbnRseSBpbiBxdWV1ZQp9IFF1ZXVlOwoKCmluaXRfcXVldWUoUXVldWUgKnEpIHsKICAgIHEtPmZpcnN0ID0gMDsKICAgIHEtPmxhc3QgPSBRVUVVRVNJWkUtMTsKICAgIHEtPmNvdW50ID0gMDsKfQoKaW50IGNtcGZ1bmMgKGNvbnN0IHZvaWQgKiBhLCBjb25zdCB2b2lkICogYikgewogICAgLy8gTW9kaWZ5IHRoaXMgZnVuY3Rpb24gdG8gZG8gY29tcGFyaXNpb24gb24gc3RydWN0dXJlJ3Mgb3RoZXIgcHJvcGVydGllcwogICAgcmV0dXJuICgoKihJdGVtKiopYSktPnByaW9yaXR5ID4gKCooSXRlbSoqKWIpLT5wcmlvcml0eSk7Cn0KCnZvaWQgZW5xdWV1ZShRdWV1ZSAqcSwgSXRlbSAqeCl7CiAgICBpZiAocS0+Y291bnQgPj0gUVVFVUVTSVpFKSB7CiAgICAgICAgcHJpbnRmKCJRdWV1ZSBvdmVyZmxvd1xuIik7CiAgICB9IGVsc2UgewogICAgICAgIHEtPmxhc3QgPSAocS0+bGFzdCsxKSAlIFFVRVVFU0laRTsKICAgICAgICBxLT5xWyBxLT5sYXN0IF0gPSB4OyAgICAKICAgICAgICBxLT5jb3VudCA9IHEtPmNvdW50ICsgMTsgICAgICAgICAgICAgICAgCiAgICB9Cn0KCkl0ZW0gKmRlcXVldWUoUXVldWUgKnEpIHsKICAgIEl0ZW0gKng7CgogICAgaWYgKHEtPmNvdW50IDw9IDApIHsKICAgICAgICBwcmludGYoIlF1ZXVlIGVtcHR5XG4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgeCA9IHEtPnFbIHEtPmZpcnN0IF07CiAgICAgICAgcS0+Zmlyc3QgPSAocS0+Zmlyc3QrMSkgJSBRVUVVRVNJWkU7CiAgICAgICAgcS0+Y291bnQgPSBxLT5jb3VudCAtIDE7CiAgICB9CgogICAgcmV0dXJuKHgpOwp9Cgp2b2lkIGVucXVldWVfd2l0aF9wcmlvcml0eShRdWV1ZSAqcSwgSXRlbSAqeCkgewoJaW50IGksIGNvdW50OwoJZW5xdWV1ZShxLCB4KTsKCWNvdW50ID0gcS0+Y291bnQ7Cglmb3IoaT0wOyBpIDwgY291bnQ7ICsraSkgewoJCXRlbXBsaXN0W2ldID0gZGVxdWV1ZShxKTsKCX0KICAgIHFzb3J0KHRlbXBsaXN0LCBjb3VudCwgc2l6ZW9mKEl0ZW0gKiksIGNtcGZ1bmMpOwogICAgZm9yKGk9MDsgaSA8IGNvdW50OyArK2kgKSB7CiAgICAJZW5xdWV1ZShxLCB0ZW1wbGlzdFtpXSk7CiAgICB9Cgp9CgppbnQgZW1wdHkoUXVldWUgKnEpIHsKICAgIHJldHVybiBxLT5jb3VudCA8PSAwID8gdHJ1ZSA6IGZhbHNlOwp9CgoKaW50IG1haW4oKSB7CiAgICBRdWV1ZSBpdGVtX3F1ZXVlOwogICAgaW5pdF9xdWV1ZSgmaXRlbV9xdWV1ZSk7CgogICAgSXRlbSBhcHBsZSA9IHsiYXBwbGUiLCAxMH07CiAgICBJdGVtIGJhbGwgPSB7ImJhbGwiLCAyfTsKICAgIEl0ZW0gb25pb24gPSB7Im9uaW9uIiwgOH07CgogICAgZW5xdWV1ZV93aXRoX3ByaW9yaXR5KCZpdGVtX3F1ZXVlLCAmYXBwbGUpOwogICAgZW5xdWV1ZV93aXRoX3ByaW9yaXR5KCZpdGVtX3F1ZXVlLCAmYmFsbCk7CiAgICBlbnF1ZXVlX3dpdGhfcHJpb3JpdHkoJml0ZW1fcXVldWUsICZvbmlvbik7CgogICAgZGVxdWV1ZSgmaXRlbV9xdWV1ZSk7CiAgICBkZXF1ZXVlKCZpdGVtX3F1ZXVlKTsKICAgIGRlcXVldWUoJml0ZW1fcXVldWUpOwoKICAgIHJldHVybiBlbXB0eSgmaXRlbV9xdWV1ZSkgPyAwIDogLTE7Cn0=