遞迴實現廣義表

2021-07-13 08:54:32 字數 2119 閱讀 8883

廣義表是非線性的結構,是線性表的一種擴充套件,是有n個元素組成有限序列。由於在表的描述中可以巢狀表,允許表中有表,所以可以通過遞迴實現廣義表。

具體實現如下:

標頭檔案

#pragma once

//實現廣義表的結構

enum type//列舉型別

;struct generalizednode//廣義表的結點

; generalizednode();

generalizednode(type type, int value); //全預設建構函式

};class generalized

;

各函式的具體實現

#include#include#includeusing namespace std;

#include"generalized.h"

generalizednode::generalizednode()

:_next(null)

{}generalizednode::generalizednode(type type, int value)

: _type(type)

, _next(null)

if (_type == sub) }

generalized::generalized()

:_head(null)

{}generalized::generalized(const char* str)//建構函式

: _head(null)

generalizednode* generalized::_creatlist(const char*& str)

else if (*str == '(')//如果為(,則出現字表,進行遞迴呼叫

else if (*str == ')')//表示表的結束(包括子表),返回表的頭結點

else

}assert(false);

return head;

}bool generalized::_isvalue(char ch)//判斷是否為字母或數字

return false;

}generalized::generalized(const generalized& g)//拷貝建構函式

generalizednode* generalized::_copy(generalizednode* head)

if (cur->_type == sub)

cur = cur->_next;

} return newhead;

}generalized& generalized::operator=(const generalized& g)//傳統寫法

return *this;

}generalized::~generalized()

void generalized::_distory(generalizednode* head)

cur = cur->_next;

delete del; }}

void generalized::print()

void generalized::_print(generalizednode* head)

if (cur->_type == value)

if (cur->_type == sub)

cur = cur->_next;

} cout << ")";

}size_t generalized::size()

size_t generalized::_size(generalizednode* head)

if (cur->_type == sub)

cur = cur->_next;

} return count;

}size_t generalized::depth()

size_t generalized::_depth(generalizednode* head)

} cur = cur->_next;

} return depth;

}

測試用例如下:

void test()

本文出自 「scen」 部落格,請務必保留此出處

廣義表的簡單實現

廣義表 廣義表是一種非線性資料結構,是線性表的推廣。廣義表是一種單遞迴的思想,它允許表中有表。例 l 空表,深度為1 l1 具有乙個元素的廣義表,深度為2 l2 a,f b 具有三個元素,深度為3 廣義表的儲存 現在我們來實現簡單廣義表的儲存,允許表中的元素是字母或者數字。由於廣義表中的元素有可能是...

廣義表的簡單實現

廣義表 廣義表是一種非線性資料結構,是線性表的推廣。廣義表是一種單遞迴的思想,它允許表中有表。例 l 空表,深度為1 l1 具有乙個元素的廣義表,深度為2 l2 a,f b 具有三個元素,深度為3 廣義表的儲存 現在我們來實現簡單廣義表的儲存,允許表中的元素是字母或者數字。由於廣義表中的元素有可能是...

廣義表操作 建立廣義表,判斷廣義表是否相等

建立廣義表 演算法思路 從字串行中分離出左部,右部,依次為左部和右部建立儲存 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 ...