广义表中长度与深度的计算

切记:广义表属于非线性结构
.
以下是京东笔试题原题

广义表的长度

  • 广义表的长度就是广义表中第一层的元素个数

例如:(a,(b,c,d))的长度:因为包含一个原子a与一个字表(b,c,d),所以长度 = 2。
.
例如:((a,(a,b),((a,b),c)))的长度:因为只包含一个字表(a,(a,b),((a,b),c)),所以长度 = 1。
.

广义表的深度

  • 广义表的深度就是广义表中最大的嵌套次数

例如:((a,(a,b),((a,b),c)))的深度:
第一层:(a,(a,b),((a,b),c))
第二层:a,(a,b),((a,b),c)
第三层:(a,b),c
第四层:a,b。
所以深度 = 4。

  • 10
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言可以通过链表的方式来实现存储广义表广义表是由原子元素和子表构成的一种数据结构,可以是空表、原子元素或由若干个广义表组成的线性链表。 首先,我们可以定义一个结构体来表示广义表的节点: ```c typedef struct Node { char data; // 数据元素 struct Node* next; // 指向下一个节点的指针 struct Node* sublist; // 指向子表的指针 } Node; ``` 然后,我们可以定义一些操作来处理广义表,例如创建节点、插入节点、计算长度深度等: ```c // 创建节点 Node* createNode(char data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; newNode->sublist = NULL; return newNode; } // 插入节点到广义表的尾部 void insertNode(Node** head, char data) { if (*head == NULL) { *head = createNode(data); } else { Node* current = *head; while (current->next != NULL) { current = current->next; } current->next = createNode(data); } } // 计算广义表长度 int calculateLength(Node* head) { int length = 0; Node* current = head; while (current != NULL) { length++; current = current->next; } return length; } // 计算广义表深度 int calculateDepth(Node* head) { if (head == NULL) { return 0; } int maxDepth = 0; Node* current = head; while (current != NULL) { if (current->sublist != NULL) { int depth = calculateDepth(current->sublist); if (depth > maxDepth) { maxDepth = depth; } } current = current->next; } return maxDepth + 1; } ``` 使用上述定义的数据结构和操作,我们就可以实现存储广义表,并计算广义表长度深度了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值