首页 【word】 广义表的头尾链表表示及算法的实现

【word】 广义表的头尾链表表示及算法的实现

举报
开通vip

【word】 广义表的头尾链表表示及算法的实现【word】 广义表的头尾链表表示及算法的实现 广义表的头尾链表表示及算法的实现 2009年第6期 中图分类号:TP311.12文献标识码:A文章编 号:1009—2552(2009)06—0157—02 广义表的头尾链表表示及算法的实现 钟治初 (嘉应学院计算机系,梅州514015) 摘要:讨论了广义表的头尾链表存储表示及相关算法的实现,包括广 义表的建立,输出,销 毁,复制,求表头,求表尾,计算深度等算法的实现. 关键词:广义表;数据结构;算法 Thegeneralizedlistusing...

【word】 广义表的头尾链表表示及算法的实现
【word】 广义表的头尾链表表示及算法的实现 广义表的头尾链表表示及算法的实现 2009年第6期 中图分类号:TP311.12文献标识码:A文章编 号:1009—2552(2009)06—0157—02 广义表的头尾链表表示及算法的实现 钟治初 (嘉应学院计算机系,梅州514015) 摘要:讨论了广义表的头尾链表存储表示及相关算法的实现,包括广 义表的建立,输出,销 毁,复制,求表头,求表尾,计算深度等算法的实现. 关键词:广义表;数据结构;算法 Thegeneralizedlistusingheadandtaillinkand realizationofsomealgorithms ZHONG1j—chu (DepartmentofCoin~ter,JiayingUniversity,Meizhou514015,Olina) Abstract:Inthispaperthegeneralizedlistusingheadandtaillinkisdiscussed,a ndsomealgorithms, includingcreation,output,deletion,copy,gettinghead,gettingtail,calculatin gdepthofgeneralizedlist,alealso discussed. Keywords:generallist;datastructure;algorithm 0引言 广义表也称为列表,其形式为IS=(a,a2,…, an),其中每一凰可能是原子,也可能是广义表.这 一 点决定了广义表只能使用链表来存储表示.根据 不同的理解和需要,可以使用不同形式的链表来存 储表示.本文就将广义表按头尾链表来存储表示, 用C/C++语言来实现,并在此表示下来讨论广义表 的一些算法的实现,包括广义表的建立,输出,销毁, 复制,求表头,求表尾,计算深度等算法. 1存储表示及算法的实现 由于非空广义表LS=(a,a2,…,a|1),由表头 Head(IS)=a和表尾Tail(LS)=(a2,…,al1)完全决 定,因此,广义表的结点应该存储表头和表尾.为了 区分表结点和原子结点,增加一个标志tag,用0表 示原子结点,用1表示表结点.为了使二种结点有 比较统一的结构,规定原子结点的表尾指针域为空. 广义表的头尾链表存储表示如下: typedefcharElemType;//假定原子的数据类型 为字符; typedefstmctGLNode {inttag;//0表示原子结点,1表示子表结点; union{ElemTypedata; GLNode*hp; }val;//值或指向表头;若为原子,则存放值;若 为子表,则存放表头指针; GI_Node*tp;//指向表尾;若为原子,则tp为空. }GLNode,*GList; 1.1广义表的建立算法 假定建立广义表时,以广义表的书写形式为输 人,并且假定英文小写字母表示原子.则建立广义 表的算法如下: voidCreateGList(GList&L) {charch; cin>>ch: if(ch==)){L=0;retum;} elseif(ch>=at&&ch<=Z) {L=newGLNode;L—Iag=O;L—va1.data=ch; tp=0;} elseif(ch==() {L=newGLNode;L—tag=1;CreateGList(L— va1.hp); iva1.hp==0){tp=O;return;} GLNodeP; P=L;cin>>ch; 收稿日期:2oo9—01一l2 作者简介:钟治初(1964一),男,副教授,研究方向为算法分析与设计. ?__—— 157?--—— while(ch==,){ptp=newGLNode;P=p ;I)_tag=1;CreateGList(p-’~va1.hp);cin>>ch;} p—cp=0; }} 以上的算法采用递归算法,因为广义表本身是 递归定义的,因此,写成递归算法容易理解. 1.2广义表的输出算法 按照上述算法建立的广义表的存储表示,将广 义表按书写形式输出,算法如下: voidDisplayGList(GListL) {if(L==O)return; elseif(tag==O)cout<<va1.data; else{cout<<”(“;DisplayGList(L--~va1.hp); GLNodep;P=I『,p; while(p){cout<<”,”;DisplayGList(pva1.hp); P=I)_+tI);} cout<<”)”; }} 1.3广义表的销毁算法 由于广义表是用链表表示的,每一个结点都是 动态生成的,因此,广义表使用完毕后,应该将广义 表结构销毁.销毁算法如下: voidDestroyGList(GList&L) {if(L==0)return; elseif(t==0){deleteL;L=O;} elseif(tag==1&&卜Va1.hp==0&& tp==0){deleteL;L=0;} else{DestroyGList(L--~va1.hp);DestroyGList(L--~ tp);deleteL;L=0;} } 1.4广义表的复制算法 将广义表结构进行复制,得到一个相同结构的 广义表.注意到原来的广义表的特殊情况,包括空 表和原子等情形.当然,原子在严格意义下不是广 义表,但经过某些运算后可能会出现单个原子的情 形,例如求表头运算. GUstGListCopy(GListL) {GListT; iL==0)return0; else{T=newGLNode;卜tag=tag; tag==0){T—va1.data=L—va1.data; iL— 1L+tp=0;} else}T—va1.hp=GListCopy(L—va1.hp);T— tp=GListCopy(tp);} retumT: }}. 1.5求广义表的表头运算的算法 广义表的表头可能是空的,可能是原子,也可能 一 158一 是广义表. GListHead(GListL) fGUstH; if(L==0){cout,空表无表头!\n”;returnO;} .elseif(tag==0){cout<<”原子无表头!\ nt;l~tllnl0;} else{H=GListCopy(L—va1.hp);if(H==0) eout<<”空表无表头!\ntt;returnH;} } 1.6求广义表的表尾运算的算法 求广义表的表尾运算时,同样要注意到广义表 的特殊情况. GListTail(GUstL) {GUstT; if(L==0){cout<<”空表无表尾!\n”;return 0;} elseif(L—tag==0){cout<<”原子无表尾!\ n;retunl0;} else{T=GListCopy(L--”tp); if(T=:0){T=newGLNode;T—tag=1; tp=O;T-’va1.hp:0;} returnT;} } 1.7求广义表的深度运算算法 广义表的深度定义为广义表中括号的层数.算 法如下: intDepthGList(GListL) {if(L==0)returnO; elseif(tag=0)return0; elseif(+,.hp=:0)return1; else{intml,m2;ml=1+DepthGList(Lva1. hp);m2=DepthGList(L-~tp); if(ml>=m2)returnml;elseretumm2; }} 2结束语 广义表是一种比较复杂的数据结构,相当于二 叉树结构,目前大多数数据结构与算法的教材都没 有详细讨论其存储结构及相应的算法.根据教学实 践将广义表的相关算法 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf ,并对上面的算法进行 了完整的测试. 参考文献: [1]严蔚敏,吴伟民.数据结构:C语言版[M].北京:清华大学出版 社,2OO2. [2]李春保.数据结构 教程 人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程 [M].北京:清华大学出版社,2OO5. [3]张乃孝.算法与数据结构——c语言描述[M].2版.北京:高等 教育出版社.9.OO6. [4】徐孝凯.数据结构实用教程[M].2版.北京:清华大学出版社, 2OO6. 责任编辑:李光辉
本文档为【【word】 广义表的头尾链表表示及算法的实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_574951
暂无简介~
格式:doc
大小:22KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-11-26
浏览量:22