資料結構之廣義表模擬

2021-07-25 09:30:51 字數 1993 閱讀 8489

測試環境:vs2010

廣義表是一種非線性的結構,是線性表的一種擴充套件,是有n個元素組成有限序列。

廣義表的定義是遞迴的,因為在表的描述中又得到了表,允許表中有表。

eg:

<1> a = ()

<2> b = (a,b)

<3> c = (a,b,(c,d))

<4> d = (a,b,(c,d),(e,(f),h))

<5> e = (((),()))

儲存結構:

**實現:

#include #include using namespace std;

enum type

;typedef struct generallistnode

else if (type == sub)

else

}type _type; //型別

generallistnode* _next; //指向同層的下乙個節點

union

;}node;

class generallized

generallized(const generallized& g)

:_head(null)

簡潔版的賦值運算子過載1

//generallized& operator=(generallized g)

// //簡潔版的賦值運算子過載2

generallized& operator=(const generallized& g)

~generallized() }

void printgenerallized()//列印廣義表

return false;

} node* _creatlist(const char*& s)//建立廣義表

else if (*s == '(')//子表

else if (*s == ')')//子表結束

else

}return head;

} node* _copy(node* head)

else if (cur->_type == sub)//子表節點

else

}return newhead;

} void _destroy(node* head)

else//值節點or頭節點

}} node* _print(node* head)//列印廣度表

else if (cur->_type == value)//值節點

}else if (cur->_type == sub)//子表項

}else

cur = cur->_next;

} cout<

return head;

} size_t _size(node* head)//資料節點的個數

else if (cur->_type == sub)//若為子表節點,則count+=子表資料節點

else

cur = cur->_next;

} return count;

} size_t _depth(node* head)//求取廣義表深度

}cur = cur->_next;

} return maxdepth;

}protected:

node* _head;//廣義表的頭結點

};void testgenerallized()

{ char* s = "()";//空表

generallized g(s);

g.printgenerallized();

cout<

執行結果:

資料結構 廣義表

廣義表 lists,又稱列表 是一種非線性的 資料結構 是線性表 的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。思想 廣義表就類似下圖的結構,他的大體 下圖第一行 相當於乙個帶頭結點的鍊錶,思想,首先要有乙個頭結點為head型別,每乙個廣義表有且只有乙個head,而後每個節點...

資料結構 廣義表

概念 陣列和廣義表可以看成是線性表在下述含義上的擴充套件,表中資料元素本身也是乙個資料結構。廣義表也可以看作是線性表的推廣。1 廣義表的元素可以是子表,而子表的元素還可以包含子表。2 列表可以被其他列表所共享。3 列表可以是乙個遞迴的表,也就是說列表也可以是自身的子表。由於廣義表裡面的資料元素可以具...

資料結構 廣義表

一 問題概述 廣義表是非線性的資料結構,是由若干個元素組合而成的,廣義表中可以有子表,類似這樣的 我們以c a,b,c,d 為例,將它定義為這樣的資料結構 我們會給定字串的形式,如 char str a,b,c,d 然後將它轉化為如上的資料結構。二 解決辦法 1 將符號 看作是頭節點,然後將是數值的...