使用 tikz 包在 overleaf 引擎上绘制哈希表查找方案

使用 tikz 包在 overleaf 引擎上绘制哈希表查找方案

据我所知,这是一个 Tiz 表格。您能给我介绍一下如何制作这些精美的阴影以及表格单元格之间的点吗?此外,任何类似表格的示例对我来说都是一份珍贵的礼物。

表查找方案

因此问题是:

  1. 如何使表格标题像右表那样?
  2. 如何将搜索模式放置在表格的左边?
  3. 如何在底部绘制阴影以进行比较操作?
  4. ldots单元格之间大的命令是什么?

答案1

  1. 由于您不希望表格标题有阴影,因此我制作了两个单独的表格。一个用于标题,一个用于表格本身。
  2. 与其他表相同
  3. 使用 tikzlibraryshadows并添加drop shadow到节点的选项列表中。
  4. 对于\ldots我使用了\scalebox

箭头使用 tikzlibrary 定位calc

代码:

\documentclass[tikz,border=2mm]{standalone}
\usepackage{array}
\usetikzlibrary{shadows,calc}

\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\begin{document}
    \begin{tikzpicture}[>=latex,every node/.style={anchor=south west,,inner sep=0,fill=white}]
        \node[drop shadow,circle,fill=gray!20,draw] at (5.4,0) (comparison) {=?};
        \node[drop shadow] at (5,2) {
            \begin{tabular}{|C{1cm}|C{2cm}|C{3cm}|}
                \hline
                & & \\ \hline
            \end{tabular}
        };
        \node at (5,2.7) {
            \begin{tabular}{C{6.7cm}}
                \scalebox{5}{...}
            \end{tabular}
        };
        \node[drop shadow] at (5,3.5) (table) {
            \begin{tabular}{|C{1cm}|C{2cm}|C{3cm}|}
                \hline
                & & \\ \hline
                & & \\ \hline
                & & \\ \hline
                & & \\ \hline
                & & \\ \hline
                & & \\ \hline
                & & \\ \hline
            \end{tabular}
        };
        \node at (5,6.6) {
            \begin{tabular}{C{1cm}C{2cm}C{3cm}}
                valid & tag & address
            \end{tabular}
        };
        \node[drop shadow] at (0,7) (search) {
            \begin{tabular}{|C{2cm}|C{1cm}|} 
                \hline 
                tag & index \\
                \hline
            \end{tabular}
        };
        \draw[->] ($(search.south west)!.3!(search.south east)$) |- (comparison.west);
        \draw[->] ($(search.south west)!.8!(search.south east)$) |- (table.west);
        \draw[->] ($(comparison.north)+(0,4.6)$) -- (comparison.north);
        \draw[->] ($(comparison.north)+(2,4.6)$) |- (comparison.east);
        \draw[->] ($(comparison.north)+(5,4.6)$) -- ($(comparison.north)+(5,-2)$);
        \draw[->] ($(comparison.south)$) -- ($(comparison.north)+(0,-2)$);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容