数组矩阵广义表:用C语言代码创建并实现广义表
1。创建泛化表
如图所示,泛化表的所有节点连接成一排。一些节点存储原子数据,一些节点存储原子数据。 Dot存储的是另一个广义表数据,
我们创建一个数据串 ss = "(2,3,4, (1, (3, ( 7,8 ) ),2) )";基本上可以分为4层,每层都有一个括号标记下一层。在数学表示中,我们经常使用一系列括号来表示一个广义的表格。
![]()
因此,创建通用表需要连接。连接方法根据标签判断节点是Atom还是Node,然后根据选择进行相应的连接。如下图所示。
![]()
要编写代码,我们首先需要剪切传入的字符串并拆分每个括号“()”。每组括号代表一个新的广义表。我们需要找到括号,通过匹配括号的个数进行匹配,找到并剪切它们,将头字符串分开,以方便进一步的操作。
| 1234567891011121314151617181920 | void server(string &str,string &hstr){ //在非空字符串♿上分割头部,字符串 h❓ int > intk = 0; { //找到第一个最外层( ++i; ♷; if(头==+ +i; (') ++k ; 其他 ==') -- k ;† if(itag = |
L->tag = ❿♓; 2。广义表深度 我们只需要根据表位置进行一次递归调用即可判断。当然,我们还要具体判断空表的位置。† L ->atom = s[0]; }other{ //表的节点L,表尾 GList p,q; p = L; //p 是指向当前子列表(数组尾节点)的指针 string sub; sub = s.substr(1, s .size( ) -2); //去掉外括号 server (al, hsub); //hsub头字符串与sub分离,同时al删除 hsub CreateGList(p->ptr.hp,hsub); ?如果 (!p)退出(0);1234567891011121314151617181920 0 while(!sub.empty()); }1; //空表返回 0; GList pp; //前往同层,返回下一层,取表tail,获取表头,第一步是访问表的表头 int max; for for(最大值 = NU . int dep = GListDepth(pp->ptr.hp) ; = de > de > dep; //这个比较是用来比较深度的同层 } 返回 }
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网