第一范文网 - 专业文章范例文档资料分享平台

广东省汕头市金山中学高中信息技术信息学竞赛班数据结构专项培训教程06广义表 

来源:用户分享 时间:2025/12/6 2:52:00 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

广东省汕头市金山中学高中信息技术信息学竞赛班数据结构专项培训教程06广义表

广义表

§6.1 广义表的定义

广义表(Lists)又称列表,是线性表的推广,广义表是n (n≥0) 个元素(子表)a1 , a2 ,…, an 组成的有限序列,一般记作:

LS =( a1 , a2 ,…, an )

LS是广义表的名字,n为其表的长度其中ai或者是原子(单个元素)或者是一个广义表,分别称为广义表LS的单元素和子表。习惯上,用大写字母表示广义表的名称,用小写字母表示单元素。 广义表的定义是一个递归定义,因为在描述广义表时又用到了广义表的概念。 例如:

E=( ) E是一个空表,其长度为0。

L=(a, b) L是长度为2的列表,它的两个元素都是原子,因此它是一个线性表。

A=(x, L)=(x, (a, b)) A是长度为2的列表,第一个元素是原子x,第二个元素是子表L B=(A, y)=((x, (a , b)), y) B是长度为2的列表,第一个元素是子表A,第二个元素是原子y

C=(A, B)=((x, (a, b)) , ((x, (a, b)), y)) C的长度为2,两个元素都是子表。

D=(a, D)=(a, (a, (a, (...) ) ) ) D的长度为2,第一个元素是原子,第二元素是D自身。展开后,它是一个无限列表。

一个表的深度是指表展开所含括号的层数,例如,表A的深度为2,表D的深度为∞。值得注意的是广义表 ( ) 和 (( )) 不同,前者是空表,长度n=0;后者长度n=1,它有一个元素是空表,可分解得到表头和表尾均是空表( )。 广义表的特点:

(1)列表可以是递归的,如表D是它本身元素的子表。

(2)列表是多层次的结构,表中的元素可以是子表,子表的元素还可以是子表,…… (3)列表可以为其它列表所共享,如上例中,表A和表B是表C的子表。 §6.2 广义表的存储结构

由于广义表中的元素可以有不同的结构,单元素或子表,因此难以用顺序存储结构表示,通常采用链式存储结构。

结点的结构可以这样设计: tag data/hp link

其中,tag是标志域,若tag=0,则第二个域中为data,存储单元素;若tag=1,则第二个域中为hp,存储指向子表的指针。link为指向同一层下一个结点的指针。

【例6.2.1】 L =((a,(b)),a,((a,(c)),c),d)

1 0 d ^ 0 a 1

0 a 1 1 0 c ^ ^

0 b ^ 1 / 2 0 a 1 ^ 广东省汕头市金山中学高中信息技术信息学竞赛班数据结构专项培训教程06广义表

【例6.2.2】在一个广义表(不共享)中查找某元素。

输入:第一行:广义表,如:((a,(b)),a,((a,(c)),c),d) 第二行:要查找的元素,如:d 输出:广义表中有该元素,则输出:Yes 否则输出: No [参考程序] program gyb;

type pointer=^node; node=record

link:pointer; case tag:0..1 of 0:(data:char);

1:(hp:pointer);

end;

var i:integer; Q:string; c:char; t:boolean; head:pointer;

procedure creat(var p:pointer);

var x:char;

begin x:=Q[i]; i:=i+1; case x of

'(':begin

new(p); p^.tag:=1;

creat(p^.hp); creat(p^.link); end;

'a'..'z':begin

new(p); p^.tag:=0;

p^.data:=x; creat(p^.link); end;

',':creat(p); ')':p:=nil; end; end;

procedure find(p:pointer);

begin if p<>nil then

if p^.tag=0 then begin if p^.data=c

then begin

t:=true; exit;

end else find(p^.link); end

else begin

find(p^.hp); find(p^.link);

end; end;

Begin

readln(Q); readln(c);

i:=1; t:=false; creat(head);

find(head);

if t then write('Yes') else write('No');

End. 2 / 2

广东省汕头市金山中学高中信息技术信息学竞赛班数据结构专项培训教程06广义表 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c5e10j9e9535dq8n1sig30fluh9boav00uju_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top