欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

廣義表的實現(xiàn)

廣義表:非線性結(jié)構(gòu),是線性表的一種擴展,是有n個元素組成有限序列,是遞歸的,因為在表的描述中又得到了表,允許表中有表。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、岑鞏網(wǎng)站維護、網(wǎng)站推廣。

廣義表的實現(xiàn)

#include<cassert>      
#include<iostream>
using namespace std;

enum Type    //枚舉節(jié)點的類型
{
	HEAD,  //頭結(jié)點
	VALUE, //有數(shù)據(jù)成員的節(jié)點
	SUB,   //有子鏈的節(jié)點
};

template<class T>
struct GeneralizedNode   //定義節(jié)點
{
	Type _type;
	GeneralizedNode* _next;
	union            //運用聯(lián)合體使得該數(shù)據(jù)成員只含有一種節(jié)點
	{
		T _value;
		GeneralizedNode* _sublink;
	};
	GeneralizedNode(Type type = HEAD, T value = 0)  //構(gòu)造節(jié)點
		:_type(type)
		,_next(NULL)
	{
		if (_type == VALUE)
		{
			_value = value;
		}
		if (_type == SUB)
		{
			_sublink = NULL;
		}
	}
};

template<class T>
class Generalized
{
public:
	Generalized()
		:_head(NULL)
	{}
	Generalized(const char* str)    //構(gòu)造函數(shù)
		:_head(NULL)
	{
		_head = _Creatlize(str);
	}


	Generalized(const Generalized& g)   //拷貝構(gòu)造
	{
		_head = _Copy(g._head);

	}


	Generalized& operator=(const Generalized& g) //傳統(tǒng)寫法
	{
		if (this != &g)
		{
		 GeneralizedNode *temp=_Copy(g._head);
		 _Destroy(_head);
		 _head = temp;
		}
		return *this;
	}

	Generalized<T>& operator=(Generalized  g) //現(xiàn)代寫法
	{
		swap(_head, g._head);
		return *this;
	}

	size_t Size()   //求表中的結(jié)點個數(shù)
	{
		return _size(_head);
	}

	size_t Depth()    //求深度
	{
		return _Depth(_head);
	}

	void print()    //打印節(jié)點
	{
		_print(_head);
	}

protected:
	bool ISValue(char m)
	{
		if (m >= 'a'&&m <= 'z' || m >= 'A'&&m <= 'Z' || m >= '0'&&m <= '9')
		{
			return true;
		}
		else
		{
			return false;
		}

	}
	void _print(GeneralizedNode<T>* head)  //打印節(jié)點 運用遞歸方式進行
	{
		assert(head);
		GeneralizedNode<T> *cur = head;
		while (cur)
		{
			if (cur->_type == HEAD)
			{
				cout << "(" << "";
				//cur = cur->_next;
			}
			else if (cur->_type == VALUE) //如果是VALUE,則打印該節(jié)點
			{
				cout << cur->_value;
				if (cur->_next == NULL)
				{
					cout << ")";
				}
				else
				{
					cout << ",";
				}
			}
			else if (cur->_type == SUB) //如果是SUB類型,則遞歸調(diào)用下一層
			{
				_print(cur->_sublink);
				if (cur->_next == NULL)
				{
					cout << ")";
				}
				else
				{
					cout << ",";
				}
				
			}
			else
			{
				
				cout << ")";
			}
			cur = cur->_next;
		}
		
	}

	size_t _size(GeneralizedNode<T>* p)
	{
		GeneralizedNode<T> *cur = p;
		int count = 0;
		while (cur)
		{
			if (cur->_type == VALUE) //如果是VALUE,則count++
			{
				++count;
			}
			else if (cur->_type == SUB) //如果是SUB,則調(diào)用下一層
			{
				count += _size(cur->_sublink);
			}
			cur = cur->_next;
		}
		return count;
	}

	int _Depth(GeneralizedNode<T>* head)
	{
		GeneralizedNode<T>* cur = head;
		int depth = 1;
		while (cur)
		{
			if (cur->_type == SUB)
			{
				int subdepth = _Depth(cur->_sublink);
				if (subdepth + 1 > depth)
				{
					depth = subdepth + 1;
				}
			}
			cur = cur->_next;
		}
		return depth;
	}

