1.

请写出下列广义表的深度和长度。

(1)A=()(2)B=(a)(3)C=(a,b,C)(4)D=(a,(A),(a,(b,(c,C))),d)(5)E=(a,(b,c),(d,(e),(f,(g))))(1)A = ()\\ (2)B = ( a )\\ (3)C = ( a, b, C)\\ (4)D = ( a, (A), (a, (b, (c, C))), d )\\ (5)E = ( a, ( b, c ), ( d, ( e ), ( f, ( g ))))(1)A=()(2)B=(a)(3)C=(a,b,C)(4)D=(a,(A),(a,(b,(c,C))),d)(5)E=(a,(b,c),(d,(e),(f,(g))))

广义表的长度就是广义表中第一层的元素个数。原子数据和子表都算作一个元素。

广义表的深度就是广义表中最大的嵌套次数,是广义表中所含括号的重数。是所有子表的最大深度加1

(1)长度为0,深度为1.
(2)长度为1,深度为1.
(3)长度为3,深度为1.
(4)长度为4,深度为4.
(5)长度为3,深度为4.

2.

试画出上述广义表的存储结构示意图。

3.

编写一个算法,计算如下形式广义表的长度:
A=(a,(b,c),d,((e,f,(g,h)),i))A = ( a, ( b, c), d, ((e, f, ( g, h)), i ) )A=(a,(b,c),d,((e,f,(g,h)),i))

【注意】为简化操作,输入只包括字母、数字和“(”、“)”、“ ,”和空格,且任意多的空格不影响广义表的长度。

