Some time ago I found the question Draw an adjacency-list representation of a graph with tikz and wanted to solve it. I could but with some problems which still remain and How should I draw a singly/double linked list? remind me them.
My solution was:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,arrows}
\begin{document}
\begin{tikzpicture}[>=stealth]
\matrix (M) [matrix of nodes,%
column sep=0pt,%
row sep=1mm,%
nodes={draw, fill=gray!20,%
minimum width=.5cm, outer sep=0pt,%
minimum height=.7cm, anchor=center},
column 1/.style={minimum height=.8cm}]%
{
\mbox{} &[2mm] 2 & \mbox{} &[2mm] 5 & / &[2mm] & &[2mm] & \\
\mbox{} & 1 & \mbox{} & 5 & \mbox{} & 3 & \mbox{} & 4 & / \\
\mbox{} & 2 & \mbox{} & 5 & \mbox{} & 3 & / & & \\
};
\foreach \i in {1,2,3}{
\path (M-\i-1) [late options={label=left:\i}];
\draw[->] (M-\i-1)--(M-\i-2.west);
\draw[->] (M-\i-3.center)--(M-\i-4.west);
}
\draw[->] (M-2-5.center)--(M-2-6.west);
\draw[->] (M-2-7.center)--(M-2-8.west);
\draw[->] (M-3-5.center)--(M-3-6.west);
\begin{scope}[yshift=-3cm]
\matrix (M) [matrix of nodes,%
column sep=0pt,%
row sep=1mm,%
nodes={draw, fill=gray!20,%
minimum width=.5cm, outer sep=0pt,%
minimum height=.7cm, anchor=center},
column 1/.style={minimum height=.8cm}]%
{
|[label=left:1]| \mbox{} &[2mm] 2 &\mbox{}&[2mm] 5 & / &[2mm] & &[2mm] & \\
|[label=left:2]|\mbox{} & 1 & \mbox{} & 5 & \mbox{} & 3 & \mbox{} & 4 & / \\
|[label=left:3]| \mbox{} & 2 & \mbox{} & 5 & \mbox{} & 3 & / & & \\
};
\foreach \i in {1,2,3}{
% \path (M-\i-1) [late options={label=left:\i}];
\draw[->] (M-\i-1)--(M-\i-2.west);
\draw[->] (M-\i-3.center)--(M-\i-4.west);
}
\draw[*->] (M-2-5.center)--(M-2-6.west);
\draw[*->] (M-2-7.center)--(M-2-8.west);
\draw[*->] (M-3-5.center)--(M-3-6.west);
\end{scope}
\end{tikzpicture}
\end{document}
with this results

Now some questions:
1- I used \mbox{} to distinguish 'empty nodes' from 'empty cells'. Do you know a better solution?
2- Although column 1/.style is declared boxes from 1st column show same heigth than other ones. Why?
3- Using labels within nodes (bottom example) changes node (or cell?) center. This problem can be avoided with late options (upper example). Do you know a better option?
4- Looking at first and secon column from upper example it seems that node's name is not equivalent to node.center. Do you know why?
5- I don't know if it's a rendering problem but it looks like adjacent cells have a thicker separation line. What must be column separation to draw border lines one over the other?
6- Solution for How should I draw a singly/double linked list? show starting point of *-> arrows aligned with node center, but here its beahviour is like in Modifying * and o style tikz arrows so that they are centered at the end of line. Coul you explain me why?


nodes in empty cellskey. For 2, perhaps because the font is already larger than.8cm, so thatminimum heightdoes not matter? – ipavlic Jul 28 '11 at 14:44