5、广义表

更新时间:2024-06-28 22:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本课课题: 广义表

教学目的: 掌握广义表的定义,它的链接存储结构,以及求广义表长度、深度的方法和递归算法 教学重点: 广义表的操作及意义 教学难点: 广义表存储结构 教学过程: 一、广义表的定义

广义表是线性表的推广,其表中的元素可以是另一个广义表,或其自身。

对于一个非空的广义表来说,它的第一个元素称为该广义表的表头,除第一个元素外的所有元素构成的表称为该广义表的表尾。

一个表的尝试是指该表中括号嵌套的最大次数。 广义表的定义: ADT GList{

数据对象:D={i=1,2,...,n>=0;ei(-AtomSet或ei(-GList, AtomSet为某个数据对象}

数据关系:R1={|ei-1,ei(-D,2=

操作结果:创建空的广义表L CreateGList(&L,S);

初始条件:S是广义表的书写形式串 操作结果:由S创建广义表L DestroyGlist(&L); 初始条件:广义表L存在 操作结果:销毁广义表L CopyGlist(&T,L); 初始条件:广义表L存在

操作结果:由广义表L复制得到广义表T GListLength(L); 初始条件:广义表L存在

操作结果:求广义表L的长度,即元素个数 GListDepth(L);

《数据结构》教案21

初始条件:广义表L存在 操作结果:求广义表L的深度 GlistEmpty(L); 初始条件:广义表L存在

操作结果:判断广义表L是否为空 GetHead(L);

初始条件:广义表L存在 操作结果:取广义表L的头 GetTail(L);

初始条件:广义表L存在 操作结果:取广义表L的尾 InsertFirst_GL(&L,e); 初始条件:广义表L存在

操作结果:插入元素e作为广义表L的第一元素 DeleteFirst_GL(&L,&e); 初始条件:广义表L存在

操作结果:删除广义表L的第一元素,并用e返回其值 Traverse_GL(L,Visit()); 初始条件:广义表L存在

操作结果:遍历广义表L,用函数Visit处理每个元素 }ADT GList

广义表一般记作:LS=(a1,a2,...,an)

其中LS是广义表的名称,n是它的长度,ai可以是单个元素也可是广义表,分别称为原子和子表,当广义表非空时,称第一个元素a1为LS的表头称其余元素组成的广义表为表尾. 二、广义表的图形表示

——用圆圈和方框分别表示表(表元素)和单元素,并用线段把表和它的元素(元素结点应在其表结点的下方)连接起来,则可得到一个广义表的图形表示。 [例]画出下列广义表的图形表示 A=() B=(e)

C=(a,(b,c,d))

《数据结构》教案22

D=(A,B,C)=((),(e),(a,(b,c,d))) E=((a,(a,b),((a,b),c))) 解:

《数据结构》教案23

e a b c d e a b c d a a b c a b

一个表的深度是指该表中括号嵌套的最在次数。所以A和B的深度为1,C、D、E的深度分别为2,3,4。 三、广义表的存储结构——广义表是一种递归的数据结构,因此很难为广义表分配固定大小的存储空间,所以其存储结构只好采用动态链接结构。 广义表的头尾链表存储表示

typedef emnu{ATOM,LIST} ElemTag; typedef struct GLNode{ ElemTag tag; union{

AtomType atom;

struct{struct GLNode *hp,*tp;}ptr; } }

四、广义表的运算

——包括求广义表的长度和深度,向广义表插入元素和从广义表中查找或删除元素,建立广义表的存储结构,打印广义表等。 总结:

1、广义表是线性表的嵌套结构,即每个元素仍可是一个表。广义表所含元素的个数称为广义表的长度,嵌套的最大层数称为广义表的深度。

2、广义表的存储结构采用动态链接结构,单元素结点和表元素结点,虽然具有相同的结点类型,但具有不同的结点结构,一个含有存储元素值的数据域data,另一个含有存储表元素起始位置的指针域sublist。

《数据结构》教案24

本文来源:https://www.bwwdw.com/article/i8g3.html

Top