इस अनुभाग में हम सामान्यीकृत सूचियों (Generalized Lists) के बारे में देखेंगे। एक सामान्यीकृत सूची L को n तत्वों (n ≥ 0) का एक परिमित अनुक्रम (finite sequence) के रूप में परिभाषित किया जा सकता है। प्रत्येक तत्व ei या तो एक परमाणु (atom - एकल तत्व) होता है या फिर एक अन्य सामान्यीकृत सूची। जो तत्व ei परमाणु नहीं हैं, वे L की उप-सूचियाँ (sub-lists) कहलाती हैं।
मान लीजिए L = ((A, B, C), ((D, E), F), G)। यहाँ L के तीन तत्व हैं: उप-सूची (A, B, C), उप-सूची ((D, E), F), और परमाणु G। फिर उप-सूची ((D, E), F) के दो तत्व हैं: एक उप-सूची (D, E) और परमाणु F।
C++ में सामान्यीकृत सूची नोड की संरचना
C++ में हम सामान्यीकृत सूची नोड को निम्न प्रकार से परिभाषित कर सकते हैं:
class GeneralizedListNode {
private:
GeneralizedListNode *next;
bool tag;
union {
char data;
GeneralizedListNode *down;
};
};
यदि tag सत्य (true) है, तो नोड द्वारा दर्शाया गया तत्व एक उप-सूची है। down पॉइंटर उप-सूची के पहले नोड की ओर इंगित करता है। यदि tag असत्य (false) है, तो तत्व एक परमाणु है। next पॉइंटर सूची में अगले तत्व की ओर इंगित करता है। सूची निम्न आरेख की तरह दिखाई देगी:
