对于一般的数据结构,包含逻辑结构和存储结构两部分。逻辑结构说明了数据间的逻辑关系,将逻辑结构存储到计算机的存储器中,则构成了存储结构。
对于初学者我们都只讨论只有一种逻辑结构的数据,即数据之间只有一种关系。
对于包含了多种关系的数据结构,可以首先对每个关系 的情况分别进行讨论,然后再整体讨论。
数据结构中的逻辑结构中包含了四种基本的结构,即 集合结构,线性结构,树形结构,图型结构。 可以由它们互相组合形成更复杂的结构。
这里我们假设B为一种数据结构,K代表集合中的元素,R代表集合中的关系,有:
集合结构:无逻辑结构,数据之间相互独立。集合框架就是用来处理一组互相之间没有逻辑关系的数据的。(错误,纠正在后面)
K= {01,02,03,04,05,06,07}
R= {}
线性结构:每个数据元素有且仅有一个直接前驱元素,有且仅有一个直接后继元素(除去两头的两个端点)。链表就是一个很好的线性结构的实例。
K= {01,02,03,04,05,06,07}
R = {<02,03>,<03,07>,<07,04>,<04,06>,<06,01>,<01,05>}
最后得出的关系图如下:
02→03→07→04→06→01→05 即像一条线的结构
树形结构:树形结构画出来的形状像一颗倒着的树,最上面有一个根结点,没有前驱,只有后继结点。最下面一层的只有前驱结点没有后继。其余的结点都只有一个前驱结点,但可以有一个或多个后继结点。
K= {01,02,03,04,05,06,07}
R= {<01,02>,<01,03>,<02,04>,<02,05>,<03,06>,<03,07>}
(图好难画哦,不画了)
图型结构:结点之间是多对多的联系,通常也把它叫做网状关系。每个结点可以有任意多个前驱结点和任意多个后继结点
K= {01,02,03,04,05,06,07}
R= {<01,02>,<02,01>,<02,04>,<04,02>,<03,04>,<04,03>,<05,06>,<06,05>,<07,02>,<02,07>}
可以看出,以02作为前驱结点的关系有3个,并且他的后继结点也可以作为它的前驱结点。即两个数据之间的关系可以是双向的。这跟前面三种结构不一样。
带有两个关系的数据结构:
K= {01,02,03,04,05,06}
R= {R1,R2}
R1 = {<03,02>,<03,05>,<02,01>,<05,04>,<05,06>}
R2 = {<01,02>,<02,03>,<03,04>,<04,05>,<05,06>}
仔细看的话就能发现,R1代表的是树形结构,R2代表线性结构。这时候通常把它作为多个数据结构来树立。
我们在java中看到的集合框架并不是集合结构,如集合也包括链表结构,set接口实例中的元素按特定规则形成了线性结构,但是集合结构中,所有数据都是散列的。