类似数据结构中的链表数组

类似数据结构中的链表数组

我想在 La TeX 中实现一个链表数组,就像它在数据结构中出现的那样(图):

数组元素为数字{1,2,3},数组中的每个数字都在链表的前面{数组中的第一个元素是链表的头a->b->null,其中a和b是链表中的节点,其他数组元素依此类推}

|1|->a->b->空

|2|->c->空

|3|->d->空

你能帮助我吗?

答案1

我尝试编写一个提供最简单界面的代码:

\begin{tikzpicture}
\foreach \index/\list in {1/{a,b,null}, 2/{c,null}, 3/{d,null}} {
   \node[array element] (aux) at (0,-\index) {\index};
   \LinkedList{\list}
}
\end{tikzpicture}

结果

这是完整的源代码:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\thispagestyle{empty}
\usetikzlibrary{positioning}
\tikzset{
node of list/.style = { 
             draw, 
             fill=orange!20, 
             minimum height=6mm, 
             minimum width=6mm,
             node distance=6mm
   },
link/.style = {
     -stealth,
     shorten >=1pt
     },
array element/.style = {
    draw, fill=white,
    minimum width = 6mm,
    minimum height = 10mm
  }
}

\def\LinkedList#1{%
  \foreach \element in \list {
     \node[node of list, right = of aux, name=ele] {\element};
     \draw[link] (aux) -- (ele);
     \coordinate (aux) at (ele.east);
}

\begin{tikzpicture}
\foreach \index/\list in {1/{a,b,null}, 2/{c,null}, 3/{d,null}} {
   \node[array element] (aux) at (0,-\index) {\index};
   \LinkedList{\list}
}
\end{tikzpicture}
\end{document}

但是,上面不是表示链表的标准方法。我更喜欢下面这个:

结果2

只需将上面的定义替换\LinkedList为以下定义即可:

\def\LinkedList#1{%
  \foreach \element in \list {
     \node[node of list, right = of aux, name=ele] {\element};
     \node[node of list, name=aux2, anchor=west] at ([xshift=-.4pt] ele.east) {};
     \draw[link] (aux) -- (ele);
     \coordinate (aux) at (aux2);
   }
   \fill (aux) circle(2pt);
}

并删除null列表规范中的元素,即主循环现在是:

\foreach \index/\list in {1/{a,b}, 2/{c}, 3/{d}} {

如果未来的读者需要这种行为,可以进行一点补充:

\foreach [count=\i] \index/\list in {1/{a,b}, 20/{c}, 50/{d}} {
    \node[array element] (aux) at (0,-\i) {\index};
    \LinkedList{\list}
}

输出仅呈现所需数组单元的链接列表,例如。

链接列表示例

相关内容