廣義表:又稱列表)是一種非線性的資料結構,是
線性表的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。它被廣泛的應用於人工智慧等領域的表處理語言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 或者是原子或者是...