廣義表:廣義表是一種非線性資料結構,是線性表的推廣。廣義表是一種單遞迴的思想,它允許表中有表。
例:l=(); 空表,深度為1
l1=(()); 具有乙個元素的廣義表,深度為2
l2=(a,((f)),b) 具有三個元素,深度為3
廣義表的儲存:
現在我們來實現簡單廣義表的儲存,允許表中的元素是字母或者數字。由於廣義表中的元素有可能是資料項,也有可能是子表,但是只能是其中乙個。所以我們在建立乙個廣義表的結點的時候可以將資料項和子表封裝成乙個聯合體。此外還必須有乙個指向下乙個結點的指標。
例:l2的儲存結構如圖
enum type //廣義表的結點有三種型別
;struct generalizednode
; generalizednode()
:_next(null)
, _sublink(null)
{}};class generalizedlist
generalizedlist(const char *str)
:_head(new node)
~generalizedlist()
generalizedlist(const generalizedlist& l) //拷貝建構函式
generalizedlist& operator=(generalizedlist l)
size_t size()
size_t depth()
void display()
private:
node* _creatlist(const char* &str,node *head=(new node))
else if (*str == '(')
else if (*str == ')')
else
}return head;
}void _print(node* head)
cur = cur->_next;
}else if (cur->_type==list_type) //如果是子表
cur = cur->_next;
}else
}cout << ")";
}size_t _size(node *head) //求廣義表中資料的個數
else if (cur->_type == list_type)
else
}return count;
}size_t _depth(node *head) //求廣義表的深度
廣義表的簡單實現
廣義表 廣義表是一種非線性資料結構,是線性表的推廣。廣義表是一種單遞迴的思想,它允許表中有表。例 l 空表,深度為1 l1 具有乙個元素的廣義表,深度為2 l2 a,f b 具有三個元素,深度為3 廣義表的儲存 現在我們來實現簡單廣義表的儲存,允許表中的元素是字母或者數字。由於廣義表中的元素有可能是...
遞迴實現廣義表
廣義表是非線性的結構,是線性表的一種擴充套件,是有n個元素組成有限序列。由於在表的描述中可以巢狀表,允許表中有表,所以可以通過遞迴實現廣義表。具體實現如下 標頭檔案 pragma once 實現廣義表的結構 enum type 列舉型別 struct generalizednode 廣義表的結點 g...
廣義表操作 建立廣義表,判斷廣義表是否相等
建立廣義表 演算法思路 從字串行中分離出左部,右部,依次為左部和右部建立儲存 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 ...