广义表的基本操作
2016-01-05 19:13
357 查看
广义表的基本操作:
(1)创建广义表
(2)获取广义表的长度
(3)获取广义表的宽度
(4)打印广义表
(5)复制广义表
(1)创建广义表
(2)获取广义表的长度
(3)获取广义表的宽度
(4)打印广义表
(5)复制广义表
# include<stdio.h> # include<string.h> # include<malloc.h> # define MAX 100 typedef struct lnode{ int tag; union{ struct lnode * sublist; char data; }val; struct lnode *link; }*GLNode; void createGL(GLNode &g); int GLLength(GLNode g); int GLDepth(GLNode g); void printGL(GLNode h,GLNode g); void copyGL(GLNode g1,GLNode &g2); char s[MAX]; int i; int main() { printf("请输入广义表字符串表示\n"); scanf("%s",s); i=0; GLNode g,h,g1; createGL(h); printf("广义表的长度为:%d,广义表的深度为:%d\n",GLLength(h),GLDepth(h)); printf("打印广义表g1\n"); g=h; printGL(h,g); printf("\n广义表g1复制成广义表g2\n"); copyGL(g,g1); printf("打印广义表g2\n"); h=g1; printGL(h,g1); return 0; } //根据输入的字符串创建广义表 void createGL(GLNode &g) { if(s[i]=='(') { g=(GLNode)malloc(sizeof(struct lnode)); g->tag=1; g->link=NULL; i++; createGL(g->val.sublist); } else if(s[i]>='a'&&s[i]<='z') { g=(GLNode)malloc(sizeof(struct lnode)); g->tag=0; g->link=NULL; g->val.data=s[i]; i++; } if(s[i]==')') { i++; g->link=NULL; } else if(s[i]==',') { i++; createGL(g->link); } } //获取广义表的长度 int GLLength(GLNode g) { if(g==NULL||g->val.sublist==NULL) return 0; int n=0; g=g->val.sublist; while(g) { n++; g=g->link; } return n; } //获取广义表的深度 int GLDepth(GLNode g) { int max=0; if(g->tag==0)//原子节点深度为0 return 0; else { if(g->val.sublist==NULL)//空表的深度为1 return 1; g=g->val.sublist; while(g) { if(max<GLDepth(g)) max=GLDepth(g); g=g->link; } } return max+1; } //输出广义表,h指向广义表的头结点,g指向遍历过程中的节点 void printGL(GLNode h,GLNode g) { if(h==NULL)//头结点为空 return; if(g==NULL) { printf(")"); return ; } if(g->tag==1) { printf("("); printGL(h,g->val.sublist); if(g->link) printf(","); if(g!=h) printGL(h,g->link); } else { printf("%c",g->val.data); if(g->link) printf(","); printGL(h,g->link); } } //复制广义表,g1是原广义表,g2是复制后的广义表 void copyGL(GLNode g1,GLNode &g2) { if(g1==NULL) { g2=NULL; return ; } else { g2=(GLNode)malloc(sizeof(struct lnode)); g2->tag=g1->tag; g2->link=NULL; if(g2->tag==0) { g2->val.data=g1->val.data; copyGL(g1->link,g2->link); } else { g2->val.sublist=g1->val.sublist; copyGL(g1->val.sublist,g2->val.sublist); copyGL(g1->link,g2->link); } } }
相关文章推荐
- Eclipse Java注释模板设置详解
- 讲座:计算机专业及其学习
- python 实现登录网页的操作
- 算法推荐
- Bear and Raspberry
- Gatling实战(二)
- 暗原色先验单一输入图像去雾
- OSG+VS2010+win7环境搭建
- linux下配置hosts文件
- Properties集合
- 从孙子兵法理解围棋大龙攻杀的要诀: 攻守双方口诀
- Options ExecCGI is off in this directory: /Tool/www/samba
- XFS导致进程内核栈溢出的解决办法
- OpenCV基础知识点总结
- Python点滴02_Python3打开中文文本时报错的一种处理方法
- Codevs_P3052 多米诺&Codevs_P1022 覆盖(二分图匹配+网络流最大流)
- pandas 数据规整
- Arduino 中断和定时器
- JSONP跨域
- ios 大图 真机不显示的问题