All pastes #901153 Raw Copy code Copy link Edit

Someone

public unlisted c v1 · immutable
#901153 ·published 2008-02-12 13:34 UTC
rendered paste body
#include <stdlib.h>#include "pqueue.h"/** * Dette er implemetationen af opgave G1.2. */int pqueue_insert(pqueue_t *pq, unsigned int pri, void *elem) {	pnode_t* n = malloc(sizeof(pnode_t));	if(n==NULL)		return -1;	n->pri = pri;	n->next = NULL;	n->prev = NULL;	n->content = elem;	if(pq->first==NULL) {		pq->first = n;		pq->last = n;	} else {		pnode_t* tmp = (pnode_t*)malloc(sizeof(pnode_t));		if(tmp==NULL)			return -1;		tmp = pq->first;		while(tmp!=NULL && tmp->pri>=n->pri) {			tmp = tmp->next;		}		if(tmp==pq->first) {			pq->first = n;			n->next = tmp->next;			n->next->prev = n;		} else if(tmp==pq->last) {			pq->last = n;			n->prev = tmp;			tmp->next = n;		} else {			n->next = tmp->next;			n->prev = tmp;			tmp->next = n;			n->next->prev = n;		}	}	return 0;}void *pqueue_remove(pqueue_t *pq) {	pnode_t* tmp = malloc(sizeof(pnode_t));	void *content;	if(pq->first==NULL)		return NULL;	tmp = pq->first;	content = tmp->content;	pq->first = tmp->next;	tmp->prev = NULL;	free(tmp);	return content;}=== THE HEADER ===#ifndef PQUEUE_H_#define PQUEUE_H_ 1/*Åben definition af en prioriteteskø instans. Denne kanændress efter behov, sålænge det ikke ændrer på nedenståendefunktioners grænseflade.*/typedef struct pnode {	struct pnode_t *next;	struct pnode_t *prev;	void *content;	unsigned int pri;} pnode_t;typedef struct pqueue {	struct pnode_t *first;	struct pnode_t *last;} pqueue_t;/*Indsætter et elementet som 'elem' peger på, med prioriteten 'pri'.Det er muligt at indsætte flere elementer med samme prioritet.'pq' peger på en instans af prioritetskøen.Lykkedes indsættelsen skal funktionen returnerer '0'. Ved fejl '-1'.*/int pqueue_insert(pqueue_t *pq, unsigned int pri, void *elem);/*Returnerer det element som har højst prioritet. Hvis flere elementerhar samme højeste prioritet returneres det af dem, som først blev indsat.Hvis køen er tom, returneres 'NULL'.*/void *pqueue_remove(pqueue_t *pq);#endif