初試 廣義表

2021-07-12 04:42:08 字數 2487 閱讀 8085

廣義表:又稱列表)是一種非線性的資料結構,是

線性表的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。它被廣泛的應用於人工智慧等領域的表處理語言lisp語言中。在lisp語言中,廣義表是一種最基本的資料結構,就連lisp 語言的程式也表示為一系列的廣義表。

廣義表是

n (n>=0)

個元素a1,a2,a3,…,an

的有限序列,其中

ai或者是原子項,或者是乙個廣義表。通常記作

ls=(

a1,a2,a3,…,an)。ls

是廣義表的名字,

n為它的長度。若

ai是廣義表,則稱它為

ls的子表。

普通資料型別的廣義表的定義如下:

節點:

#define type int  //型別重定義

enum

;struct generalizednode    //廣義表的節點

; generalizednode(type type = head, char value = 0)   //節點的建構函式

:_type(type),

_next(null)

if (_type == sub)}};

廣義表:

class generalized

generalized(const char* str)  //有參建構函式

:_head(null)

generalized(const generalized& g)    //拷貝建構函式

generalized & operator=(generalized g)   //賦值運算子過載

bool _isvalue(char ch)   //判斷是否為正常資料

else

return false;

} void size()  //求長度

void deps()  //求深度

void desplay()  //輸出節點

~generalized()  //析構函式u

protected:

generalizednode *_generalist(const char*&str) //建構函式內部實現函式

else if (*str == '(')

else if (*str == ')')

else

}cout <

assert(false);

return head;

} void _printgeneralist(generalizednode* head)  //輸出函式,內部實現函式

else if (cur->_type == value)

else

cur = cur->_next;

} cout <

} size_t _size(generalizednode* g)  //求長度內部實現函式

else if (g->_type == value)

else

}return n;

} size_t _deps(generalizednode *head)   //求深度內部實現函式

}cur = cur->_next;

} return deps;

} generalizednode *_copy(generalizednode* head)  //拷貝構造內部實現函式

else if (cur->_type == sub)

cur = cur->_next;

newcur = newcur->_next;

} return newhead;

} void _destory(generalizednode* head)  //析構函式內部實現函式

else if (cur->_type == value)

else

deletetemp;

} }protected:

generalizednode* _head;  //節點

};#endif;

上述函式均儲存於 

generalized.h中

測試用例:

#includeusing namespace std;

#include#include"generalist.h"

void test1()

{ generalized g1("()");

generalized g2("(a,b)");

generalized g3("(a,b,(c,d))");

generalized g4("(a,b,(c,d),(e,(f),h))");

cout 測試結果:

歡迎各位大神批評指正!!!

廣義表操作 建立廣義表,判斷廣義表是否相等

建立廣義表 演算法思路 從字串行中分離出左部,右部,依次為左部和右部建立儲存 char s 61 設字串行長度不超過60 eg a,b c d,e,f g a i b int sever int a,int b i while k 0 s i i b return i eg a,b c d,e,f ...

廣義表取表頭表尾 5 4 廣義表

5.4.1 廣義表的概念 廣義表也是線性表的一種推廣。廣義表也是n個資料元素 d1,d2,d3,dn 的有限序列,但不同的是,廣義表中的di既可以是單個元素,還可以是乙個廣義表,通常記作 gl d1,d2,d3,dn gl是廣義表的名字,通常用大寫字母表示。n是廣義表的長度。若 di是乙個廣義表,則...

廣義表簡述

廣義表 lists,又稱列表 是一種非線性的 資料結構 是線性表 的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。它被廣泛的應用於人工智慧等領域的表處理語言lisp語言中。1 定義 廣義表是n n 0 個元素a1,a 2,a i,a n的有限序列。其中 a i 或者是原子或者是...