第九週実践項目4—広義表算法庫及び応用(1)
5012 ワード
/*
Copyright (c)2015,
All rights reserved.
: 4-1.cbp
:
:2015 11 14
:v1.0
:(1) , :
① glist.h, , ;
② glist.cpp, , :
int GLLength(GLNode *g); // g
int GLDepth(GLNode *g); // g
GLNode *CreateGL(char *&s); // s
void DispGL(GLNode *g); // g
③ main ,
:
:
*/
glist.h :
<pre name="code" class="cpp">#ifndef GLIST_H_INCLUDED
#define GLIST_H_INCLUDED
#include <stdio.h>
#include <malloc.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); // g
#endif // GLIST_H_INCLUDED
glist.cppファイルコード:
<pre name="code" class="cpp">#include "glist.h" int GLLength(GLNode *g) // g { int n=0; GLNode *g1; g1=g->val.sublist; //g while (g1!=NULL) { n++; // g1=g1->link; } return n; } int GLDepth(GLNode *g) // g { GLNode *g1; int max=0,dep; if (g->tag==0) // 0 return 0; g1=g->val.sublist; //g1 if (g1==NULL) // 1 return 1; while (g1!=NULL) // { if (g1->tag==1) // { dep=GLDepth(g1); // if (dep>max) //max max=dep; } g1=g1->link; // g1 } return(max+1); // } GLNode *CreateGL(char *&s) // s { GLNode *g; char ch=*s++; // if (ch!='\0') // { g=(GLNode *)malloc(sizeof(GLNode));// if (ch=='(') // { g->tag=1; // g->val.sublist=CreateGL(s); // } else if (ch==')') g=NULL; // ')' ,g else if (ch=='#') // '#' , g=NULL; else // { g->tag=0; // g->val.data=ch; } } else // ,g g=NULL; ch=*s++; // if (g!=NULL) // , { if (ch==',') // ',' g->link=CreateGL(s); // else // , NULL g->link=NULL; } return g; // g } void DispGL(GLNode *g) // g { if (g!=NULL) // { // g if (g->tag==0) //g printf("%c", g->val.data); // else //g { printf("("); // '(' if (g->val.sublist==NULL) // printf("#"); else // DispGL(g->val.sublist); // printf(")"); // ')' } if (g->link!=NULL) { printf(","); DispGL(g->link); // } } }
main.cppファイルコード:<pre name="code" class="cpp">#include "glist.h" int main() { GLNode *g; char *s="(b,(b,a,(#),d),((a,b),c((#))))"; g = CreateGL(s); DispGL(g); printf(" :%d
", GLLength(g)); printf(" :%d
", GLDepth(g)); return 0; }:
<img src="http://img.blog.csdn.net/20151115185231649" alt="" />