亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sinlist.hpp

?? 該源碼實現二叉樹的模擬
?? HPP
字號:
//////////////////////////////////////////////////////////////////////////
// CSinList.h
// Author : sc
// Date : 2008/10/20

#ifndef _SinList_H_
#define _SinList_H_

#include "ListNode.hpp"

template <class T>
class CSinList
{
	public:
		CSinList();
		~CSinList();

		int GetCount(void) const;							//


		T GetTail(void) const;								//
		T GetAt(int nIndex) const;							//
		T GetHead(void) const;								//

		T PopHead(void);									//
		T PopTail(void);									//

		T PushHead(T& srcData);								//
		T PushTail(T& srcData);								//

		T InsertAt(T& srcData, int nIndex);					//
		int Find(T& srcData, int nStartPos = 0, int nIncSize = 1) const;

		void RemoveAll(void);

	protected:
		CListNode<T>* MovePtrTo(int nIndex) const;			//


	private:
		CListNode<T>*	m_Head;
		CListNode<T>*	m_Tail;
		int				m_NodeCount;
		
};

template <class T>
CSinList<T>::CSinList()
{
	m_Tail = NULL;
	m_Head = NULL;

	m_NodeCount = 0;
}

template <class T>
CSinList<T>::~CSinList()
{
	RemoveAll();
}

template <class T>
int CSinList<T>::GetCount(void) const
{
	return m_NodeCount;
}


template <class T>
T CSinList<T>::PushHead(T& srcData)
{
	if(m_NodeCount == 0)
	{
		m_Head = new CListNode<T>(srcData);
		m_Tail = m_Head;
		m_NodeCount++;
	}
	else
	{
		CListNode<T>* pTmpNode = new CListNode<T>(srcData);
		pTmpNode->m_Next = m_Head;
		m_Head = pTmpNode;
		m_NodeCount ++;
	}
	return m_Head->m_Data;
}

template <class T>
T CSinList<T>::PushTail(T& srcData)
{
	if(m_NodeCount == 0)
	{
		m_Head = new CListNode<T>(srcData);
		m_Tail = m_Head;
		m_NodeCount++;

		return m_Tail->m_Data;
	}

	else
	{
		m_Tail->m_Next = new CListNode<T>(srcData);
		m_Tail = m_Tail->m_Next;

		m_NodeCount ++;
		return m_Tail->m_Data;
	}
}


template <class T>
T CSinList<T>::GetHead() const
{
	if(m_NodeCount == 0)
		throw "Invalide argument";
	return m_Head->m_Data;
}

template <class T>
T CSinList<T>::GetTail() const
{
	if(m_NodeCount == 0)
		throw "Invalide argument";
	return m_Tail->m_Data;
}

//////////////////////////////////////////////////////////////////////////
// GetAt(int nIndex)
template <class T>
T CSinList<T>::GetAt(int nIndex) const
{
	if(nIndex < 0 || nIndex > m_NodeCount)
		throw "Invalide argument";
	CListNode<T>* pTmpNode;
	pTmpNode = m_Head;

	for(int i = 0; i < nIndex; i++)
	{
		pTmpNode = pTmpNode->m_Next;		
	}
	return pTmpNode->m_Data;
}

//////////////////////////////////////////////////////////////////////////
// RemoveAll(void)

template <class T>
void CSinList<T>::RemoveAll(void)
{
	CListNode<T>* pTmpNode = m_Head;
	CListNode<T>* pIterative = NULL;

	
	for(int nCirTmp = 0; nCirTmp < m_NodeCount; nCirTmp++)
	{
		pIterative = pTmpNode;
		pTmpNode = pTmpNode->m_Next;		
		
		delete pIterative;
	}
	m_Head = NULL;
	m_Tail = NULL;
	m_NodeCount = 0;
}

//////////////////////////////////////////////////////////////////////////
// popHead(void)
template <class T>
T CSinList<T>::PopHead(void)
{
	T tmpData = m_Head->m_Data;
	CListNode<T>* pTmp = m_Head;

	if(m_NodeCount == 0)
		throw "Invalide argument";
	m_Head = m_Head->m_Next;

	delete pTmp;

	m_NodeCount--;
	return tmpData;
}

