我想在 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}
但是,上面不是表示链表的标准方法。我更喜欢下面这个:
只需将上面的定义替换\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}
}
输出仅呈现所需数组单元的链接列表,例如。