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

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

?? 模板鏈表_02b.h

?? 模板鏈表的類定義
?? H
字號:
//EXAMPLE9_02B.H
#ifndef EXAMPLE9_02B_H
#define EXAMPLE9_02B_H
#include <iostream>
#include "EXAMPLE9_02.H"
//結點類帶參數構造函數的實現
using namespace std;
template<class T>
ListNode<T>::ListNode(const T& nItem, ListNode<T> *ptrNext):
Data(nItem),ptrNext(ptrNext)
{}

//返回指向后續結點的指針
template<class T>
ListNode<T> *ListNode<T>::NextListNode() const
{
      return ptrNext;
}

template<class T>
void ListNode<T>::InsertAfter(ListNode<T> *ptr)
{
      ptr->ptrNext=ptrNext;     //將ptr的ptrNext指針指向本結點的后續結點
      ptrNext=ptr;//本結點的ptrNext指針指向ptr
}

template<class T>
ListNode<T> *ListNode<T>::DeleteAfter()
{
      ListNode<T> *ptrTemp=ptrNext;
      if(ptrNext==NULL)     //處理本結點為尾結點時的情況
            return NULL;
      ptrNext=ptrTemp->ptrNext;    //一般情況
      return ptrTemp;
}

//鏈表類構造函數,4個私有指針成員設置為空,鏈表初始長度設置為0,初始當前結點
//初始位置為-1
template<class T>
LinkedList<T>::LinkedList(void):ptrFront(NULL),ptrTail(NULL),
                  ptrPrev(NULL),ptrCurr(NULL),nListLength(0),nPosition(-1)
{ }

//重載"="號運算符
template<class T>
LinkedList<T>& LinkedList<T>::operator=(const LinkedList<T>& list)
{
	if(this!=&list)
      {
            DeleteAll();
            CopyList(list);
      }

      return *this;
}

//拷貝構造函數
template<class T>
LinkedList<T>::LinkedList(const LinkedList<T>& list)
{
      CopyList(list);
}

//重新設置當前指針的位置
template<class T>
void LinkedList<T>::Reset(int nPos)
{
      int nStartPos;
	  if(!ptrFront)        //如果當前指針為空,鏈表為空直接返回
      {
            return;
      }
      if(nPos>=nListLength||nPos<0)      //位置越界檢查
      {
            cerr<<"Invalid Position!"<<endl;
            return;
      }
      if(nPos==0)        //置當前指針為頭結點
      {
            ptrPrev=NULL;
            ptrCurr=ptrFront;
            nPosition=0;
      }
      else       //一般情況
      {
            ptrCurr=ptrFront->NextListNode();
            ptrPrev=ptrFront;
            nStartPos=1;
            for(nPosition=nStartPos;nPosition!=nPos;nPosition++)
                                             //尋找該位置并使當前指針指向該位置
											 {
                  ptrPrev=ptrCurr;
                  ptrCurr=ptrCurr->NextListNode();
            }
      }
}

//當前指針指向當前結點的后續結點
template<class T>
void LinkedList<T>::Next()
{
      if(ptrCurr)
      {
            ptrPrev=ptrCurr;
            ptrCurr=ptrCurr->NextListNode();
            nPosition++;
      }
}

//將數據為nItem的結點插入到鏈表頭
template<class T>
void LinkedList<T>::InsertFront(const T& nItem)
{
      ListNode<T> *newListNode=GetListNode(nItem);  //獲得一個封裝有該數據
						        //的結點
      newListNode->SetNext(ptrFront);
      ptrFront=newListNode;
      nListLength++;
}

//將數據為nItem的結點插入到鏈表尾
template<class T>
void LinkedList<T>::InsertTail(const T& nItem)
{
      ListNode<T> *newListNode;

      if(ptrCurr==NULL) InsertFront(nItem);   //若鏈表為空,使之成為頭結點
					       //(也是尾結點)
      else    //一般情況
      {
            while(ptrCurr->NextListNode())     //尋找尾結點
                  ptrCurr=ptrCurr->NextListNode();
			newListNode=GetListNode(nItem);
            ptrCurr->InsertAfter(newListNode);
      }
}

//將數據為nItem的結點插入到鏈表的當前位置之前
template<class T>
void LinkedList<T>::InsertAt(const T& nItem)
{
      ListNode<T> *newListNode;

      if(!ptrPrev)    //插入到頭結點
      {
            newListNode=GetListNode(nItem,ptrFront);
            newListNode->SetNext(ptrFront);
            ptrFront=newListNode;
                  
            nListLength++;
      }
      else          //一般情況
      {	
		  newListNode=GetListNode(nItem);
          ptrPrev->InsertAfter(newListNode);

      }
      if(ptrPrev==ptrTail)
      {
            ptrTail=newListNode;
            nPosition=nListLength;
      }
      ptrCurr=newListNode;
      
}