//////////////////////////////////////////////////////////////////////////
// popTail(void)
template <class T>
T CSinList<T>::PopTail(void)
{
	T retData = m_Tail->m_Data;

	if(m_NodeCount == 0)
		throw "Invalide argument";

	if(m_NodeCount == 1)
	{
		delete m_Head;

		m_Head = m_Tail = NULL;
		m_NodeCount --;

		return retData;
	}

	CListNode<T>* pTmpNode = m_Head;
	for(int nCirTmp = 0; nCirTmp < m_NodeCount - 2; nCirTmp++)
	{
		pTmpNode = pTmpNode->m_Next;
	}
	m_Tail = pTmpNode;
	pTmpNode = pTmpNode->m_Next;
	m_NodeCount --;
	delete pTmpNode;

	return retData;
}

//////////////////////////////////////////////////////////////////////////
// InsertAt(T& srcData, int nIndex)
// All the element seems to move once to the next positon, this means you should
// not insert at the tail of the list
// remark : if you want to insert at the tail of the list
// you should not call this function , you should call
// pushTail() instead
template <class T>
T CSinList<T>::InsertAt(T& srcData, int nIndex)
{
	if(nIndex < 0 || nIndex > m_NodeCount)
		throw "Invalide argument";

	if(nIndex == 0)
	{
		PushHead(srcData);
	}
	else if(nIndex == m_NodeCount)
	{
		PushTail(srcData);
	}

	else
	{
		CListNode<T>* pInsertBefor = MovePtrTo(nIndex - 1);
		CListNode<T>* pInsertAfter = pInsertBefor->m_Next;

		CListNode<T>* pTmpNewNode = new CListNode<T>(srcData);
		pInsertBefor->m_Next = pTmpNewNode;
		pTmpNewNode->m_Next= pInsertAfter; 

		m_NodeCount++;
	}

	return srcData;
}

//////////////////////////////////////////////////////////////////////////
// MovePtrTo(int nIndex)   nIndex should be treated as the sub label
//

template <class T>
CListNode<T>* CSinList<T>::MovePtrTo(int nIndex) const
{
	if(nIndex < 0 || nIndex >= m_NodeCount)
		throw "Invalide argument";

	CListNode<T>* pTmpNodePtr = m_Head;
	for(int nCirTmp = 0; nCirTmp < nIndex; nCirTmp++)
	{
		pTmpNodePtr = pTmpNodePtr->m_Next;
	}
	
	return pTmpNodePtr;
}

