Code前端首页关于Code前端联系我们

数组矩阵广义表:用C语言代码创建并实现广义表

terry 2年前 (2023-09-27) 阅读数 70 #数据结构与算法

1。创建泛化表

如图所示,泛化表的所有节点连接成一排。一些节点存储原子数据,一些节点存储原子数据。 Dot存储的是另一个广义表数据,

我们创建一个数据串 ss = "(2,3,4, (1, (3, ( 7,8 ) ),2) )";基本上可以分为4层,每层都有一个括号标记下一层。在数学表示中,我们经常使用一系列括号来表示一个广义的表格。

数组矩阵广义表:广义表的创建及C语言代码实现

因此,创建通用表需要连接。连接方法根据标签判断节点是Atom还是Node,然后根据选择进行相应的连接。如下图所示。

数组矩阵广义表:广义表的创建及C语言代码实现

要编写代码,我们首先需要剪切传入的字符串并拆分每个括号“()”。每组括号代表一个新的广义表。我们需要找到括号,通过匹配括号的个数进行匹配,找到并剪切它们,将头字符串分开,以方便进一步的操作。

1234567891011121314151617181920void server(string &str,string &hstr){ //在非空字符串♿上分割头部,字符串 h❓ int > intk = 0; { //找到第一个最外层( ++i; ♷; if(头==+ +i; (') ++k ; 其他 ==') -- k ;† if(itag =

L->tag =

❿♓;    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()); }

2。广义表深度

我们只需要根据表位置进行一次递归调用即可判断。当然,我们还要具体判断空表的位置。† 1; //空表返回 0; GList pp; //前往同层,​​返回下一层,取表tail,获取表头,第一步是访问表的表头 int max; for for(最大值 = NU . int dep = GListDepth(pp->ptr.hp) ; = de > de > dep; //这个比较是用来比较深度的同层 } 返回 }

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门