广义表有两种常用的表示方法:括号表示法和逻辑列表法。 2.1 括号表示法 括号表示法使用括号来标识子表,并用逗号分隔元素。例如,(1, (2, 3), (4, (5, 6)))表示一个包含三个元素的广义表,其中第一个元素是原子数据1,第二个元素是一个包含两个原子数据2和3的子表,第三个元素是一个包含两个原子数据4和...
广义表的复杂性主要体现在其结构和操作上。由于广义表可以包含其他广义表,这导致了其结构和操作的复杂性。 正如哥德尔(Gödel)在《哥德尔、艾舍尔、巴赫:集异璧之大成》中所说:“在无限的复杂性中,我们能找到一种深刻的和谐。” 这句话虽然是在探讨数学和艺术的复杂性时说的,但也适用于广义表的复杂性。广义表的复...
下面,实现了广义表的两种定义,以及基于递归的一些操作。 1#include<bits/stdc++.h>2#defineAtomType int3typedefenum{ATOM,LIST}ElemTag;//ATOM = 0:原子;LIST = 1:子表4/*线性表存储之链式*/5typedefstructGLNode{6ElemTag tag;//枚举类型的标志域,只能取定义了的枚举值7union{//union联合体,下面两部分...
//定义广义表的数据结构 typedef struct GList { int tag; union { char atom; struct GList *sublist; } value; struct GList *next; } GList; //创建广义表 GList* createGList() { GList *list; char c; scanf("%c", &c); if (c == '#') { ...
广义表是一种线性表,或者说,广义表是一种线性表的推广,它属于多层次的线性表,广义表中可以存储不可以再分割的元素,同时也可以存储一张广义表(子表),因此适用情况相对灵活。 设ai为广义表的第i个元素,广义表是n(n≥0)个元素的一个序列,若n=0时则称为空表。,广义表GL的一般表示与线性表相同,即: ...
广义表通常记作:LS = (a1, a2, ..., an) 其中:LS为表名,n为表的长度,每一个ai为表的元素。 习惯上,一般用大写字母表示广义表,小写字母表示原子。 表头 若LS非空(n≥1),则其第一个元素a1就是表头。 记作head(LS) = a1。 注:表头可以是原子,也可以是子表。
1. 广义表的创建 如图所示,广义表的每一个结点相互串联,有些结点存储原子数据,有些结点则存储另一份广义表数据,我们创建数据string ss = "(2,3,4, (1, (3, ( 7,8 ) ),2) )";其基本可以分成4层,每一个层中一个括号表示下一层,在数学表示中,我们也常用括号的级数表示广义表。 因此,广义表的创建就...
c/c++ 广义表 广义表 列表里面有列表,比如(1,(2,(3,4)),5) 用链表可以实现 结果如图 guangyibiao.h #ifndef__GUANGYIBIAO__#define__GUANGYIBIAO__#include<stdio.h>#include<string.h>#include<memory.h>#include<malloc.h>#include<assert.h>#include<stdbool.h>#include<stdlib.h>#defineAtomType ...
struct GLNode *hp; struct GLNode *tp; } ptr; } } *GList; */boolInitGList(GList*L);intGListLength(GList L);boolGListEmpty(GList L);boolInsertGList(GList*L,ElemTag tag,ElemData e,int pos);boolDeleteGList(GList*L,GLNode*N,int pos);//不实现了boolUpdateGList(GList*L,GLNode*N...