Υλοποίηση σε C
Υλοποίηση με πίνακα
-  Η ουρά μπορεί να υλοποιηθεί με τη χρήση ενός πίνακα.
 -  Δύο ξεχωριστές μεταβλητές δείχνουν την αρχή και το τέλος της ουράς.
 -  Απαραίτητοι οι έλεγχοι για υπερχείλιση και υποχείλιση. 
 -  Ο πίνακας (ή δείκτης σε αυτόν) καθώς και οι μεταβλητές της αρχής και
του τέλους μπορούν να ομαδοποιηθούν σε μια εγγραφή.
 
Παράδειγμα 1
struct s_int_queue {
	int values[20];			/* Array of values */
	int head;			/* Head of queue (values[head]) */
	int tail;			/* Tail of queue (values[tail]) */
};
Παράδειγμα 2
struct s_int_queue {
	int *values;			/* Allocated array of values */
	int values_size;		/* Number of values allocated */
	int head;			/* Head of queue (values[head]) */
	int tail;			/* Tail of queue (values[tail]) */
};
Παράδειγμα 3
struct s_int_queue {
	int *values_start;		/* Start of allocated array of values */
	int *values_end;		/* End of allocated array of values */
	int *head;			/* Head of queue  */
	int *tail;			/* Tail of queue  */
};
Υλοποίηση με συνδεδεμένη λίστα
-  Η ουρά μπορεί να υλοποιηθεί με τη μιας συνδεδεμένης λίστας
 -  Δύο ξεχωριστές μεταβλητές δείχνουν τα στοιχεία της λίστας που
αποτελούν την αρχή και το τέλος της ουράς.
Η 
αρχή της ουράς  (queue head)
(το σημείο από το οποίο αφαιρούνται τα στοιχεία) είναι
η αρχή της λίστας,
το τέλος της ουράς  (queue tail)
είναι το τέλος της λίστας.
 -  Οι δείκτες στην αρχή το τέλος της λίστας μπορούν να ομαδοποιηθούν
σε μια εγγραφή.
 
Παράδειγμα
struct s_int_list {
	int val;
	struct s_int_list *next;
};
struct s_int_queue {
	struct s_int_list *head;
	struct s_int_list *tail;
};
/* Add an element to the queue */
void
int_queue_put(struct s_int_queue *q, int v)
{
	struct s_int_list *p;
	p = (struct s_int_list *)malloc(sizeof(struct s_int_list));
	p->next = NULL;
	p->val = v;
	if (q->tail != NULL)
		q->tail->next = p;	/* Add element to queue tail */
	else
		q->head = p;		/* Special case for empty queue */
	q->tail = p;
}
/* Remove and return an element from a non-empty queue */
int
int_queue_get(struct s_int_queue *q)
{
	int v;
	struct s_int_list *tmp;
	assert(q->head != NULL);
	v = q->head->val;
	if (q->head->next == NULL)
		q->tail = NULL;		/* Special case for empty queue */
	tmp = q->head->next;
	free(q->head);
	q->head = tmp;
	return (v);
}