广东工业大学数据结构广义表
时间: 2024-12-31 17:41:33 浏览: 63
### 关于广东工业大学数据结构课程中的广义表
#### 广义表的概念及其操作
广义表是一种线性表的推广形式,其元素可以是原子也可以是子表。对于广义表的操作主要包括获取头部(head)、尾部(tail),计算长度以及深度等。
针对2017年广东工业大学计算机学院829数据结构考研题库中的一道题目提到,给定一个广义表 \( L \),\( tail(L) \) 表示去除第一个元素后的剩余部分[^1]。而关于广义表 \( L \) 的长度是指该列表含有的顶层元素数量,不考虑嵌套情况下的内部元素数目;至于深度,则指最深一层嵌套所达到的程度,在某些情况下可能需要通过递归来实现对其深度的测量。
#### 计算广义表深度的算法
下面展示了一个用于计算广义表深度的C语言函数 `GListDepth`:
```c
int GListDepth(GList ls) /* Return the depth of list */
{
int h1, h2;
if (ls == NULL)
return 1;
if (ls->tag == ATOM)
return 0;
h1 = GListDepth(ls->un.ptr.hp) + 1;
h2 = GListDepth(ls->un.ptr.tp);
return h1 > h2 ? h1 : h2;
}
```
此代码片段实现了对广义表深度的递归求解逻辑,当遇到空链表时返回深度为1,如果当前节点是一个原子则认为它没有额外层次即深度为0;而对于非空且非原子类型的结点来说,分别递归处理头指针指向的部分和尾指针指向的部分,并取两者较大者加一作为最终结果[^2]。
#### 判别两个广义表是否相等问题
另外还存在一个问题是如何判断两个广义表是否完全相同。这通常涉及到比较两者的结构及各位置上的具体数值或字符等内容。虽然具体的解决方案未在此处给出完整的源码,但是可以通过对比每个对应位上的标签(`ElemTag`)来逐步深入验证直至遍历整个表格完成匹配过程[^3]。
阅读全文
相关推荐




















