问题描述及代码:
/* *烟台大学计控学院 *作 者:杨征 *完成日期:2015年11月1日 *问题描述:设计算法,求出给定广义表g中的原子个数和最大原子 */
(1)glist.h
typedef char ElemType; typedef struct lnode { int tag; //节点类型标识 union { ElemType data; //原子值 struct lnode *sublist; //指向子表的指针 } val; struct lnode *link; //指向下一个元素 } GLNode; //广义表节点类型定义 int GLLength(GLNode *g); //求广义表g的长度 int GLDepth(GLNode *g); //求广义表g的深度 GLNode *CreateGL(char *&s); //返回由括号表示法表示s的广义表链式存储结构 void DispGL(GLNode *g); //输出广义表 int atomnum(GLNode *g); //求广义表g中的原子个数 ElemType maxatom(GLNode *g); //求广义表g中最大原子
(2)glist.cpp
typedef char ElemType; typedef struct lnode { int tag; //节点类型标识 union { ElemType data; //原子值 struct lnode *sublist; //指向子表的指针 } val; struct lnode *link; //指向下一个元素 } GLNode; //广义表节点类型定义 int GLLength(GLNode *g); //求广义表g的长度 int GLDepth(GLNode *g); //求广义表g的深度 GLNode *CreateGL(char *&s); //返回由括号表示法表示s的广义表链式存储结构 void DispGL(GLNode *g); //输出广义表 int atomnum(GLNode *g); //求广义表g中的原子个数 ElemType maxatom(GLNode *g); //求广义表g中最大原子
(3)main.cpp
#include<stdio.h> #include"glist.h" int main() { GLNode *g; char *s="(b,(b,a,(#),d),((a,b),c((#))))"; g = CreateGL(s); DispGL(g); printf("\n"); printf("原子个数 :%d\n", atomnum(g)); printf("最大原子 :%c\n", maxatom(g)); return 0; }
运行结果:
知识点总结:
广义表的基本运算