You need to specify a minimum width for each of the nodes so that they are all the same size. If this is something you will be doing a lot, it's easiest to create a style for this, as I've done in the example below:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[fixed/.style={minimum width={1.25in}}]
% Tell it where the nodes are
\node[fixed] (A) {$short expression$};
\node[fixed] (B) [below=of A] {$long expression$};
\node[fixed] (C) [right=of A] {$short expression$};
\node[fixed] (D) [right=of B] {$long expression$};
% Tell it what arrows to draw
\draw[-stealth] (A)-- node[left] {} (B);
\draw[stealth-] (B)-- node [below] {} (D);
\draw[stealth-] (A)-- node [above] {} (C);
\draw[-stealth] (C)-- node [right] {} (D);,
\end{tikzpicture}
\end{document}
This solution has a certain advantage over using the every node/.style
since if you have other nodes in the drawing you may not want them all to be of the same size.
Another variation, unfortunately morbusg was faster than me :)
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes.multipart,calc}
\begin{document}
\begin{tikzpicture}[%
every node/.style={{font=\tt},-latex},%
list/.style={rectangle split, rectangle split parts=3, draw, rectangle split horizontal},%
]
\node[list, name=adin] at (0,0) {x};
\node[list, name=dwa] at (1,-1) {\nodepart{second} f};
\draw[bend left=10,-latex] (-1,1) to ($(adin.two north) + (-0.1,0.1)$);
\draw[bend right=20,-latex] (adin.two) to ++(-1,-1) node[below] {t};
\draw[bend right=20,-latex] (dwa.one) to ++(-1,-1) node[below] {e};
\draw[bend left=30,-latex] (adin.three) to ($(dwa.two north) + (0,0.1)$);
\draw[-latex,rounded corners,out=-45,in=45] (dwa.three) .. controls (3,-3) and (1.5,3) .. ($(adin.two north) + (0.1,0.1)$);
\end{tikzpicture}
\end{document}
Edit 1: With some improvements thanks to morbusg:
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes.multipart,calc,scopes}
\begin{document}
\begin{tikzpicture}[%
every node/.style={{font=\tt},-latex},%
list/.style={rectangle split, rectangle split parts=3, draw, rectangle split horizontal}]
\node[list, name=adin] at (0,0) {x};
\node[list, name=dwa] at (1,-1) {\nodepart{second} f};
{[-latex]
\draw[bend left=10] (-1,1) to ($(adin.two north) + (-0.1,0.1)$);
\draw[bend right=20] (adin.two) to ++(-1,-1) node[below] {t};
\draw[bend right=20] (dwa.one) to ++(-1,-1) node[below] {e};
\draw[bend left=30] (adin.three) to ($(dwa.two north) + (0,0.1)$);
\draw[out=-45,in=45,looseness=4] (dwa.three) to ($(adin.two north) + (0.1,0.1)$);
}
\end{tikzpicture}
\end{document}
Best Answer
Here is the simple reconstruction. Issues:
node
.\foreach
.Code:
Picture: