8. 广义表的建立与基本操作
来源:互联网 发布:2k帕森斯脸型数据 编辑:程序博客网 时间:2024/05/27 21:48
采用”头尾法”存储广义表,实现以下广义表的操作:
1.Status CreateGList( GList &L, char *S ) // 根据字符串 S 表示的广义表内容建立广义表数据结构;
2.GList GetHead( GList L) // 取表头运算
3.GList GetTail( GList L) // 取表尾运算
4.void DestroyGList( GList &L) // 销毁广义表 L
5.void PrintGList( GList L) // 显示广义表 L 内容
程序运行时,首先输入一个广义表,表中的原子是小写字母。随后可以交替输入取表头或取表尾指令(分别用 1 和 2 表示),取的结果替代当前广义表,并释放相应的资源(需将释放资源信息输出)。当广义表是空或是原子时,程序停止运行。
例:(下面的黑体为输入)
((a,()),c,d)
generic list: ((a,()),c,d)
1
destroy tail
free list node
generic list: (a,())
2
free head node
free list node
generic list: (())
1
destroy tail
free list node
generic list: ()
测试用例1:
输入:
(a,(b,(c,d)),e,f)
2
1
2
1
1
输出:
generic list: (a,(b,(c,d)),e,f)
free head node
free list node
generic list: ((b,(c,d)),e,f)
destroy tail
free list node
generic list: (b,(c,d))
free head node
free list node
generic list: ((c,d))
destroy tail
free list node
generic list: (c,d)
destroy tail
free list node
generic list: c
测试用例2:
输入:
(a,(b,(c,(d,())),e))
2
1
2
1
2
1
2
1
输出:
generic list: (a,(b,(c,(d,())),e))
free head node
free list node
generic list: ((b,(c,(d,())),e))
destroy tail
free list node
generic list: (b,(c,(d,())),e)
free head node
free list node
generic list: ((c,(d,())),e)
destroy tail
free list node
generic list: (c,(d,()))
free head node
free list node
generic list: ((d,()))
destroy tail
free list node
generic list: (d,())
free head node
free list node
generic list: (())
destroy tail
free list node
generic list: ()
测试用例3:
输入:
((a,s,(w,e)),q,c)
1
2
2
2
输出:
generic list: ((a,s,(w,e)),q,c)
destroy tail
free list node
generic list: (a,s,(w,e))
free head node
free list node
generic list: (s,(w,e))
free head node
free list node
generic list: ((w,e))
free head node
free list node
generic list: ()
解析:
1.因为要再次输出,所以先用数组储存。
2.取表头操作
建立两个指针P1、P2,分别指头和指尾
取表头即为P1移动到第一个”(“后,P2移动到当前最大括号的第一个”,”前,例原始(a(b,c),d(e,),f),取表头即为P1移动到(a(b,c),d(e,),f),P2移动到(a(b,c),d(e,),f)然后从P1到P2遍历输出即可
3.取表尾操作
建立两个指针P1、P2,分别指头和指尾
取表尾即为P1从第一个”(“移动到当前最大括号的最后一个”,”同时”,”变为”(“,如果P1等于P2,输出”()”,例原始(a,(b,c),e),取表尾即为P1移动到(a,(b,c),e)同时变符号即为(a,(b,c)(e),然后从P1到P2遍历输出即可
难点:判断”(“,”)”,”,”符号等级,可先令depth=-1凡是遇到”(“就depth++,遇到”)”就depth–即可。在遍历搜索时判断一下当前depth的等级即可,而我们要用的等级为depth==0,即当前最大括号的那个。
- 广义表的建立与基本操作
- 广义表的建立与基本操作
- 8. 广义表的建立与基本操作
- 9. 广义表的建立与基本操作
- 广义表的建立与一般操作
- 广义表的建立与一般操作C\C++
- 广义表的基本操作
- 广义表的基本操作
- 广义表的基本操作
- 广义表的建立与求深度
- 广义表的基本操作函数
- 广义表的基本操作实现
- 建立广义表的算法
- 数据结构 广义表的建立与求深度
- 数据结构_数组与广义表_广义表的建立、遍历、复制、求深度
- 双向链表的建立与基本操作
- 树的建立与基本操作
- 二叉树的建立与基本操作
- 小视频-iOS打包介质准备
- 打酱油 Java算法
- mysql 数据库导库命令
- 连接集群的配置:
- mysql服务安装
- 8. 广义表的建立与基本操作
- PullRefresh(上拉下拉)添加头布局Banner
- 利用ajax实现前台javascript同c#后台MVC下的aspx.cs文件传递数据的两种方法2
- 剑桥AI公司:7天精通一门新语言,未来将学会7000种语言
- PopupWindow
- 数据模型
- Win7下安装HBase
- The type java.io.ObjectInputStream cannot be resolved.
- 什么时装饰者模式,什么是适配器模式