//將數據為nItem的結點插入到鏈表當前結點之后
template<class T>
void LinkedList<T>::InsertAfter(const T& nItem)
{
      ListNode<T> *newListNode;

      if(!ptrCurr)        //處理空鏈表的情況,如果當前鏈表為空
      {
		  newListNode=GetListNode(nItem);
            ptrCurr=newListNode;
            ptrFront=ptrCurr;
      }
      else     //一般情況
      {    
            newListNode=GetListNode(nItem);
            ptrCurr->InsertAfter(newListNode);
      }
      if(ptrPrev==ptrTail)
      {
            ptrTail=newListNode;
            nPosition=nListLength;
      }
      ptrCurr=newListNode;
      nListLength++;
}

//刪除鏈表中的當前結點
template<class T>
void LinkedList<T>::DeleteCurr()
{
      ListNode<T> *ptr;
      if(!ptrCurr)    //處理空鏈表的情況
      {
            cerr<<"The List is empty!"<<endl;
            exit(1);
      }
      if(!ptrPrev)    //刪除頭結點的情況
      {
            ptr=ptrFront;
            ptrFront=ptrFront->NextListNode();
      }
      else    //一般情況
	  {ptr=ptrPrev->DeleteAfter();}
      if(ptr==ptrTail)
      {
            ptrTail=ptrPrev;
            nPosition--;
      }
      ptrCurr=ptr->NextListNode();
      FreeListNode(ptr);
	  nListLength--;
}

//刪除鏈表中所有結點并釋放資源
template<class T>
void LinkedList<T>::DeleteAll()
{
      ListNode<T> *ptrCurrPos,
                    *ptrNextPos;

      ptrCurrPos=ptrFront;
      while(ptrCurrPos)        //循環處理刪除鏈表中的各個結點
      {
            ptrNextPos=ptrCurrPos->NextListNode();
            FreeListNode(ptrCurrPos);
            ptrCurrPos=ptrNextPos;
      }
      ptrFront=NULL;
      ptrTail=NULL;
      ptrPrev=NULL;
      ptrCurr=NULL;
	  nListLength=0;
      nPosition=-1;
}

//刪除鏈表的頭結點
template<class T>
int LinkedList<T>::DeleteHead()
{
      ListNode<T> *ptr=ptrFront;
      if(ptrFront)
      {
            ptrFront=ptrFront->NextListNode();
            delete ptr;
      nListLength--;
      return 1;
      }
      else           //處理鏈表為空的情況
      {
            cout<<"The List is empty!"<<endl;
            return 0;
      }
}
//獲得鏈表中當前結點的數據
template<class T>
T& LinkedList<T>::GetData()
{
      if(nListLength==0||!ptrCurr)        //空鏈表的處理
      {
            cerr<<"Invalid!"<<endl;
            exit(1);
      }

      return ptrCurr->ShowData();
}

//逐項拷貝鏈表中的各個結點
template<class T>
void LinkedList<T>::CopyList(const LinkedList<T> &list)
{
      ListNode<T> *ptr=list.ptrFront;
      ptrCurr=NULL;

      while(ptr)      //遍歷list并創建新鏈表
		  {
            InsertAfter(ptr->ShowData());
            ptr=ptr->NextListNode();
      }

      if(nPosition==-1)      //list為空
            return;

      ptrPrev=NULL;
      ptrCurr=ptrFront;

      for(int nPos=0;nPos!=list.CurrPosition();nPos++)
                             //將新鏈表的各個數據成員設置與原鏈表相同
      {
            ptrPrev=ptrCurr;
            ptrCurr=ptrCurr->NextListNode();
      }
      nPosition=nPos;
      nListLength=list.ListLength();
}			
//獲得下一個新結點,返回新結點地址
template<class T>
ListNode<T> *LinkedList<T>::GetListNode(const T& nItem, ListNode<T> *preNext)
{
      ListNode<T> *newListNode;
      newListNode=new ListNode<T>(nItem,preNext);
      if(!newListNode)
      {
            cerr<<"Memory allocation failure!"<<endl;
            exit(1);
      }
      return newListNode;
}

//輸出鏈表中的各個結點數據
template<class T>
void LinkedList<T>::DisplayList()
{
	ListNode<T> *p;
      p=ptrFront;
      cout<<endl<<"(";
	  while(p)        //遍歷鏈表
      {
            cout<<p->ShowData()<<",";	
			p=p->NextListNode();
      }
	  cout<<")"<<endl;
}

//在鏈表中查找數據
template<class T>
int LinkedList<T>::Find(T& nItem)
{
      ptrCurr=ptrFront;
      ptrPrev=NULL;
      while(ptrCurr)
      {
            if(ptrCurr->ShowData()==nItem)
                  return 1;
            ptrPrev=ptrCurr;
            ptrCurr=ptrCurr->NextListNode();
			nPosition++;                      //控制當前指針位置
      }
      return 0;
}

//刪除鏈表中滿足條件的結點
template<class T>
void LinkedList<T>::Delete(T key)
{
      ptrCurr=ptrFront;
      ptrPrev=NULL;
      if(!ptrCurr)
            return;
      while(ptrCurr&&ptrCurr->ShowData()!=key)      //查找相應的結點
      {
            ptrPrev=ptrCurr;
            ptrCurr=ptrCurr->NextListNode();
            nPosition++;
      }

      if(ptrCurr)      //如果找到該結點,刪除它
      {
            if(!ptrPrev) ptrFront=ptrFront->NextListNode();
            else ptrPrev->DeleteAfter();
            delete ptrCurr;
      }
}

template<class T>
void LinkedList<T>::InsertOrder(T nItem)
{
      ListNode<T> *newListNode,
                    *next,         //用于遍歷鏈表
                      *prev;      //next指向結點的前一個結點的指針
      ptrPrev=NULL;
      ptrCurr=ptrFront;
      prev=ptrCurr;
      next=ptrCurr->NextListNode();

      while(prev->ShowData()==next->ShowData()&&(next))
                                  //判斷原鏈表的排序方式,升序或者降序
      {
            prev=next;
            next=next->NextListNode();
      }

    if(!next) InsertFront(nItem);        //如果原鏈表中所有結點均相等,則將結點
				//作為原鏈表的首結點
      else if(prev->ShowData()>next->ShowData())  //降序排列時
      {
		  while(ptrCurr)            //尋找插入位置
            {
                  if(nItem>=ptrCurr->ShowData()) break;
                  ptrPrev=ptrCurr;
                  ptrCurr=ptrCurr->NextListNode();
            }

            if(!ptrPrev) InsertFront(nItem);
            else
            {
                  newListNode=GetListNode(nItem);
                  ptrPrev->InsertAfter(newListNode);
            }
      }
      else     //升序排列時
      {
            while(ptrCurr)    //尋找插入位置
            {
                  if(nItem<=ptrCurr->ShowData()) break;
                  ptrPrev=ptrCurr;
                  ptrCurr=ptrCurr->NextListNode();
            }
			            if(!ptrPrev) InsertFront(nItem);
            else
            {
                  newListNode=GetListNode(nItem);
                  ptrPrev->InsertAfter(newListNode);
            }
      }

}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久久网| 日韩午夜在线影院| 欧美激情一区三区| 国产成人免费在线观看| 国产精品视频你懂的| 成人午夜精品一区二区三区| 中文字幕五月欧美| 欧美日韩中文一区| 久久精品噜噜噜成人av农村| 国产精品91xxx| 中文字幕欧美三区| 中文字幕第一区综合| 久久久久久夜精品精品免费| 国产露脸91国语对白| 久久久精品人体av艺术| 99久久国产免费看| 亚洲777理论| 精品电影一区二区三区 | 91麻豆精品国产91久久久久久久久| 亚洲成av人片一区二区梦乃| 精品少妇一区二区| 成人av电影免费观看| 亚洲高清中文字幕| www激情久久| 欧美在线视频日韩| 国产精品影视在线观看| 亚洲欧洲av另类| 欧美一区二区黄色| 成人av网在线| 美女任你摸久久| 亚洲欧美偷拍另类a∨色屁股| 欧美日韩在线三区| 成人午夜免费视频| 国产麻豆日韩欧美久久| 欧美一区二区日韩一区二区| 成人午夜电影网站| 国产精品系列在线播放| 亚洲视频免费看| 日韩一区二区三区高清免费看看| 成+人+亚洲+综合天堂| 日本成人在线电影网| 国产精品久久影院| 成人永久免费视频| 精品三级在线观看| 性感美女久久精品| 国产成人精品一区二| 欧美在线影院一区二区| 日韩1区2区日韩1区2区| 亚洲激情在线激情| 伦理电影国产精品| 成人激情免费视频| 久久精品国产亚洲a| 国产日韩欧美不卡在线| 国产91高潮流白浆在线麻豆| 欧美亚洲综合另类| 懂色av中文字幕一区二区三区| 午夜天堂影视香蕉久久| 一区二区三区高清在线| 欧美一二三在线| 婷婷综合另类小说色区| k8久久久一区二区三区| 久久精品亚洲精品国产欧美kt∨| 日韩国产精品久久久| 2020国产精品久久精品美国| 日韩黄色免费网站| 精品福利一二区| 天天操天天干天天综合网| 国产精品不卡在线观看| 色婷婷精品久久二区二区蜜臀av | www.欧美日韩国产在线| 精品三级在线观看| 亚洲国产成人tv| 国产福利不卡视频| 国产精品沙发午睡系列990531| 蜜臀久久久久久久| 国产欧美精品区一区二区三区| 国产一区二区三区在线观看免费视频 | 丁香婷婷综合网| 91精品欧美综合在线观看最新| 一区二区在线电影| 欧美午夜精品一区二区蜜桃 | 久久久亚洲午夜电影| 久久精品99国产精品日本| 日韩免费观看2025年上映的电影| 日韩中文字幕不卡| 欧美大尺度电影在线| 不卡的av电影| 精品一区二区三区不卡 | 亚洲三级在线看| 色婷婷国产精品综合在线观看| 美腿丝袜在线亚洲一区| 国产精品日日摸夜夜摸av| 成人丝袜18视频在线观看| 亚洲一区二区欧美| 亚洲国产成人午夜在线一区| 欧美国产精品一区| 久久麻豆一区二区| 国产精品久久久久久久浪潮网站| 欧美国产精品中文字幕| 一区二区三区视频在线看| 伊人夜夜躁av伊人久久| 日韩国产精品久久| 久久99精品久久久久久国产越南 | 国产日韩综合av| 亚洲天堂2016| 亚洲国产乱码最新视频| 精品一区二区三区蜜桃| 丁香婷婷综合网| 欧美日韩亚洲综合在线| 日韩视频在线观看一区二区| 日韩视频免费观看高清完整版| 欧美zozo另类异族| 国产视频一区二区三区在线观看| 欧美经典三级视频一区二区三区| 国产欧美一区二区精品性 | 欧美日韩三级一区| 日韩午夜激情免费电影| wwwwxxxxx欧美| 久久精品男人的天堂| 18欧美乱大交hd1984| 中文字幕中文在线不卡住| 五月婷婷激情综合网| 日韩中文字幕1| 91在线小视频| 欧美色大人视频| 国产日韩欧美高清在线| 久久综合丝袜日本网| 亚洲国产sm捆绑调教视频| 一区二区三区av电影| 欧美日韩国产首页在线观看| 亚洲国产美女搞黄色| 成人动漫在线一区| 欧洲另类一二三四区| 91.xcao| 日本一二三四高清不卡| 三级成人在线视频| 色又黄又爽网站www久久| 国产91精品在线观看| 亚洲欧美欧美一区二区三区| 欧美一区二区三区男人的天堂| 欧美精品久久99| 国产精品久久久久久久久晋中| 亚洲成人在线免费| 97精品超碰一区二区三区| av动漫一区二区| 久久久综合网站| 亚洲国产精品麻豆| 色呦呦日韩精品| 久久夜色精品国产欧美乱极品| 日韩精品欧美成人高清一区二区| 国产99久久久精品| 久久综合久久综合久久综合| 亚洲国产精品人人做人人爽| 成人性生交大片免费看中文 | 成人动漫精品一区二区| 欧美日韩国产精选| 国产精品国产自产拍高清av王其| 久久99精品国产91久久来源| 欧美性生交片4| 亚洲激情图片小说视频| 国产成人一区二区精品非洲| 精品久久久久久久久久久久久久久 | 亚洲色图清纯唯美| 成人国产精品免费网站| 欧美岛国在线观看| 麻豆精品一区二区综合av| 欧美午夜影院一区| 亚洲国产日韩综合久久精品| 成人a免费在线看| 国产精品久久久久久久岛一牛影视| 久久国内精品自在自线400部| 日韩一级免费一区| 午夜免费久久看| 91精品国产综合久久蜜臀| 亚洲在线中文字幕| 777xxx欧美| 午夜精品久久久久久不卡8050| 欧美特级限制片免费在线观看| 国产精品乱码久久久久久| 99热这里都是精品| 久久久不卡网国产精品一区| 成人自拍视频在线| 日韩欧美高清在线| 国产夫妻精品视频| 欧美一区二区三区人| 中文字幕视频一区| 色一区在线观看| 一区二区欧美国产| 欧美午夜影院一区| 婷婷综合另类小说色区| 欧美日韩美少妇| 亚洲成人在线网站| 日韩一级完整毛片| 国产一区二区在线观看视频| 国产精品美女一区二区| 91免费国产视频网站| 丝瓜av网站精品一区二区| 欧美一区二视频| 高清av一区二区| 中文字幕成人网|