#include <stdio.h>
#include <stdlib.h>
struct qnode {
int data;
int prio;
struct qnode *next;
};
void quein(struct qnode **, struct qnode **, int, int);
int quedel(struct qnode **, struct qnode **, int *, int *);
int main(void) {
int tab[10] = { 2, 8, 3, 5, 4, 9, 6, 7, 1, 0 };
struct qnode *first = NULL;
struct qnode *last = NULL;
int val, prio, i;
for (i = 0; i < 10; i++) {
val = tab[i], prio = i;
printf("Inserting: value: %d with priority: %d\n", prio, val);
quein(&first, &last, val, prio);
}
printf("=-=\n");
for (i = 0; i < 11; i++) {
val = tab[i], prio = i;
if (quedel(&first, &last, &val, &prio) != -1)
printf("Deleting: value: %d with priority: %d\n", prio, val);
}
return 0;
}
int quedel(struct qnode **first, struct qnode **last, int *prio, int *val) {
struct qnode *tmp = NULL;
if ((NULL == *last) && (*last == *first)) {
fprintf(stderr, "Empty queue.....\n");
return -1;
}
*val = (*first)->data, *prio = (*first)->prio;
tmp = *first, *first = (*first)->next;
if (*last == tmp)
*last = (*last)->next;
free(tmp);
return 0;
}
void quein(struct qnode **first, struct qnode **last, int prio, int val) {
struct qnode *tmp = NULL;
struct qnode *tmp1 = NULL;
tmp = malloc(sizeof(struct qnode));
tmp->data = val;
tmp->prio = prio;
tmp->next = NULL;
if (*last == NULL) {
*last = tmp;
*first = *last;
} else {
if ((*first)->prio < prio) {
tmp->next = *first;
*first = tmp;
} else {
if ((*last)->prio > prio) {
(*last)->next = tmp;
*last = tmp;
} else {
tmp1 = *first;
while ((tmp1->next)->prio >= prio) {
tmp1 = tmp1->next;
}
tmp->next = tmp1->next;
tmp1->next = tmp;
}
}
}
return;
}
/*-via Programming Hub for Android, a top rated Programming App on Google Play
https://play.google.com/store/apps/details?id=com.freeit.java*/
Sunday, August 16, 2015
Program: Linked Queue
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment