三分鐘上手數據結構做圖工具graphviz

graphviz數據結構做圖工具應用比較普遍了,不少數據結構均可以使用gv畫出來,好比常見的c語言的結構體、指針、鏈表等。也能夠用來畫流程圖等常規圖示,好用。html

安裝graphviz

mac os系統能夠經過brew進行安裝node

brew install graphviz
複製代碼

而後就能夠使用dot命令行工具了,這個工具就是用來生成圖片的 git

dot語言

graphviz從dot語言生成圖形,這個dot語言的語法十分簡單,沒有複雜的分支判斷語句,官方文檔參考:graphviz.gitlab.io/_pages/doc/…github

聲明一個圖形

好比4.gv, 包含一個"hello"的圖形shell

digraph {
    hello
}
複製代碼

而後執行dot 4.gv -Tpng -o 4.png && open 4.png生成圖片,效果以下bash

能夠看到gv默認使用橢圓解釋要畫的圖數據結構

調整圖形形狀

gv支持不少的圖形形狀,完整列表能夠參考https://www.graphviz.org/doc/info/shapes.html 按類別能夠分紅兩類,1是正方形、圓形等幾何形狀,另外一類是表格(Record Node) 編輯器

表格(Record Node)
好比把上面"hello"這個橢圓形改爲正方形,使用語法 shape=box便可

digraph {
    hello [shape=box]
}
複製代碼

效果以下 工具

表格gitlab

digraph {
    hello [shape=record label="first|second|last"]
}
複製代碼

效果以下

節點關係

digraph {
    node1 [shape=box]
    node2 [shape=box]
}
複製代碼

下面來表示node1和node2的關係

單向 node1 -> node2

雙向 node1 -> node2 node2 -> node1

無明確方向 node1 -- node2

graph {
    node1 [shape=box]
    node2 [shape=box]

    node1 -- node2
}
複製代碼

注意使用無明確方向的鏈接線必須把圖像指定成無向圖:graph,通常有方向的使用有向圖:digraph

案例-雙向鏈表

digraph G {
    rankdir="RL"
    value1 [
        shape="circle"
        label="value1"
    ]
    value2 [
        shape="circle"
        label="value2"
    ]
    item1 [
        shape="record"
        label="item1| <f0> *next : struct item\l| <f1> *prev : struct item\l| <f2> *data : void* \l"
    ]
    item2 [
        shape="record"
        label="item2| <f0> *next : struct item\l| <f1> *prev : struct item\l| <f2> *data : void* \l"
    ]
    item1:f1 -> null
    item1:f0 -> item2
    item1:f2 -> value1
    item2:f1 -> item1
    item2:f0 -> null
    item2:f2 -> value2
}
複製代碼

編輯器支持

typora, macdown等文本編輯器已經直接支持graphviz圖片的所見即所得的編輯了

typora

macdown

能夠關注個人公衆號,第一時間獲取最新更新!

qrcode_for_gh_c479940ae9c8_258

一些注意的點

dot語言中的註釋和c語言相同 // 表示單行註釋, /* */表示多行註釋

pdot() {
    dot $1.gv -Tpng -o $1.png && open $1.png
}
複製代碼

參考資料

  1. www.tonyballantyne.com/graphs.html
  2. github.com/vgrigoriu/g…
  3. www.worthe-it.co.za/programming…
  4. graphviz.gitlab.io/_pages/doc/…
  5. www.graphviz.org/doc/info/at…
  6. zh.wikipedia.org/wiki/DOT語言
相關文章
相關標籤/搜索