广义表的递归数据结构的表示与实现--自己写数据结构
来源:互联网 发布:samorost mac 编辑:程序博客网 时间:2024/06/08 18:04
文件glist.h头文件如下
#ifndef _GLIST_H_#define _GLIST_H_typedef enum {ATOM,LIST}ElemTag;typedef struct _GList{ ElemTag tag; union { char data; struct _GList *sublist; }val; struct _GList *next;}GList,*pGList;int glist_length(pGList pgl);int glist_depth(pGList pgl);pGList creat_glist(char **ch); void printf_glist(pGList pgl); #endif
数据结构实现glist.c如下
/************************时间:2014.12.15作者:XIAO_PING_PING编译环境:DEV-C++ 4.9.9.2 内容:广义表的递归表示与实现功能:学习写数据结构 *************************/#include <string.h>#include <stdlib.h>#include "glist.h"/*广义表的长度*/int glist_length(pGList pgl){ int length = 0; pgl = pgl->val.sublist; while(pgl) { length++; pgl = pgl->next; } return length;}/*广义表的深度*/int glist_depth(pGList pgl){ int max = 0,depth; if(0 == pgl->tag) { return 0; } pgl = pgl->val.sublist; if(!pgl) { return 1; } while(pgl) { if(pgl->tag) { depth = glist_depth(pgl); if(depth > max) { max = depth; } } pgl = pgl->next; } return max+1;} /*创建广义表*/ pGList creat_glist(char **ch){ pGList pgl; if(NULL == ch) { return ; } char tch = *(*ch); *ch = *ch + 1; if('\0' != tch) { pgl = (GList *)malloc(sizeof(GList)); if('(' == tch) { pgl->tag = LIST; pgl->val.sublist = creat_glist(ch); } else if(')' == tch) { pgl = NULL; } else { pgl->tag = ATOM; pgl->val.data = tch; } } else { pgl = NULL; } tch = *(*ch); *ch = *ch + 1; if(pgl) { if(',' == tch) { pgl->next = creat_glist(ch); } else { pgl->next = NULL; } } return pgl; } /*遍历打印广义表*/ void printf_glist(pGList pgl){ if(pgl) { if(1 == pgl->tag) { printf("("); if(pgl->val.sublist) { printf_glist(pgl->val.sublist); } else { printf(" "); } } else { printf("%c",pgl->val.data); } if(1 == pgl->tag) { printf(")"); } if(pgl->next) { printf(","); printf_glist(pgl->next); } }}
测试文件test.c如下:
/***************************************时间:2014.12.15作者:XIAO_PING_PING****************************************/#include <conio.h>#include <stdlib.h>#include <string.h>#include "glist.h"int main(){ int length,depth; char *s="(a,(b,c,d),(d,l),d,p))"; pGList gl; gl = creat_glist(&s); length = glist_length(gl); depth = glist_depth(gl); printf("length = %d,depth = %d\n",length,depth); printf_glist(gl); getch(); return 0; }
运行结果如下:
0 0
- 广义表的递归数据结构的表示与实现--自己写数据结构
- 多维数组的存储表示与实现--自己写数据结构
- 赫夫曼树编码的表示与实现--自己写数据结构
- 【数据结构】广义表的实现
- 栈的链式结构表示与实现——自己写数据结构
- 串的堆分配存储表示与实现--自己写数据结构
- 看数据结构写代码(52) 广义表的扩展线性链表存储表示
- 【自己动手写数据结构】 -- 循环队列的表示与实现
- C++ 数据结构 *** 广义表的部分实现
- 广义的数据结构与算法
- 数据结构--数组和广义表--数组的顺序存储表示和实现
- 数据结构10:二分查找的递归与非递归表示与实现
- 看数据结构写代码(37) 图的十字链表的表示与实现
- 数据结构_数组与广义表_链表的递归遍历
- 数据结构---线性表的链式表示与实现
- 重温数据结构-线性表的顺序表示与实现
- 数据结构—线性表的顺序表示与实现
- 数据结构--线性表的链式表示与实现
- 多维数组的存储表示与实现--自己写数据结构
- java 生成订单号
- ie条件注释来解决ie hack
- [BZOJ1014] [JSOI2008]火星人prefix
- Android Studio系列教程二--基本设置与运行
- 广义表的递归数据结构的表示与实现--自己写数据结构
- Android SDK下载和更新失败的解决方法
- 若是把每天记录的成长变成流水账, 那岂不是太折煞风景了么
- Eclipse中新建Android项目后src及layout文件夹没有.java和.xml文件的情况之一
- Thrift入门及Java实例演示
- STM32 GPIO输入输出模式比较
- Javascript 创建类并动态添加属性及方法
- java "aababcabcdabcde",获取字符串中每一个字母出现的次数
- zero copy 为什么快