⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linked_lists_double.sgml

📁 GLib是GTK+和GNOME工程的基础底层核心程序库
💻 SGML
📖 第 1 页 / 共 4 页
字号:
<refentry id="glib-Doubly-Linked-Lists"><refmeta><refentrytitle>Doubly-Linked Lists</refentrytitle><manvolnum>3</manvolnum><refmiscinfo>GLIB Library</refmiscinfo></refmeta><refnamediv><refname>Doubly-Linked Lists</refname><refpurpose>linked lists containing integer values or pointers to data, with the abilityto iterate over the list in both directions.</refpurpose></refnamediv><refsynopsisdiv><title>Synopsis</title><synopsis>#include &lt;glib.h&gt;struct      <link linkend="GList">GList</link>;<link linkend="GList">GList</link>*      <link linkend="g-list-append">g_list_append</link>                   (<link linkend="GList">GList</link> *list,                                             <link linkend="gpointer">gpointer</link> data);<link linkend="GList">GList</link>*      <link linkend="g-list-prepend">g_list_prepend</link>                  (<link linkend="GList">GList</link> *list,                                             <link linkend="gpointer">gpointer</link> data);<link linkend="GList">GList</link>*      <link linkend="g-list-insert">g_list_insert</link>                   (<link linkend="GList">GList</link> *list,                                             <link linkend="gpointer">gpointer</link> data,                                             <link linkend="gint">gint</link> position);<link linkend="GList">GList</link>*      <link linkend="g-list-insert-before">g_list_insert_before</link>            (<link linkend="GList">GList</link> *list,                                             <link linkend="GList">GList</link> *sibling,                                             <link linkend="gpointer">gpointer</link> data);<link linkend="GList">GList</link>*      <link linkend="g-list-insert-sorted">g_list_insert_sorted</link>            (<link linkend="GList">GList</link> *list,                                             <link linkend="gpointer">gpointer</link> data,                                             <link linkend="GCompareFunc">GCompareFunc</link> func);<link linkend="GList">GList</link>*      <link linkend="g-list-remove">g_list_remove</link>                   (<link linkend="GList">GList</link> *list,                                             <link linkend="gconstpointer">gconstpointer</link> data);<link linkend="GList">GList</link>*      <link linkend="g-list-remove-link">g_list_remove_link</link>              (<link linkend="GList">GList</link> *list,                                             <link linkend="GList">GList</link> *llink);<link linkend="GList">GList</link>*      <link linkend="g-list-delete-link">g_list_delete_link</link>              (<link linkend="GList">GList</link> *list,                                             <link linkend="GList">GList</link> *link);<link linkend="GList">GList</link>*      <link linkend="g-list-remove-all">g_list_remove_all</link>               (<link linkend="GList">GList</link> *list,                                             <link linkend="gconstpointer">gconstpointer</link> data);void        <link linkend="g-list-free">g_list_free</link>                     (<link linkend="GList">GList</link> *list);<link linkend="GList">GList</link>*      <link linkend="g-list-alloc">g_list_alloc</link>                    (void);void        <link linkend="g-list-free-1">g_list_free_1</link>                   (<link linkend="GList">GList</link> *list);<link linkend="guint">guint</link>       <link linkend="g-list-length">g_list_length</link>                   (<link linkend="GList">GList</link> *list);<link linkend="GList">GList</link>*      <link linkend="g-list-copy">g_list_copy</link>                     (<link linkend="GList">GList</link> *list);<link linkend="GList">GList</link>*      <link linkend="g-list-reverse">g_list_reverse</link>                  (<link linkend="GList">GList</link> *list);<link linkend="GList">GList</link>*      <link linkend="g-list-sort">g_list_sort</link>                     (<link linkend="GList">GList</link> *list,                                             <link linkend="GCompareFunc">GCompareFunc</link> compare_func);<link linkend="gint">gint</link>        (<link linkend="GCompareFunc">*GCompareFunc</link>)                 (<link linkend="gconstpointer">gconstpointer</link> a,                                             <link linkend="gconstpointer">gconstpointer</link> b);<link linkend="GList">GList</link>*      <link linkend="g-list-sort-with-data">g_list_sort_with_data</link>           (<link linkend="GList">GList</link> *list,                                             <link linkend="GCompareDataFunc">GCompareDataFunc</link> compare_func,                                             <link linkend="gpointer">gpointer</link> user_data);<link linkend="gint">gint</link>        (<link linkend="GCompareDataFunc">*GCompareDataFunc</link>)             (<link linkend="gconstpointer">gconstpointer</link> a,                                             <link linkend="gconstpointer">gconstpointer</link> b,                                             <link linkend="gpointer">gpointer</link> user_data);<link linkend="GList">GList</link>*      <link linkend="g-list-concat">g_list_concat</link>                   (<link linkend="GList">GList</link> *list1,                                             <link linkend="GList">GList</link> *list2);void        <link linkend="g-list-foreach">g_list_foreach</link>                  (<link linkend="GList">GList</link> *list,                                             <link linkend="GFunc">GFunc</link> func,                                             <link linkend="gpointer">gpointer</link> user_data);void        (<link linkend="GFunc">*GFunc</link>)                        (<link linkend="gpointer">gpointer</link> data,                                             <link linkend="gpointer">gpointer</link> user_data);<link linkend="GList">GList</link>*      <link linkend="g-list-first">g_list_first</link>                    (<link linkend="GList">GList</link> *list);<link linkend="GList">GList</link>*      <link linkend="g-list-last">g_list_last</link>                     (<link linkend="GList">GList</link> *list);#define     <link linkend="g-list-previous">g_list_previous</link>                 (list)#define     <link linkend="g-list-next">g_list_next</link>                     (list)<link linkend="GList">GList</link>*      <link linkend="g-list-nth">g_list_nth</link>                      (<link linkend="GList">GList</link> *list,                                             <link linkend="guint">guint</link> n);<link linkend="gpointer">gpointer</link>    <link linkend="g-list-nth-data">g_list_nth_data</link>                 (<link linkend="GList">GList</link> *list,                                             <link linkend="guint">guint</link> n);<link linkend="GList">GList</link>*      <link linkend="g-list-nth-prev">g_list_nth_prev</link>                 (<link linkend="GList">GList</link> *list,                                             <link linkend="guint">guint</link> n);<link linkend="GList">GList</link>*      <link linkend="g-list-find">g_list_find</link>                     (<link linkend="GList">GList</link> *list,                                             <link linkend="gconstpointer">gconstpointer</link> data);<link linkend="GList">GList</link>*      <link linkend="g-list-find-custom">g_list_find_custom</link>              (<link linkend="GList">GList</link> *list,                                             <link linkend="gconstpointer">gconstpointer</link> data,                                             <link linkend="GCompareFunc">GCompareFunc</link> func);<link linkend="gint">gint</link>        <link linkend="g-list-position">g_list_position</link>                 (<link linkend="GList">GList</link> *list,                                             <link linkend="GList">GList</link> *llink);<link linkend="gint">gint</link>        <link linkend="g-list-index">g_list_index</link>                    (<link linkend="GList">GList</link> *list,                                             <link linkend="gconstpointer">gconstpointer</link> data);void        <link linkend="g-list-push-allocator">g_list_push_allocator</link>           (<link linkend="GAllocator">GAllocator</link> *allocator);void        <link linkend="g-list-pop-allocator">g_list_pop_allocator</link>            (void);</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The <link linkend="GList">GList</link> structure and its associated functions provide a standarddoubly-linked list data structure.</para><para>Each element in the list contains a piece of data, together with pointerswhich link to the previous and next elements in the list.Using these pointers it is possible to move through the list in bothdirections (unlike the<link linkend="glib-Singly-Linked-lists">Singly-Linked Lists</link>which only allows movement through the list in the forward direction).</para><para>The data contained in each element can be either integer values, by using oneof the<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>,or simply pointers to any type of data.</para><para>List elements are allocated in blocks using a <link linkend="GListAllocator">GListAllocator</link>, which ismore efficient than allocating elements individually.</para><para>Note that most of the <link linkend="GList">GList</link> functions expect to be passed a pointer tothe first element in the list. The functions which insert elements returnthe new start of the list, which may have changed.</para><para>There is no function to create a <link linkend="GList">GList</link>. <literal>NULL</literal> is considered to be the emptylist so you simply set a <link linkend="GList">GList</link>* to <literal>NULL</literal>.</para><para>To add elements, use <link linkend="g-list-append">g_list_append</link>(), <link linkend="g-list-prepend">g_list_prepend</link>(), <link linkend="g-list-insert">g_list_insert</link>()and <link linkend="g-list-insert-sorted">g_list_insert_sorted</link>().</para><para>To remove elements, use <link linkend="g-list-remove">g_list_remove</link>().</para><para>To find elements in the list use <link linkend="g-list-first">g_list_first</link>(), <link linkend="g-list-last">g_list_last</link>(), <link linkend="g-list-next">g_list_next</link>(),<link linkend="g-list-previous">g_list_previous</link>(), <link linkend="g-list-nth">g_list_nth</link>(), <link linkend="g-list-nth-data">g_list_nth_data</link>(), <link linkend="g-list-find">g_list_find</link>() and<link linkend="g-list-find-custom">g_list_find_custom</link>().</para><para>To find the index of an element use <link linkend="g-list-position">g_list_position</link>() and <link linkend="g-list-index">g_list_index</link>().</para><para>To call a function for each element in the list use <link linkend="g-list-foreach">g_list_foreach</link>().</para><para>To free the entire list, use <link linkend="g-list-free">g_list_free</link>().</para></refsect1><refsect1><title>Details</title><refsect2><title><anchor id="GList">struct GList</title><programlisting>struct GList{  gpointer data;  GList *next;  GList *prev;};</programlisting><para>The <link linkend="GList">GList</link> struct is used for each element in a doubly-linked list.The <structfield>data</structfield> field holds the element's data, which canbe a pointer to any kind of data, or any integer value using the<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>.The <structfield>next</structfield> and <structfield>prev</structfield>pointers are the links to the next and previous elements in the list.</para></refsect2><refsect2><title><anchor id="g-list-append">g_list_append ()</title><programlisting><link linkend="GList">GList</link>*      g_list_append                   (<link linkend="GList">GList</link> *list,                                             <link linkend="gpointer">gpointer</link> data);</programlisting><para>Adds a new element on to the end of the list.</para><note><para>The return value is the new start of the list, which may have changed, somake sure you store the new value.</para></note><informalexample><programlisting>  /* Notice that these are initialized to the empty list. */  GList *list = NULL, *number_list = NULL;  /* This is a list of strings. */  list = g_list_append (list, "first");  list = g_list_append (list, "second");  /* This is a list of integers. */  number_list = g_list_append (number_list, GINT_TO_POINTER (27));  number_list = g_list_append (number_list, GINT_TO_POINTER (14));</programlisting></informalexample><informaltable pgwide="1" frame="none" role="params"><tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*"><tbody><row><entry align="right"><parameter>list</parameter>&nbsp;:</entry><entry>a pointer to a <link linkend="GList">GList</link>.</entry></row><row><entry align="right"><parameter>data</parameter>&nbsp;:</entry><entry>the data for the new element.</entry></row><row><entry align="right"><emphasis>Returns</emphasis> :</entry><entry>the new start of the <link linkend="GList">GList</link>.</entry></row></tbody></tgroup></informaltable></refsect2><refsect2><title><anchor id="g-list-prepend">g_list_prepend ()</title><programlisting><link linkend="GList">GList</link>*      g_list_prepend                  (<link linkend="GList">GList</link> *list,                                             <link linkend="gpointer">gpointer</link> data);</programlisting><para>Adds a new element on to the start of the list.</para><note><para>The return value is the new start of the list, which may have changed, somake sure you store the new value.</para></note><informalexample><programlisting>  /* Notice that it is initialized to the empty list. */  GList *list = NULL;  list = g_list_prepend (list, "last");  list = g_list_prepend (list, "first");</programlisting></informalexample><informaltable pgwide="1" frame="none" role="params"><tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*"><tbody><row><entry align="right"><parameter>list</parameter>&nbsp;:</entry><entry>a pointer to a <link linkend="GList">GList</link>.</entry></row><row><entry align="right"><parameter>data</parameter>&nbsp;:</entry><entry>the data for the new element.</entry></row><row><entry align="right"><emphasis>Returns</emphasis> :</entry><entry>the new start of the <link linkend="GList">GList</link>.</entry></row></tbody></tgroup></informaltable></refsect2><refsect2>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -