数据结构广义表代码详解
时间: 2023-10-20 09:30:18 浏览: 60
广义表(Generalized List)是一种扩展了线性表的数据结构,它可以存储任意类型的数据,包括基本类型和其他广义表。在实现广义表的代码中,一般可以使用递归的方式来构建和操作广义表。
下面是一个简单的广义表的代码实现:
```python
class GList:
def __init__(self, val, tag):
self.val = val # 当 tag 为 0 时,val 存储元素值;当 tag 为 1 时,val 存储子表
self.tag = tag
def create_glist(s):
if not s: # 空字符串直接返回 None
return None
if s[0] == '(' and s[-1] == ')': # 处理子表的情况
s = s[1:-1] # 去除外层的括号
sublists = []
sublist = ""
cnt = 0 # 统计括号的数量
for i in range(len(s)):
if s[i] == '(':
cnt += 1
elif s[i] == ')':
cnt -= 1
sublist += s[i]
if cnt == 0 and s[i] == ',': # 子表结束
sublists.append(create_glist(sublist[:-1])) # 递归构建子表
sublist = ""
sublists.append(create_glist(sublist)) # 处理最后一个子表
return GList(sublists, 1)
else: # 处理元素值的情况
return GList(s, 0)
def print_glist(glist):
if glist is None:
return
if glist.tag == 0: # 元素值
print(glist.val, end=" ")
else: # 子表
print("(", end="")
for sublist in glist.val:
print_glist(sublist)
print(",", end="")
print("\b)", end="")
# 示例使用
s = "(1,2,(3,4),5)"
glist = create_glist(s)
print_glist(glist) # 输出:(1 2 (3 4) 5)
```
上述代码中,`GList` 类表示广义表的节点,其中 `val` 属性存储元素值或子表,`tag` 属性用于区分是元素值还是子表。`create_glist` 函数通过递归的方式构建广义表,将输入的字符串按照括号和逗号进行解析。`print_glist` 函数则按照广义表的语法规则输出广义表的内容。
以上是广义表的一个简单代码实现,实际应用中可能需要根据具体需求进行扩展和优化。希望能够对你的问题有所帮助!