广义表的表头和表尾的求解

举例子:
已知L=(a,b,c,((d)),求表中的d。
L1=Tail(L); //L1=(b,c,(d));
L2=Tail(L1);//L2=(c,(d));
L3=Tail(L2);//L3=((d));
L4=Head(L3);//L4=(d)
L5=Head(L4);//L5=d;

Head(Head(Tail(Tail((Tail(a,b,c,((d)))))))

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建广义表表头表尾需要涉及到链表的概念。表头广义表的第一个节点,包含指向表尾的指针和指向第一个元素的指针。表尾是指最后一个元素的节点,包含指向下一个元素的指针和指向表头的指针。以下是具体的创建方法: 1. 创建表头节点,包含指向表尾和第一个元素的指针,其中表尾指针为空,第一个元素指针指向NULL。 2. 以链表的方式逐个创建广义表的元素节点,将每个元素节点的指针指向下一个元素节点,直到创建完最后一个元素节点。 3. 创建表尾节点,包含指向表头和下一个元素的指针,其中下一个元素指针指向第一个元素节点。 4. 将表头节点的表尾指针指向表尾节点,完成广义表的创建。 代码示例: ```c typedef struct node{ int tag; // 节点类型,0表示元素节点,1表示子表节点 union{ int data; // 元素节点的值 struct node *sublist; // 子表节点的指针 } value; struct node *next; // 指向下一个节点 } GLNode, *GList; // 创建表头节点和表尾节点 GList createGList() { GList head = (GList)malloc(sizeof(GLNode)); GList tail = (GList)malloc(sizeof(GLNode)); head->tag = tail->tag = 1; head->value.sublist = tail->value.sublist = NULL; head->next = tail; tail->next = head; return head; } // 创建元素节点 GList createGLNode(int data) { GList node = (GList)malloc(sizeof(GLNode)); node->tag = 0; node->value.data = data; node->next = NULL; return node; } // 将元素节点加入广义表表尾 void insertGLNode(GList tail, int data) { GList node = createGLNode(data); node->next = tail; GList p = tail->next; while (p->next != tail) { p = p->next; } p->next = node; } // 创建子表节点并逐个加入元素节点 GList createSublist(int *data, int len) { GList sublist = createGList(); for (int i = 0; i < len; i++) { insertGLNode(sublist, data[i]); } return sublist; } // 将子表节点加入广义表表尾 void insertSublist(GList tail, int *data, int len) { GList sublist = createSublist(data, len); sublist->next = tail; GList p = tail->next; while (p->next != tail) { p = p->next; } p->next = sublist; } ``` 以上示例代码实现了广义表的创建,可以通过调用`createGList()`、`insertGLNode()`和`insertSublist()`函数来实现。其中,`createGLNode()`用于创建元素节点,`createSublist()`用于创建子表节点并逐个加入元素节点。`insertGLNode()`和`insertSublist()`用于将节点加入广义表表尾

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值