空间数据结构复习(二)

2.广义表的存储结构:

原子:可以是任何在结构上不可分割的元素。

广义表: 简称列表(Lists),是零个或多个有序序列,广义表的元素或者为原子或者为广义表,广义表记为 LS=(x0,x1,x2,···,xn-1) ,其中,xi称为表元素

作为广义表中元素的广义表被称为子表,为了区分原子子表,有如下书写上的约定:用大写字母表示表或子表,用小写字母表示原子

一个广义表中所包含的元素(包括原子和子表)个数称为该广义表的长度。长度为0的表是空表。

综上所述,广义表有下列重要的性质:

(1)广义表的元素可以是原子,也可以是子表,而子表的元素还可以是子表······因此广义表是一种多层次的数据结构。当用圆括号表示广义表的时候,一个表的深度是指表中所包含的括号层数。例如一个空表E=(),其深度就是1A=(x,L)=(x,(a,b))的深度就为2

(2)广义表可以是递归的表,广义表的定义并没有限制元素的递归,即广义表也可以是自身的子表,例如D=(z, D)这种形式。

(3)广义表可以为其它表所共享,这一点非常的好理解,就是一个表可以是另一个表的子表。

(4)广义表可以看成是线性表的推广,而线性表是广义表的特例。即深度为1的广义表。

(5)如果规定任何表都是有名的表,则为了既标明每个表的名字,又说明它的组成,可以将表的名字写在本表对应的括号前,即可以省略等号,如下:L=(a, b)可以写成L(a,b)

编者补充:

由于我们是考前抱佛脚,所以解释一下什么是线性表

线性表是n(n >= 0)个元素 a0,a1,···,an-1 的有限序列,记为:(a0,a1,···,an-1)。其中,n 是线性表中元素的个数,即线性表的长度。当n = 0时,为空表。

设 ai 是表中第 i 个元素, i = 0,1,2,3···,n - 1,我们常称 ai 是 ai+1直接前驱元素 ,ai+1 是 ai直接后驱元素

一般地,线性表中的元素具有相同的类型,它们可以是简单类型,如整数,也可以是结构类型。

线性表是一种动态数据结构,它的表长可以变化。在线性表上可以执行元素访问和修改运算,也可以在表中任何位置执行和删除元素的运算。

与堆栈和队列相同,线性表有两种典型的存储表达方式:顺序表示和链接表示。

(1)用一维数组存储线性表称为线性表的顺序表示,顺序表示的线性表称为顺序表。

线性表的顺序实现可以用下面C语言结构定义:

 typeof struct list{
    int Size,MaxList;
    T Elements[MaxSize];
 } List;

在上面定义的结构类型List中,Size是线性表的长度,MaxList为表的最大允许长度。一维数组Elements用以存放线性表中的元素,实现线性表的顺序存储。

(2)线性表的链接表示:单链表、双向链表存储线性表称为线性表的链接存储表示。

线性表的链接实现可以用下面C语言结构定义:

    typeof struct node {
        T Elements;
        struct node* Link;
    } Node;
    typeof struct List {
        Node *First;
        int Size;
    } List;

上面定义的结构类型List中,First为指向单链表头结点的指针。特别注意在链接表示下,可以不设线性表的长度限制,只要用于动态存储分配的堆得空间未用完,总可以创建单链表的新结点。

下面要注意一个辅助函数的使用,我们需要知道指向单链表中位置为pos的结点的指针,那么这个函数作用就是返回这个指针:

    Node *set_pos(List lst, int pos) {
        int i;
        Node q = lst.First; /*使指针q指向起始结点*/
        for(i=0;i<pos;i++) q = q -> Link; /*令指针q向后移动pos次,指向位置为pos的结点*/
        return q;
    }

此处编者认为在定义这个函数时不一定要用上述所用到的Node *,其实我们在平时时使用int *来定义这个函数时也不会报错,但是,这里是为了规范,因为这里返回的结果qNode型指针。

接着回到广义表,广义表的第一个元素称为头部,其余元素组成的表是广义表的尾部

广义表的存储表示:由于广义表的数据元素可以是原子,也可以是广义表。因此它难以用顺序存储结构表示,通常采用链接存储结构表示。一种做法是将结点分成两类:原子结点和子表结点,每类结点都有三个域,其中有一个标志域Tag,它等于0时表示该结点是原子结点,Tag = 1表示该结点是子表结点,原子结点包括Tag、Atom、Tp域。子表结点包括Tag、Hp、Tp域Tp域是原子结点和子表结点共有的,它是指向广义表的尾部指针。原子结点的域Atom中存放原子的值,子表结点的域Hp指示子表的头部。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容