欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

本文實(shí)例講述了C++語(yǔ)言實(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)//如果指針為空則說(shuō)明pos是指第一個(gè)元素
 {
  delete pT;
  m_pHead->m_pNext = pBehind;
  --m_len;
  return;
 }
 if(!pBehind)//如果指針為空則說(shuō)明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)//如果指針為空則說(shuō)明pos是指第一個(gè)元素
 {
  pNew->m_pNext = m_pHead->m_pNext;
  m_pHead->m_pNext = pNew;
  ++m_len;
  return;
 }
 if(!pBehind)//如果指針為空則說(shuō)明pos是指最后一個(gè)元素
 {
  m_pEnd->m_pNext = pNew;
 }
 pPre->m_pNext = pNew;
 pNew->m_pNext = pT;
 ++m_len;
}

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

相關(guān)文章

  • 淺談C++指針(必看)

    淺談C++指針(必看)

    下面小編就為大家?guī)?lái)一篇淺談C++指針(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • C指針原理教程之編譯原理-小型計(jì)算器實(shí)現(xiàn)

    C指針原理教程之編譯原理-小型計(jì)算器實(shí)現(xiàn)

    本文給大家分享的是如何使用C語(yǔ)言編寫一個(gè)小型計(jì)算器的實(shí)例代碼,有需要的小伙伴可以參考下
    2019-02-02
  • C++利用循環(huán)和棧實(shí)現(xiàn)走迷宮

    C++利用循環(huán)和棧實(shí)現(xiàn)走迷宮

    這篇文章主要為大家詳細(xì)介紹了C++利用循環(huán)和棧實(shí)現(xiàn)走迷宮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 淺析C語(yǔ)言中的sizeof

    淺析C語(yǔ)言中的sizeof

    sizeof是C/C++中的一個(gè)操作符(operator),作用就是返回一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù)。返回值類型為size_t,在頭文件stddef.h中定義
    2013-07-07
  • C++多文件變量解析

    C++多文件變量解析

    大家注意不要在頭文件中定義變量,在頭文件中聲明變量。定義放在對(duì)應(yīng)的源文件中。其他地方只能用extern聲明
    2013-10-10
  • 基于C++的攝像頭圖像采集及拼接程序的簡(jiǎn)單實(shí)現(xiàn)

    基于C++的攝像頭圖像采集及拼接程序的簡(jiǎn)單實(shí)現(xiàn)

    本程序是在?ubuntu14.04?平臺(tái)下實(shí)現(xiàn)的,在本項(xiàng)目目錄下,已經(jīng)有編譯生成的可執(zhí)行程序,其中Camera_to_Frmae.cpp是我們從雙攝像頭實(shí)時(shí)抓取單幀圖像的源碼,對(duì)基于C++的攝像頭圖像采集及拼接程序的實(shí)現(xiàn)感興趣的朋友一起看看吧
    2022-01-01
  • OpenCV圖像旋轉(zhuǎn)Rotate的詳細(xì)介紹

    OpenCV圖像旋轉(zhuǎn)Rotate的詳細(xì)介紹

    這篇文章主要介紹了OpenCV圖像旋轉(zhuǎn)Rotate,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C語(yǔ)言圣誕樹(shù)的實(shí)現(xiàn)示例

    C語(yǔ)言圣誕樹(shù)的實(shí)現(xiàn)示例

    本篇主要介紹了C語(yǔ)言圣誕樹(shù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 用C語(yǔ)言如何打印一個(gè)等腰三角形

    用C語(yǔ)言如何打印一個(gè)等腰三角形

    這篇文章主要介紹了用C語(yǔ)言如何打印一個(gè)等腰三角形,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++編程中指針的聲明與基本使用講解

    C++編程中指針的聲明與基本使用講解

    這篇文章主要介紹了詳解C++編程中C++編程中指針的聲明與基本使用講解,文中舉了簡(jiǎn)單的例子來(lái)講如何在基本的數(shù)據(jù)結(jié)構(gòu)中使用指針,以及固定和可變指針的介紹,需要的朋友可以參考下
    2016-01-01

最新評(píng)論