最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++語言實(shí)現(xiàn)線性表之鏈表實(shí)例

 更新時(shí)間:2015年04月20日 11:21:48   作者:司青  
這篇文章主要介紹了C++語言實(shí)現(xiàn)線性表之鏈表,實(shí)例分析了C++實(shí)現(xiàn)線性表中鏈表的原理與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了C++語言實(shí)現(xiàn)線性表之鏈表實(shí)現(xiàn)方法。分享給大家供大家參考。具體分析如下:

插入、刪除結(jié)點(diǎn)的代碼有點(diǎn)多,但這樣提高了代碼的可讀性,且不增加時(shí)間復(fù)雜度,不會(huì)影響程序性能

#include <iostream>
using namespace std;
template<typename T>
class CList;
template<class T>
class Node
{
 friend CList<T>;
private:
 T m_data;
 Node *m_pNext;
};
template<class T>
class CList
{
public:
 CList();
 ~CList();
 bool IsEmpty();
 void Append(const T &data);
 void Delete(const int &pos);
 void Print();
 int GetLength();
 T Find(const int &pos);
 void Insert(const int &pos,const T &data);
private:
 Node<T> *m_pHead;
 Node<T> *m_pEnd;
 int m_len;
 void Create();
 void Destroy();
};
//為頭結(jié)點(diǎn)分配空間
template<class T>
void CList<T>::Create()
{
 m_pHead = new Node<T>;
 m_pEnd = new Node<T>;
 m_pHead->m_pNext = NULL;
 m_pEnd->m_pNext = m_pHead->m_pNext;
 m_len = 0;
}
template<class T>
CList<T>::CList()
{
 Create();
}
//刪除所有結(jié)點(diǎn)
template<class T>
void CList<T>::Destroy()
{
 Node<T> *pF = m_pHead->m_pNext;
 Node<T> *pT;
 while(pF)
 {
  pT = pF;
  pF = pF->m_pNext;
  delete pT;
 }
}
template<class T>
CList<T>::~CList()
{
 Destroy();
}
//判斷是否為空
template<class T>
bool CList<T>::IsEmpty()
{
 if(!m_pHead->m_pNext)
 {
  return true;
 }
 else
 {
  return false;
 }
}
//從表的最后加入一個(gè)元素
template<class T>
void CList<T>::Append(const T &data)
{
 Node<T> *pT = new Node<T>;
 pT->m_data = data;
 pT->m_pNext = NULL;
 if(!m_pHead->m_pNext)
 {
  m_pHead->m_pNext = pT;
 }
 else
 {
  (m_pEnd->m_pNext)->m_pNext = pT;
 }
 m_pEnd->m_pNext = pT;
 ++m_len;
}
//刪除一個(gè)元素
template<class T>
void CList<T>::Delete(const int &pos)
{
 if(pos < 0 || pos < m_len)
 {
  cout<<"位置不合法"<<endl;
  return;
 }
 Node<T> *pPre = NULL;//存放前一個(gè)結(jié)點(diǎn)
 Node<T> *pBehind = NULL;//存放后一個(gè)結(jié)點(diǎn)
 Node<T> *pT = m_pHead->m_pNext;//目標(biāo)結(jié)點(diǎn)
 int ix = -1;
 while(pT)
 {
  ++ix;
  if(ix == pos - 1 - 1)
  {
   pPre = pT;
  }
  else if(ix == pos - 1)
  {
   pBehind = pT->m_pNext;
   break;
  }
  pT = pT->m_pNext;
 }
 if(!pPre)//如果指針為空則說明pos是指第一個(gè)元素
 {
  delete pT;
  m_pHead->m_pNext = pBehind;
  --m_len;
  return;
 }
 if(!pBehind)//如果指針為空則說明pos是指最后一個(gè)元素
 {
  m_pEnd = pPre;
  delete pT;
 }
 pPre->m_pNext = pBehind;
 --m_len;
}
//輸出所有數(shù)據(jù)
template<class T>
void CList<T>::Print()
{
 Node<T> *pT = m_pHead->m_pNext;
 while(pT)
 {
  cout<<pT->m_data<<",";
  pT = pT->m_pNext;
 }
 cout<<endl;
}
template<class T>
int CList<T>::GetLength()
{
 return m_len;
}
//查找數(shù)據(jù)
template<class T>
T CList<T>::Find(const int &pos)
{
 if(pos <= 0)
 {
  cout<<"輸入不合法"<<endl;
  return NULL;
 }
 if(pos > m_len)
 {
  cout<<"超出表長(zhǎng)"<<endl;
  return NULL;
 }
 int i = 0;
 Node<T> *pT = m_pHead->m_pNext;
 while(pT)
 {
  ++i;
  if(i == pos)
  {
   return pT->m_data;
  }
  pT = pT->m_pNext;
 }
 return NULL;
}
template<class T>
void CList<T>::Insert(const int &pos,const T &data)
{
 if(pos <= 0 || pos >m_len)
 {
  cout<<"輸入不合法"<<endl;
  return;
 }
 int i = 0;
 Node<T> *pT = m_pHead->m_pNext;
 Node<T> *pPre = NULL;
 Node<T> *pBehind = NULL;
 while(pT)
 {
  ++i;
  if(i == pos - 1)
  {
   pPre = pT;
  }
  if(i == pos)
  {
   pBehind = pT->m_pNext;
   break;
  }
  pT = pT->m_pNext;
 }
 Node<T> *pNew = new Node<T>;
 pNew->m_data = data;
 if(!pPre)//如果指針為空則說明pos是指第一個(gè)元素
 {
  pNew->m_pNext = m_pHead->m_pNext;
  m_pHead->m_pNext = pNew;
  ++m_len;
  return;
 }
 if(!pBehind)//如果指針為空則說明pos是指最后一個(gè)元素
 {
  m_pEnd->m_pNext = pNew;
 }
 pPre->m_pNext = pNew;
 pNew->m_pNext = pT;
 ++m_len;
}

