廣義表是非線性的結構,是線性表的一種擴充套件,是有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 ...