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

📄 trees-nary.sgml

📁 GLib是GTK+和GNOME工程的基础底层核心程序库
💻 SGML
📖 第 1 页 / 共 4 页
字号:
<refentry id="glib-N-ary-Trees"><refmeta><refentrytitle>N-ary Trees</refentrytitle><manvolnum>3</manvolnum><refmiscinfo>GLIB Library</refmiscinfo></refmeta><refnamediv><refname>N-ary Trees</refname><refpurpose>trees of data with any number of branches.</refpurpose></refnamediv><refsynopsisdiv><title>Synopsis</title><synopsis>#include &lt;glib.h&gt;struct      <link linkend="GNode">GNode</link>;<link linkend="GNode">GNode</link>*      <link linkend="g-node-new">g_node_new</link>                      (<link linkend="gpointer">gpointer</link> data);<link linkend="GNode">GNode</link>*      <link linkend="g-node-copy">g_node_copy</link>                     (<link linkend="GNode">GNode</link> *node);<link linkend="GNode">GNode</link>*      <link linkend="g-node-insert">g_node_insert</link>                   (<link linkend="GNode">GNode</link> *parent,                                             <link linkend="gint">gint</link> position,                                             <link linkend="GNode">GNode</link> *node);<link linkend="GNode">GNode</link>*      <link linkend="g-node-insert-before">g_node_insert_before</link>            (<link linkend="GNode">GNode</link> *parent,                                             <link linkend="GNode">GNode</link> *sibling,                                             <link linkend="GNode">GNode</link> *node);<link linkend="GNode">GNode</link>*      <link linkend="g-node-insert-after">g_node_insert_after</link>             (<link linkend="GNode">GNode</link> *parent,                                             <link linkend="GNode">GNode</link> *sibling,                                             <link linkend="GNode">GNode</link> *node);#define     <link linkend="g-node-append">g_node_append</link>                   (parent, node)<link linkend="GNode">GNode</link>*      <link linkend="g-node-prepend">g_node_prepend</link>                  (<link linkend="GNode">GNode</link> *parent,                                             <link linkend="GNode">GNode</link> *node);#define     <link linkend="g-node-insert-data">g_node_insert_data</link>              (parent, position, data)#define     <link linkend="g-node-insert-data-before">g_node_insert_data_before</link>       (parent, sibling, data)#define     <link linkend="g-node-append-data">g_node_append_data</link>              (parent, data)#define     <link linkend="g-node-prepend-data">g_node_prepend_data</link>             (parent, data)void        <link linkend="g-node-reverse-children">g_node_reverse_children</link>         (<link linkend="GNode">GNode</link> *node);void        <link linkend="g-node-traverse">g_node_traverse</link>                 (<link linkend="GNode">GNode</link> *root,                                             <link linkend="GTraverseType">GTraverseType</link> order,                                             <link linkend="GTraverseFlags">GTraverseFlags</link> flags,                                             <link linkend="gint">gint</link> max_depth,                                             <link linkend="GNodeTraverseFunc">GNodeTraverseFunc</link> func,                                             <link linkend="gpointer">gpointer</link> data);enum        <link linkend="GTraverseFlags">GTraverseFlags</link>;<link linkend="gboolean">gboolean</link>    (<link linkend="GNodeTraverseFunc">*GNodeTraverseFunc</link>)            (<link linkend="GNode">GNode</link> *node,                                             <link linkend="gpointer">gpointer</link> data);void        <link linkend="g-node-children-foreach">g_node_children_foreach</link>         (<link linkend="GNode">GNode</link> *node,                                             <link linkend="GTraverseFlags">GTraverseFlags</link> flags,                                             <link linkend="GNodeForeachFunc">GNodeForeachFunc</link> func,                                             <link linkend="gpointer">gpointer</link> data);void        (<link linkend="GNodeForeachFunc">*GNodeForeachFunc</link>)             (<link linkend="GNode">GNode</link> *node,                                             <link linkend="gpointer">gpointer</link> data);<link linkend="GNode">GNode</link>*      <link linkend="g-node-get-root">g_node_get_root</link>                 (<link linkend="GNode">GNode</link> *node);<link linkend="GNode">GNode</link>*      <link linkend="g-node-find">g_node_find</link>                     (<link linkend="GNode">GNode</link> *root,                                             <link linkend="GTraverseType">GTraverseType</link> order,                                             <link linkend="GTraverseFlags">GTraverseFlags</link> flags,                                             <link linkend="gpointer">gpointer</link> data);<link linkend="GNode">GNode</link>*      <link linkend="g-node-find-child">g_node_find_child</link>               (<link linkend="GNode">GNode</link> *node,                                             <link linkend="GTraverseFlags">GTraverseFlags</link> flags,                                             <link linkend="gpointer">gpointer</link> data);<link linkend="gint">gint</link>        <link linkend="g-node-child-index">g_node_child_index</link>              (<link linkend="GNode">GNode</link> *node,                                             <link linkend="gpointer">gpointer</link> data);<link linkend="gint">gint</link>        <link linkend="g-node-child-position">g_node_child_position</link>           (<link linkend="GNode">GNode</link> *node,                                             <link linkend="GNode">GNode</link> *child);#define     <link linkend="g-node-first-child">g_node_first_child</link>              (node)<link linkend="GNode">GNode</link>*      <link linkend="g-node-last-child">g_node_last_child</link>               (<link linkend="GNode">GNode</link> *node);<link linkend="GNode">GNode</link>*      <link linkend="g-node-nth-child">g_node_nth_child</link>                (<link linkend="GNode">GNode</link> *node,                                             <link linkend="guint">guint</link> n);<link linkend="GNode">GNode</link>*      <link linkend="g-node-first-sibling">g_node_first_sibling</link>            (<link linkend="GNode">GNode</link> *node);#define     <link linkend="g-node-next-sibling">g_node_next_sibling</link>             (node)#define     <link linkend="g-node-prev-sibling">g_node_prev_sibling</link>             (node)<link linkend="GNode">GNode</link>*      <link linkend="g-node-last-sibling">g_node_last_sibling</link>             (<link linkend="GNode">GNode</link> *node);#define     <link linkend="G-NODE-IS-LEAF-CAPS">G_NODE_IS_LEAF</link>                  (node)#define     <link linkend="G-NODE-IS-ROOT-CAPS">G_NODE_IS_ROOT</link>                  (node)<link linkend="guint">guint</link>       <link linkend="g-node-depth">g_node_depth</link>                    (<link linkend="GNode">GNode</link> *node);<link linkend="guint">guint</link>       <link linkend="g-node-n-nodes">g_node_n_nodes</link>                  (<link linkend="GNode">GNode</link> *root,                                             <link linkend="GTraverseFlags">GTraverseFlags</link> flags);<link linkend="guint">guint</link>       <link linkend="g-node-n-children">g_node_n_children</link>               (<link linkend="GNode">GNode</link> *node);<link linkend="gboolean">gboolean</link>    <link linkend="g-node-is-ancestor">g_node_is_ancestor</link>              (<link linkend="GNode">GNode</link> *node,                                             <link linkend="GNode">GNode</link> *descendant);<link linkend="guint">guint</link>       <link linkend="g-node-max-height">g_node_max_height</link>               (<link linkend="GNode">GNode</link> *root);void        <link linkend="g-node-unlink">g_node_unlink</link>                   (<link linkend="GNode">GNode</link> *node);void        <link linkend="g-node-destroy">g_node_destroy</link>                  (<link linkend="GNode">GNode</link> *root);void        <link linkend="g-node-push-allocator">g_node_push_allocator</link>           (<link linkend="GAllocator">GAllocator</link> *allocator);void        <link linkend="g-node-pop-allocator">g_node_pop_allocator</link>            (void);</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The <link linkend="GNode">GNode</link> struct and its associated functions provide a N-ary tree datastructure, where nodes in the tree can contain arbitrary data.</para><para>To create a new tree use <link linkend="g-node-new">g_node_new</link>().</para><para>To insert a node into a tree use <link linkend="g-node-insert">g_node_insert</link>(), <link linkend="g-node-insert-before">g_node_insert_before</link>(),<link linkend="g-node-append">g_node_append</link>() and <link linkend="g-node-prepend">g_node_prepend</link>().</para><para>To create a new node and insert it into a tree use <link linkend="g-node-insert-data">g_node_insert_data</link>(), <link linkend="g-node-insert-data-before">g_node_insert_data_before</link>(), <link linkend="g-node-append-data">g_node_append_data</link>() and <link linkend="g-node-prepend-data">g_node_prepend_data</link>().</para><para>To reverse the children of a node use <link linkend="g-node-reverse-children">g_node_reverse_children</link>().</para><para>To find a node use <link linkend="g-node-get-root">g_node_get_root</link>(), <link linkend="g-node-find">g_node_find</link>(), <link linkend="g-node-find-child">g_node_find_child</link>(),<link linkend="g-node-child-index">g_node_child_index</link>(), <link linkend="g-node-child-position">g_node_child_position</link>(), <link linkend="g-node-first-child">g_node_first_child</link>(), <link linkend="g-node-last-child">g_node_last_child</link>(),<link linkend="g-node-nth-child">g_node_nth_child</link>(), <link linkend="g-node-first-sibling">g_node_first_sibling</link>(), <link linkend="g-node-prev-sibling">g_node_prev_sibling</link>(),<link linkend="g-node-next-sibling">g_node_next_sibling</link>() or <link linkend="g-node-last-sibling">g_node_last_sibling</link>().</para><para>To get information about a node or tree use <link linkend="G-NODE-IS-LEAF-CAPS">G_NODE_IS_LEAF</link>(),<link linkend="G-NODE-IS-ROOT-CAPS">G_NODE_IS_ROOT</link>(), <link linkend="g-node-depth">g_node_depth</link>(), <link linkend="g-node-n-nodes">g_node_n_nodes</link>(), <link linkend="g-node-n-children">g_node_n_children</link>(),<link linkend="g-node-is-ancestor">g_node_is_ancestor</link>() or <link linkend="g-node-max-height">g_node_max_height</link>().</para><para>To traverse a tree, calling a function for each node visited in thetraversal, use <link linkend="g-node-traverse">g_node_traverse</link>() or <link linkend="g-node-children-foreach">g_node_children_foreach</link>().</para><para>To remove a node or subtree from a tree use <link linkend="g-node-unlink">g_node_unlink</link>() or<link linkend="g-node-destroy">g_node_destroy</link>().</para></refsect1><refsect1><title>Details</title><refsect2><title><anchor id="GNode">struct GNode</title><programlisting>struct GNode{  gpointer data;  GNode	  *next;  GNode	  *prev;  GNode	  *parent;  GNode	  *children;};</programlisting><para>The <structname>GNode</structname> struct represents one node in a<link linkend="glib-N-ary-Trees">N-ary Tree</link>.The <structfield>data</structfield> field contains the actual data of the node.The <structfield>next</structfield> and <structfield>prev</structfield>fields point to the node's siblings (a sibling is another <structname>GNode</structname> with thesame parent).The <structfield>parent</structfield> field points to the parent of the <structname>GNode</structname>,or is <literal>NULL</literal> if the <structname>GNode</structname> is the root of the tree.The <structfield>children</structfield> field points to the first child of the<structname>GNode</structname>. The other children are accessed by using the<structfield>next</structfield> pointer of each child.</para></refsect2><refsect2><title><anchor id="g-node-new">g_node_new ()</title><programlisting><link linkend="GNode">GNode</link>*      g_node_new                      (<link linkend="gpointer">gpointer</link> data);</programlisting><para>Creates a new <link linkend="GNode">GNode</link> containing the given data.Used to create the first node in a tree.</para><informaltable pgwide="1" frame="none" role="params"><tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*"><tbody><row><entry align="right"><parameter>data</parameter>&nbsp;:</entry><entry>the data of the new node.</entry></row><row><entry align="right"><emphasis>Returns</emphasis> :</entry><entry>a new <link linkend="GNode">GNode</link>.</entry></row></tbody></tgroup></informaltable></refsect2><refsect2><title><anchor id="g-node-copy">g_node_copy ()</title><programlisting><link linkend="GNode">GNode</link>*      g_node_copy                     (<link linkend="GNode">GNode</link> *node);</programlisting><para>Recursively copies a <link linkend="GNode">GNode</link> (but does not deep-copy the data inside the nodes,since there's no way for GLib to know how to do that).</para><informaltable pgwide="1" frame="none" role="params"><tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*"><tbody><row><entry align="right"><parameter>node</parameter>&nbsp;:</entry><entry>a <link linkend="GNode">GNode</link>.</entry></row><row><entry align="right"><emphasis>Returns</emphasis> :</entry><entry>a new <link linkend="GNode">GNode</link> containing the same data pointers.</entry></row></tbody></tgroup></informaltable></refsect2><refsect2><title><anchor id="g-node-insert">g_node_insert ()</title><programlisting><link linkend="GNode">GNode</link>*      g_node_insert                   (<link linkend="GNode">GNode</link> *parent,                                             <link linkend="gint">gint</link> position,                                             <link linkend="GNode">GNode</link> *node);</programlisting><para>Inserts a <link linkend="GNode">GNode</link> beneath the parent at the given position.</para><informaltable pgwide="1" frame="none" role="params"><tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*"><tbody><row><entry align="right"><parameter>parent</parameter>&nbsp;:</entry><entry>the <link linkend="GNode">GNode</link> to place <parameter>node</parameter> under.</entry></row><row><entry align="right"><parameter>position</parameter>&nbsp;:</entry><entry>the position to place <parameter>node</parameter> at, with respect to its siblings.If position is -1, <parameter>node</parameter> is inserted as the last child of <parameter>parent</parameter>.</entry></row><row><entry align="right"><parameter>node</parameter>&nbsp;:</entry><entry>the <link linkend="GNode">GNode</link> to insert.</entry></row><row><entry align="right"><emphasis>Returns</emphasis> :</entry><entry>the inserted <link linkend="GNode">GNode</link>.</entry></row></tbody></tgroup></informaltable></refsect2><refsect2><title><anchor id="g-node-insert-before">g_node_insert_before ()</title><programlisting><link linkend="GNode">GNode</link>*      g_node_insert_before            (<link linkend="GNode">GNode</link> *parent,                                             <link linkend="GNode">GNode</link> *sibling,                                             <link linkend="GNode">GNode</link> *node);</programlisting><para>Inserts a <link linkend="GNode">GNode</link> beneath the parent before the given sibling.</para><informaltable pgwide="1" frame="none" role="params"><tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*"><tbody><row><entry align="right"><parameter>parent</parameter>&nbsp;:</entry><entry>the <link linkend="GNode">GNode</link> to place <parameter>node</parameter> under.</entry></row><row><entry align="right"><parameter>sibling</parameter>&nbsp;:</entry><entry>the sibling <link linkend="GNode">GNode</link> to place <parameter>node</parameter> before. If sibling is <literal>NULL</literal>,the node is inserted as the last child of <parameter>parent</parameter>.</entry></row><row><entry align="right"><parameter>node</parameter>&nbsp;:</entry><entry>the <link linkend="GNode">GNode</link> to insert.</entry></row><row><entry align="right"><emphasis>Returns</emphasis> :</entry><entry>the inserted <link linkend="GNode">GNode</link>.</entry></row></tbody></tgroup></informaltable></refsect2><refsect2><title><anchor id="g-node-insert-after">g_node_insert_after ()</title><programlisting><link linkend="GNode">GNode</link>*      g_node_insert_after             (<link linkend="GNode">GNode</link> *parent,                                             <link linkend="GNode">GNode</link> *sibling,                                             <link linkend="GNode">GNode</link> *node);</programlisting><para>Inserts a <link linkend="GNode">GNode</link> beneath the parent after the given sibling.</para><informaltable pgwide="1" frame="none" role="params">

⌨️ 快捷键说明

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