希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 詳解C++編程中的靜態(tài)成員與可變數(shù)據(jù)成員

    詳解C++編程中的靜態(tài)成員與可變數(shù)據(jù)成員

    這篇文章主要介紹了詳解C++編程中的靜態(tài)成員與可變數(shù)據(jù)成員,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • C++11 并發(fā)指南之std::thread 詳解

    C++11 并發(fā)指南之std::thread 詳解

    這篇文章主要介紹了C++11 并發(fā)指南之std::thread 詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++事件處理中__event與__raise關(guān)鍵字的用法講解

    C++事件處理中__event與__raise關(guān)鍵字的用法講解

    這篇文章主要介紹了C++事件處理中__event與__raise關(guān)鍵字的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • 深入解析C++的WNDCLASS結(jié)構(gòu)體及其在Windows中的應(yīng)用

    深入解析C++的WNDCLASS結(jié)構(gòu)體及其在Windows中的應(yīng)用

    這篇文章主要介紹了C++的WNDCLASS結(jié)構(gòu)體及其在Windows中的應(yīng)用,WNDCLASS被用來定義窗口,文中介紹了其諸多屬性,需要的朋友可以參考下
    2016-01-01
  • C++?Boost?Spirit進(jìn)階教程

    C++?Boost?Spirit進(jìn)階教程

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C語言實(shí)現(xiàn)簡(jiǎn)單五子棋游戲

    C語言實(shí)現(xiàn)簡(jiǎn)單五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡(jiǎn)單五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Qt實(shí)現(xiàn)簡(jiǎn)易時(shí)鐘

    Qt實(shí)現(xiàn)簡(jiǎn)易時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)簡(jiǎn)易時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言 指針與數(shù)組的詳解及區(qū)別

    C語言 指針與數(shù)組的詳解及區(qū)別

    這篇文章主要介紹了C語言 指針與數(shù)組的詳解及對(duì)比的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C++實(shí)現(xiàn)走迷宮小游戲

    C++實(shí)現(xiàn)走迷宮小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)走迷宮小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言超全面講解函數(shù)的使用方法下

    C語言超全面講解函數(shù)的使用方法下

    函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語句。每個(gè)?C?程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù),由于篇幅過大,分為兩篇講解,下面開始下篇
    2022-04-04

最新評(píng)論

邯郸市| 綦江县| 资源县| 龙游县| 濮阳县| 嘉峪关市| 龙里县| 九江市| 中方县| 水城县| 博乐市| 共和县| 汶上县| 高安市| 增城市| 浠水县| 淄博市| 韶山市| 齐齐哈尔市| 沙河市| 玛沁县| 开封县| 三门县| 高陵县| 乌什县| 南雄市| 股票| 日喀则市| 会宁县| 林芝县| 砀山县| 米泉市| 福安市| 凯里市| 台北县| 遂昌县| 襄城县| 广元市| 贡嘎县| 明溪县| 郎溪县|