#include <stdio.h>
#include <stdlib.h>struct Lists
{ int Flag;
union {char Data;struct Lists *List;} Info; struct Lists *Link;
};void Setuplists(struct Lists **H, char *s)
{   struct Lists *p, *x;        struct Lists *(S1[10]);   //指针栈int top1 = 0, i=0;     char c;(*H) = (struct Lists *)malloc(sizeof(struct Lists));(*H)->Flag = 1;  (*H)->Info.List = 0;  (*H)->Link = 0;p=(*H);while (s[i]!='\0'){ c = s[i++]; switch (c) { case '(' : x = (struct Lists *)malloc(sizeof(struct Lists));x->Flag = 0;  x->Info.List = 0;  x->Link = 0;p->Flag = 1; p->Info.List = x;S1[++top1] = p;  p=x;  break; case ',':    x = (struct Lists *)malloc(sizeof(struct Lists));x->Flag = 0;  x->Info.List = 0;  x->Link = 0;p->Link = x;  p = x;  break;case ' ':  break;case ')':  p->Link = 0;  p=S1[top1--]; break;default : p->Flag = 0; p->Info.Data = c; p->Link = 0;}  }    }void Printlists(struct Lists *H)
{   struct Lists *p;        struct Lists *(S1[10]);int top1 = 0;p = H;while (p!=0 || top1!=0){    while (p!=0){  if (p->Flag==1)   // 子表,进入下一层 //{ S1[++top1] = p; p=p->Info.List; printf("("); }else { printf("%c",p->Info.Data); p=p->Link;   // 原子元素if (p!=0) printf(","); }} printf(")"); // 一个子表遍历结束 //p = S1[top1--];     p = p->Link;     // 返回上一层,转后继 //if (p!=0) printf(","); }
}int Depthlists(struct Lists *H)
{ int dep=0, Maxdep=0, top1 = 0;struct Lists *(S1[10]), *p;p = H;while (p!=0 || top1!=0){   while (p!=0){  if (p->Flag==1) { S1[++top1] = p; p=p->Info.List; dep++; }else p=p->Link; }if (dep > Maxdep) Maxdep = dep;     p = S1[top1--];  dep--;  p = p->Link;  }return(Maxdep);
}int Lenthlists(struct Lists *H)  // 长度 //
{  int n=0;struct Lists *p;p = H->Info.List;while (p!=0) { n++;  p = p->Link;  }return(n);
}int main(){struct Lists *H;char a[100];char *s = gets(a);Setuplists(&H, s);Printlists(H);printf("\nlength  = %d",Lenthlists(H));return 0;
}

#include <stdio.h>int main(){char a[100];char *s = gets(a);int max = 0,n = 0;while(*s){if(*s=='('){n++;}else if(*s==')'){n--;}if(max < n) max = n;s++;}printf("length  = %d",max);return 0;
}

数据结构第五周作业(广义表的深度、长度、存储结构)相关推荐

  1. C语言——数据结构之广义表(概念及其存储结构)

    前言 本节我们来说说C语言中的广义表.主要介绍广义表的概念定义,并说明其存储结构,算法中将使用到递归思想. 广义表是线性表的一种推广,在数据结构中有广泛应用. 一.广义表的概念 1.广义表的概念 (1 ...

  2. 数据结构(C语言)-广义表

    广义表 一.广义表的定义和运算 1.广义表的定义 2.广义表的性质 二.广义表的存储 1.头尾表示法 2.孩子兄弟表示法 广义表是线性表的推广,也称为列表(Lists).线性表中的元素仅限于单个数据元 ...

  3. 【数据结构】CH6 数组和广义表

    目录 前言 一.数组 1.数组的基本概念 (1)定义 (2)性质 (3)d维数组的抽象数据类型 (4)[例6.1] 2.数组的存储结构 (1)一维数组的存储结构 (2)二维数组的存储结构 (3)三维数 ...

  4. 陈斌老师《数据结构与算法Python版》第五周作业——ASCII谢尔宾斯基地毯

    陈斌老师<数据结构与算法Python版>第五周作业--ASCII谢尔宾斯基地毯 题目 思路 程序如下 总结 题目 谢尔宾斯基地毯是形如上图的正方形分形图案,每个地毯可分为等大小的9份,其中 ...

  5. 学号20189220 2018-2019-2 《密码与安全新技术专题》第五周作业

    学号20189220 2018-2019-2 <密码与安全新技术专题>第五周作业 课程:<密码与安全新技术专题> 班级: 1892 姓名: 余超 学号:20189220 上课教 ...

  6. PHP第五周答案,算法设计与分析第五周作业——Word Ladder

    算法设计与分析第五周作业--Word Ladder 上周找了一道深度搜索优先搜索的算法题来做,于是这周就选了一道广度优先搜索算法题来试试手. 本周所选题目:原题目链接 题目详情 题目大意:给出一个字符 ...

  7. BUAA数据结构第五次作业2023

    文章目录 BUAA数据结构第五次作业2023 1. 树叶节点遍历(树-基础题) 题目 问题描述 输入形式 输出形式 样例输入 样例输出 样例说明 评分标准 问题分析 具体处理过程 完整代码 2. 词频 ...

  8. Linux创建名为vgtest的分区,第五周作业,

    第五周作业, 1.磁盘lvm管理,完成下面要求,并写出详细过程: 1)创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小 为16MB, 而后在卷组中创建大小为5G的逻辑卷t ...

  9. Python第五周作业

    Python第五周作业 1. 一元二次方程求根 2. 百钱买百鸡 3. 鸡兔同笼 4. 最大公约数和最小公倍数 5. 判断三角形并计算面积 6. 判断IP地址合法性 7. 回文素数 8. 反素数 9. ...

最新文章

  1. 如何正确配置Nginx+PHP
  2. 三种复位方式: 同步复位、异步复位、异步复位同步释放
  3. 【转】一位软件工程师的6年总结
  4. linux关机正确方法
  5. Ubuntu 中python 升级到3 后apt-get 一直报错
  6. Lvs+keepalived 高可用性负载均衡自动化配置
  7. 【c++】为什么类中静态(static)成员不能在类的定义内初始化?
  8. iOS中的多线程 NSOperation
  9. 重读经典:《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》
  10. 海豚的屠宰场--海豚湾
  11. (66)FPGA模块调用(Verilog调用Verilog)
  12. 【python】详解zipfile模块读取处理压缩文件实例
  13. Onvif之wsdl地址
  14. 用C语言多线程描述哲学家,并行程序设计-哲学家就餐问题
  15. TCP offload to the resuce 让TCP减负来挽救我们
  16. Hyperledger fabric-couchdb镜像版本的坑
  17. Retrofit 原理篇
  18. springboot整合mysql5.7_SpringBoot+MySQL,如何整合并使用MyBatis框架
  19. ProcessOn一款非常不错在线绘图工具
  20. 土地利用覆被变化的概念_土地利用与土地覆被变化研究综述

热门文章

  1. mysql中information_schema说明
  2. 公司项目里如何进行前后端接口联调
  3. sql无法打开用户默认数据库,登录失败,用户‘sa’登录失败,错误:4064的解决方法
  4. 解码方法(一条包含字母 A-Z 的消息通过以下方式进行了编码)
  5. LOOKUP函数10种经典用法
  6. js函数声明与赋值详解
  7. 64位Win10下python调用dll出错
  8. 如何优雅的判断一个数字在一个范围内
  9. 创建一个Worker类,具有属性 name sex salary level 创建一个linkedlist作为容器.录入5条工人信息
  10. 初学C语言const常见错误