廣義表(Lists,又稱(chēng)列表)是一種非線性的數(shù)據(jù)結(jié)構(gòu),是線性表的一種推廣。即廣義表中放松對(duì)表元素的原子限制,容許它們具有其自身結(jié)構(gòu)。
成都創(chuàng)新互聯(lián)主營(yíng)弓長(zhǎng)嶺網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App制作,弓長(zhǎng)嶺h5小程序設(shè)計(jì)搭建,弓長(zhǎng)嶺網(wǎng)站營(yíng)銷(xiāo)推廣歡迎弓長(zhǎng)嶺等地區(qū)企業(yè)咨詢
思想:廣義表就類(lèi)似下圖的結(jié)構(gòu),他的大體(下圖第一行)相當(dāng)于一個(gè)帶頭結(jié)點(diǎn)的鏈表,
代碼思想,首先要有一個(gè)頭結(jié)點(diǎn)為HEAD類(lèi)型,每一個(gè)廣義表有且只有一個(gè)HEAD,而后每個(gè)節(jié)點(diǎn)如果有分支則把它定義為SUB類(lèi)型,SUB便是它分支的一個(gè)新頭他有一個(gè)sublink指針指向他的第一個(gè)元素,如果沒(méi)有則是VALUE類(lèi)型。
#pragma once #include<iostream> #include<assert.h> using namespace std; enum Type { HEAD, VALUE, SUB }; struct generalizelistNode { generalizelistNode * _next; Type _type; union { char _value; generalizelistNode *sublink; }; generalizelistNode(Type type=HEAD,char value=0) :_type(type), _value(value), _next(NULL) { } }; class Generalizelist { protected: bool isvalue(char c) { if (c >= 'a'&&c<='z' || c>='A'&&c <= 'Z' || c>='0'&&c <= '9') { return true; } else { return false; } } public: Generalizelist(char *&str) { _head = generallist(str); } ~Generalizelist() { Empty(_head); } void Print() { _Print(_head); } Generalizelist& operator=(Generalizelist g) { swap(_head, g._head); } Generalizelist(Generalizelist &g) { _head = copy(g._head); } int Size() { return _Size(_head); } int Depth() { return _Depth(_head); } protected: generalizelistNode* generallist(char *&str) { assert(*str == '('); generalizelistNode *head = new generalizelistNode(HEAD); generalizelistNode *cur = head; str++; while (*str) { if (isvalue(*str)) { generalizelistNode *Node = new generalizelistNode(VALUE,*str); cur->_next = Node; cur = Node; str++; } else if (*str == '(') { generalizelistNode *sub = new generalizelistNode(SUB); cur->_next = sub; cur = sub; sub->sublink = generallist(str); } else if (*str==')') { ++str; return head; } else { str++; } } } void _Print(generalizelistNode *head) { generalizelistNode *cur = head; while (cur) { if (cur->_type == HEAD) { cout << '('; } else if (cur->_type == VALUE) { cout << cur->_value; if (cur->_next) { cout << ","; } } else { _Print(cur->sublink); } cur = cur->_next; } cout << ")"; } generalizelistNode * copy(generalizelistNode *&_cur) { generalizelistNode *cur = _cur; generalizelistNode *newhead = new generalizelistNode(HEAD); generalizelistNode *tmp = newhead; cur = cur->_next; while (cur) { if (cur->_type == VALUE) { generalizelistNode *node = new generalizelistNode(VALUE, cur->_value); tmp->_next = node; tmp = node; cur = cur->_next; } else { generalizelistNode *node = new generalizelistNode(SUB); tmp->_next = node; tmp = node; tmp->sublink = copy(cur->sublink); cur = cur->_next; } } return newhead; } void Empty(generalizelistNode *&head) { generalizelistNode *tmp = head; head = head->_next; delete tmp; while (head) { if (head->_type == VALUE) { generalizelistNode *tmp = head; head = head->_next; delete tmp; } else if (head->_type == SUB) { generalizelistNode *tmp = head; Empty(tmp->sublink); head = head->_next; } } } int _Size(generalizelistNode *&cur) { int count = 0; generalizelistNode *tmp = cur; while (tmp) { if (tmp->_type == VALUE) { count++; tmp = tmp->_next; } else if (tmp->_type == SUB) { count += _Size(tmp->sublink); tmp = tmp->_next; } else { tmp = tmp->_next; } } return count; } int _Depth(generalizelistNode *&cur) { generalizelistNode *tmp = cur; int depth = 1; while (tmp) { int sub_depth=1; if (tmp->_type == SUB) { sub_depth = _Depth(tmp->sublink); tmp = tmp->_next; if (sub_depth + 1 > depth) { depth += sub_depth; } } else { tmp = tmp->_next; } } return depth; } private: generalizelistNode *_head; }; void Test() { char *str1 = "(a,b,(c,d),e,f)"; Generalizelist T1(str1); T1.Print(); Generalizelist T2(T1); cout <<endl; T2.Print(); cout << endl; Generalizelist T3 = T2; T3.Print(); cout << endl; cout << T3.Size() << endl; cout << T3.Depth() << endl; } #include"GeneralizeList.h" int main() { Test(); return 0; }
本文題目:數(shù)據(jù)結(jié)構(gòu)--廣義表
分享鏈接:http://chinadenli.net/article18/pigsgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化、外貿(mào)建站、做網(wǎng)站、自適應(yīng)網(wǎng)站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)