<!-- ##### SECTION Title ##### -->
Double-ended Queues

<!-- ##### SECTION Short_Description ##### -->
double-ended queue data structure

<!-- ##### SECTION Long_Description ##### -->
<para>
The #GQueue structure and its associated functions provide a standard
queue data structure. Internally, #GQueue uses the same data structure as 
#GList to store elements.  
</para>
<para>
The data contained in each element can be either integer values, by using one
of the
<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>,
or simply pointers to any type of data.
</para>
<para>
To create a new #GQueue, use g_queue_new().
</para>
<para>
To initialize a statically-allocated #GQueue, use #G_QUEUE_INIT or
g_queue_init().
</para>
<para>
To add elements, use g_queue_push_head(), g_queue_push_head_link(), 
g_queue_push_tail() and g_queue_push_tail_link().
</para>
<para>
To remove elements, use g_queue_pop_head() and g_queue_pop_tail().
</para>
<para>
To free the entire queue, use g_queue_free().
</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### STRUCT GQueue ##### -->
<para>
Contains the public fields of a <link linkend="glib-queues">Queue</link>.
</para>

@head: a pointer to the first element of the queue.
@tail: a pointer to the last element of the queue.
@length: the number of elements in the queue.

<!-- ##### FUNCTION g_queue_new ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_queue_free ##### -->
<para>

</para>

@queue: 


<!-- ##### MACRO G_QUEUE_INIT ##### -->
<para>
A statically-allocated #GQueue must be initialized with this macro before it
can be used.  This macro can be used to initialize a variable, but it cannot
be assigned to a variable.  In that case you have to use g_queue_init().
</para>

<informalexample>
<programlisting>
GQueue my_queue = G_QUEUE_INIT;
</programlisting>
</informalexample>

@Since: 2.14


<!-- ##### FUNCTION g_queue_init ##### -->
<para>

</para>

@queue: 


<!-- ##### FUNCTION g_queue_clear ##### -->
<para>

</para>

@queue: 


<!-- ##### FUNCTION g_queue_is_empty ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_get_length ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_reverse ##### -->
<para>

</para>

@queue: 


<!-- ##### FUNCTION g_queue_copy ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_foreach ##### -->
<para>

</para>

@queue: 
@func: 
@user_data: 


<!-- ##### FUNCTION g_queue_find ##### -->
<para>

</para>

@queue: 
@data: 
@Returns: 


<!-- ##### FUNCTION g_queue_find_custom ##### -->
<para>

</para>

@queue: 
@data: 
@func: 
@Returns: 


<!-- ##### FUNCTION g_queue_sort ##### -->
<para>

</para>

@queue: 
@compare_func: 
@user_data: 


<!-- ##### FUNCTION g_queue_push_head ##### -->
<para>

</para>

@queue: 
@data: 


<!-- ##### FUNCTION g_queue_push_tail ##### -->
<para>

</para>

@queue: 
@data: 


<!-- ##### FUNCTION g_queue_push_nth ##### -->
<para>

</para>

@queue: 
@data: 
@n: 


<!-- ##### FUNCTION g_queue_pop_head ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_pop_tail ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_pop_nth ##### -->
<para>

</para>

@queue: 
@n: 
@Returns: 


<!-- ##### FUNCTION g_queue_peek_head ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_peek_tail ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_peek_nth ##### -->
<para>

</para>

@queue: 
@n: 
@Returns: 


<!-- ##### FUNCTION g_queue_index ##### -->
<para>

</para>

@queue: 
@data: 
@Returns: 


<!-- ##### FUNCTION g_queue_remove ##### -->
<para>

</para>

@queue: 
@data: 


<!-- ##### FUNCTION g_queue_remove_all ##### -->
<para>

</para>

@queue: 
@data: 


<!-- ##### FUNCTION g_queue_insert_before ##### -->
<para>

</para>

@queue: 
@sibling: 
@data: 


<!-- ##### FUNCTION g_queue_insert_after ##### -->
<para>

</para>

@queue: 
@sibling: 
@data: 


<!-- ##### FUNCTION g_queue_insert_sorted ##### -->
<para>

</para>

@queue: 
@data: 
@func: 
@user_data: 


<!-- ##### FUNCTION g_queue_push_head_link ##### -->
<para>

</para>

@queue: 
@link_: 


<!-- ##### FUNCTION g_queue_push_tail_link ##### -->
<para>

</para>

@queue: 
@link_: 


<!-- ##### FUNCTION g_queue_push_nth_link ##### -->
<para>

</para>

@queue: 
@n: 
@link_: 


<!-- ##### FUNCTION g_queue_pop_head_link ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_pop_tail_link ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_pop_nth_link ##### -->
<para>

</para>

@queue: 
@n: 
@Returns: 


<!-- ##### FUNCTION g_queue_peek_head_link ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_peek_tail_link ##### -->
<para>

</para>

@queue: 
@Returns: 


<!-- ##### FUNCTION g_queue_peek_nth_link ##### -->
<para>

</para>

@queue: 
@n: 
@Returns: 


<!-- ##### FUNCTION g_queue_link_index ##### -->
<para>

</para>

@queue: 
@link_: 
@Returns: 


<!-- ##### FUNCTION g_queue_unlink ##### -->
<para>

</para>

@queue: 
@link_: 


<!-- ##### FUNCTION g_queue_delete_link ##### -->
<para>

</para>

@queue: 
@link_: 