	GeneralizedNode<T>* _Creatlize(const char*& str)   //構(gòu)造廣義表
	{
		assert(*str == '(');
		while (*str)
		{
			if (*str == '(')
			{
				GeneralizedNode<T>* _head = new GeneralizedNode<T>(HEAD);
				GeneralizedNode<T>* cur = _head;
				++str;
				while (*str)
				{
					if (ISValue(*str))
					{
						GeneralizedNode<T> *temp = new GeneralizedNode<T>(VALUE);
						
						temp->_value = *str;
						cur->_next = temp;
						cur = cur->_next;
						++str;
					}
					else if (*str == '(')
					{
						GeneralizedNode<T>* sub = new GeneralizedNode<T>(SUB);
						sub->_sublink = _Creatlize(str);
						cur->_next = sub;
						cur = cur->_next;
					}
					else if (*str == ')')
					{
						++str;
						return _head;
					}
					else
					{
						++str;
					}
				}
				return _head;
			}
		}
		return _head;
	}
	GeneralizedNode<T>* _Copy(GeneralizedNode<T>* head)  //拷貝
	{
		GeneralizedNode<T>* newhead = new GeneralizedNode<T>(HEAD);
		GeneralizedNode<T>* cur = head->_next;
		GeneralizedNode<T>* newcur = newhead;
		while (cur)
		{
			if (cur->_type == VALUE)
			{
				newcur->_next = new GeneralizedNode<T>(VALUE, cur->_value);
				newcur = newcur->_next;
			}
			else if (cur->_type == SUB)
			{
				newcur->_next = new GeneralizedNode<T>(SUB);
				newcur = newcur->_next;
				newcur->_sublink = _Copy(cur->_sublink);
			}
			cur = cur->_next;
		}
		return newhead;
	}

protected:
	GeneralizedNode<T>* _head;

};

測試代碼如下:

void test4()
{
	Generalized<char> a("(a,b)");
	Generalized<char> b("(a,(c,(f),d),b)");

	Generalized<char> c(a);
	Generalized<char> d(b);
	c.print();
	cout<< endl;
	d.print();
	cout << endl;
	cout << d.Depth()<<endl;
	cout << d.Size()<<endl;
}
int main()
{

	test4();
	system("pause");
	return 0;
}

運行結(jié)果如下:

廣義表的實現(xiàn)

文章標(biāo)題:廣義表的實現(xiàn)
文章地址:http://aaarwkj.com/article28/ijpjjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、ChatGPT面包屑導(dǎo)航、服務(wù)器托管外貿(mào)網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
国产亚洲欧美日韩激情在线| 精品国产乱码一区二区三区| 亚洲成人免费在线播放| 亚洲日本欧美一区二区| av天堂男人站在线观看| 亚洲中文字幕高清无二区| 最新日本人妻中文字幕| 日本免费一区二区三区四区视频| 欧美日韩国产成人激情| 免费国产网站在线观看不卡| 一区二区三区午夜激情| 国产亚洲精品视频在线| 色呦呦中文字幕在线播放| 欧美小黄片在线免费看| 蜜桃福利视频一区二区| 日本女优中文字幕久久| 亚洲国产精品第一区第二区| av天堂男人站在线观看| 亚洲综合中文字幕经典av在线 | 亚洲国内精品一区二区在线| 久久精品国产免费夜夜嗨| 麻豆资源视频在线观看| 国产麻豆剧传媒国产av| 精品国产一区二区三区性色av| 亚洲精品色婷婷一区二区| 亚洲和欧洲一码二码区视频| 久久国产精品成人免费蜜臀| 欧美国产日本日韩在线黄| 热久久精品只有这里有| 玩弄丰满熟妇班主任老师| 精品国产亚洲av未满十八| 日日添夜夜添天天操| 91日本精品一区二区| 一区二区亚洲国产精品| 日本成年网站在线观看| 久久伊人这里都是精品| 成人欧美一区二区三区av| 日本韩国欧美一区二区在线| 很黄很刺激的视频中文字幕| 人妻中文字幕在线av| 久久婷婷国产综合精品青草|