如何绘制带有对角箭头的垂直数组来表示 TikZ 中的内存?

如何绘制带有对角箭头的垂直数组来表示 TikZ 中的内存?

我正在尝试找到一种方法来使用 TikZ 创建尽可能多的讲义集合(1)(2)这是我国一所公立免费大学的数据结构入门课程。

到目前为止我已经成功找到树木数组很快但是我无法找到一个起点来表示内存和其中的元素(想要),用一些箭头指出概念(可选),用对角箭头和代码对齐(想要)。

我发现在其他问题中 TeX 社区对这样的请求很接受,我希望这个问题不会成为问题。

下面的图片来自一本书,名为通过 C 轻轻构建结构谁有我想用 TikZ 实现的可视化。

在此处输入图片描述

在此处输入图片描述

答案1

这是一个结合了您想要的大部分功能的示例:

\documentclass{article}
%% Packages and libraries needed for this MWE
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows.meta}
%% Two commands for representing content.
\newcommand\aeDiagonalNumber{100}
\newcommand\memorySixtyFive{%%' 
  \begin{minipage}{2.75cm}
    \centering
    char `a' in memory\par       
    (65 = ascii code)
  \end{minipage}}

\begin{document}

\begin{tikzpicture}[x=1.25in,y=0.65cm]
  %% Building the boxes representing memory locations
  \foreach \x in {0,1,...,20}
  {
    \node[inner sep=1pt] (BL\x) at (0,-\x)   {};
    \node[inner sep=1pt] (UR\x) at (1,-\x+1) {};
    \node (MM\x) at ($(BL\x)!0.5!(UR\x)$) {};
    \draw (BL\x) rectangle (UR\x);
    \edef\memoryNumber{\number\numexpr276314+\x\relax}
    \node[anchor=south east] at (BL\x.north west) {\memoryNumber};
  }

  %% Label columns:
  \node (MEMLOC) at ($(MM0)+(0,2cm)$) { \parbox{2cm}{\centering Memory Location} };
  \node (ADDRESS) at ($(MEMLOC)-(0.75,0)$) {\parbox{2cm}{\centering Address} };
  \draw [-{Stealth[scale=1.5]}] (MEMLOC) -- (MM0|-UR0);
  \draw [-{Stealth[scale=1.5]}] (ADDRESS) -- ($(MM0|-UR0)-(0.75,0)$);

  %% Drawing arrows spanning memory locations
  \foreach \x/\y in {3/0,
                     7/4,
                    11/8}
  {
    \node (M\x-\y) at ($(BL\x)!0.5!(UR\y)$) {\aeDiagonalNumber};
    \xdef\aeDiagonalNumber{\number\numexpr\aeDiagonalNumber+100\relax}
    \draw[-{Stealth[scale=1.5]}]  (M\x-\y) -- (BL\x) ; 
    \draw[-{Stealth[scale=1.5]}]  (M\x-\y) -- (UR\y) ;
  }

  %% Adding content to memory location "18"
  \node at (MM18) {65};
  \node (RHS18) at (MM18-|UR18) {};
  %% Adding a side note to memory location "18"
  \node[draw,anchor=west] (BOX18) at ($(RHS18)+(1cm,0)$) {\memorySixtyFive};
  \draw [-{Stealth[scale=1.5]}] (RHS18.center) -- (BOX18);


  %%
  \node (1byte) at ($(UR10)+(0.5,0)$) { \parbox{1.5cm}{\centering One location = 1 byte}};
  \draw [-{Stealth[scale=1.5]}] (1byte) -- ($(1byte|-UR5)-(0,0.5)$) -- ($(UR5)-(0,0.5)$);

\end{tikzpicture}

\end{document}

在此处输入图片描述

希望这能够充分说明您可以使用哪些技巧按照自己想要的方式设计演示文稿。

相关内容