template <class T>
int CSinList<T>::Find(T& srcData, int nStartPos /* = 0 */, int nIncSize /* = 1 */) const
{
	for(int nCirTmp = nStartPos; nCirTmp < m_NodeCount; nCirTmp += nIncSize)
	{
		if(GetAt(nCirTmp) == srcData)
			return nCirTmp;
	}
	return -1;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区四区五区| a级精品国产片在线观看| 国产精品久久久久久久久快鸭| 欧美日韩国产小视频| 国产精品一二三四五| 蜜臀av一级做a爰片久久| 国产精品国产三级国产aⅴ入口 | 日本乱人伦aⅴ精品| 激情文学综合网| 男女男精品网站| 青娱乐精品视频| 蜜臀精品一区二区三区在线观看 | 欧美中文字幕一区| 成a人片亚洲日本久久| 日韩黄色小视频| 日韩电影免费在线看| 午夜欧美视频在线观看| 亚洲第一成人在线| 五月婷婷激情综合网| 亚洲综合一区二区三区| 久久久www成人免费毛片麻豆| 日韩久久精品一区| 精品国产乱子伦一区| 91久久精品一区二区三| 在线精品视频一区二区三四 | 精品免费国产一区二区三区四区| 欧美一区二区三区免费在线看| 欧美一区二区三区四区在线观看| 日韩久久精品一区| 国产欧美va欧美不卡在线| 国产精品热久久久久夜色精品三区| 欧美高清性hdvideosex| 精品久久久久久综合日本欧美| 欧美精品一区二区三区视频| 久久久久久久久久久电影| 国产日本一区二区| 国产精品久久久久久亚洲伦| 亚洲日本中文字幕区| 一区二区三区中文字幕电影| 一区二区三区久久久| 日韩av中文字幕一区二区三区| 老色鬼精品视频在线观看播放| 国产精品亚洲一区二区三区在线| www.日本不卡| 制服丝袜激情欧洲亚洲| 久久精品人人做| 亚洲综合色丁香婷婷六月图片| 日韩影院免费视频| 国产酒店精品激情| 色av成人天堂桃色av| 日韩精品最新网址| 亚洲人成在线播放网站岛国| 全国精品久久少妇| 成人综合在线网站| 欧美精品国产精品| 国产精品视频看| 天天综合天天做天天综合| 国产精品自在欧美一区| 欧美色手机在线观看| 日韩欧美的一区| 亚洲精品大片www| 国产在线播精品第三| 色综合激情久久| 久久―日本道色综合久久| 亚洲午夜免费视频| 国内精品国产成人| 4438x亚洲最大成人网| 中文字幕日韩一区| 麻豆成人91精品二区三区| 91视频你懂的| 久久你懂得1024| 蜜桃一区二区三区在线观看| 欧美亚洲动漫精品| 国产精品美日韩| 日韩国产一二三区| 欧美丝袜自拍制服另类| 国产精品免费av| 国产精品69久久久久水密桃| 日韩午夜精品电影| 婷婷成人激情在线网| 欧美午夜视频网站| 亚洲精品你懂的| 99精品国产视频| 国产精品女主播在线观看| 精品在线观看视频| 不卡的av电影在线观看| 久久网这里都是精品| 蜜桃精品在线观看| 色一区在线观看| 国产精品电影一区二区三区| 国产69精品久久久久毛片| 精品入口麻豆88视频| 日韩电影一区二区三区四区| 欧美日韩久久一区| 一区二区高清视频在线观看| 99久久综合99久久综合网站| 国产精品看片你懂得| 成av人片一区二区| 亚洲色图欧洲色图| 在线看一区二区| 婷婷中文字幕综合| 欧美色中文字幕| 午夜精品福利视频网站| 91精品国产91久久综合桃花| 久久精品国产在热久久| 精品电影一区二区| 国产精品自拍在线| 精品国产一区二区在线观看| 国产一区福利在线| 国产精品乱码一区二区三区软件 | 极品销魂美女一区二区三区| 精品国偷自产国产一区| 国产福利一区二区三区视频在线 | 欧美色中文字幕| 国产精品1区2区| 日韩精品成人一区二区三区| 国产精品久久久久久久久晋中 | 欧美国产禁国产网站cc| 这里只有精品免费| 99热这里都是精品| 狠狠色丁香九九婷婷综合五月| 亚洲人成网站在线| 国产欧美日本一区视频| 91精品国产aⅴ一区二区| 91久久国产综合久久| 国产成人免费视频精品含羞草妖精| 亚洲国产视频一区二区| 国产精品久久久久三级| 精品国产污污免费网站入口 | 一区二区三区美女| 国产精品久久午夜夜伦鲁鲁| 精品国产露脸精彩对白| 欧美日韩免费观看一区三区| 91网站视频在线观看| 国产成人精品综合在线观看| 青草国产精品久久久久久| 夜夜操天天操亚洲| 亚洲欧美日韩国产手机在线| 国产女主播在线一区二区| 久久久久免费观看| 欧美成人bangbros| 91精品国产色综合久久不卡电影| 日本乱人伦aⅴ精品| 91亚洲精华国产精华精华液| 国产激情精品久久久第一区二区 | 欧美亚洲图片小说| 91丨porny丨中文| 成人av免费在线播放| 国产精品影音先锋| 国产福利精品一区二区| 国产一区二区中文字幕| 国产在线精品国自产拍免费| 国产自产2019最新不卡| 激情图片小说一区| 国产在线精品一区二区三区不卡| 久久国产精品露脸对白| 麻豆精品在线观看| 久久国产日韩欧美精品| 国产精品亚洲人在线观看| 国产精品99久久久久| 不卡视频一二三| 91蝌蚪porny| 欧美日韩在线一区二区| 在线电影一区二区三区| 欧美va日韩va| 欧美—级在线免费片| 日韩美女精品在线| 一区二区三区欧美日| 午夜电影网亚洲视频| 国产综合色产在线精品| 成人18视频在线播放| 欧美色图在线观看| 精品国产乱码久久久久久蜜臀| 国产三级精品视频| 亚洲伦理在线精品| 日韩精品久久理论片| 国产裸体歌舞团一区二区| 色综合天天视频在线观看 | 2023国产精品| 悠悠色在线精品| 蜜臀av性久久久久蜜臀av麻豆| 国产精品一区二区男女羞羞无遮挡| 99久久伊人精品| 欧美一区二区三区不卡| 国产婷婷色一区二区三区四区| 亚洲免费视频成人| 久久精品国产精品亚洲红杏| 成人久久18免费网站麻豆 | 一区二区三区国产精品| 久久电影网站中文字幕| gogogo免费视频观看亚洲一| 欧美精品丝袜中出| 国产日韩欧美一区二区三区乱码| 亚洲午夜久久久久久久久电影网| 久久99久久久久| 在线免费不卡视频| 欧美激情在线一区二区三区| 视频一区国产视频| 97se狠狠狠综合亚洲狠狠| 欧美大片顶级少妇|