C++ 模版類的單向鏈式線性表

來源:互聯網
上載者:User

標籤:c++   單鏈表   template   模版參數   代碼複用   


先上代碼!以後再仔細編輯!

標頭檔

<span style="font-size:18px;">#pragma oncetemplate<typename EleType>class ChainList{public:struct Node{EleType _data;Node* _next; Node(){ _next = nullptr; }Node(EleType data){ _data = data; _next = nullptr; }};ChainList();~ChainList();bool GetElem(EleType& e, int index=1)const;//得到List中第index個元素,把元素的_data賦給e;bool InsertElem(const EleType e, int index=1);//在List的第index個位置插入一個節點,節點的資料為ebool DeleteElem(EleType& e, int index = 1);//在List的第index個位置刪除一個節點,刪除節點的資料賦給ebool InsertHead(const EleType& e);//在頭部插入資料bool InsertTail(const EleType& e);//在尾部插入資料bool Clear();//清空Listvoid ShowList()const;//顯示List的所有元素的資料private:bool Empty()const;//判斷List是否為空白//在List中尋找第index個位置的節點,把該節點的地址賦給n,此處需傳入指標的引用,才能保證n可以被修改,不然只能保證*n可以被修改,也就是n指向的節點可以被修改bool Find(int index,Node*& n)const;bool CheckIndex(int index)const;//檢查List是否為空白,index是否合法Node* Head;//前端節點Node* Tail;//尾節點int Length;</span><pre name="code" class="cpp">
實現檔案.cpp


<span style="font-size:18px;"></span><pre name="code" class="cpp"><span style="font-size:18px;">#include "ChainList.h"#include <iostream>using namespace std;template<typename EleType>bool ChainList<EleType>::CheckIndex(int index) const{if (Empty()){cout << "Find: the List is Empty!\n";return false;}if (index<1 || index>Length){cout << "the index is invalid!\n";return false;}return true;}template<typename EleType>bool ChainList<EleType>::Find(int index,Node*& n)const//index [1,Length];{ if (CheckIndex(index)) {int i = 1;Node * temp = Head;while (i < index){temp = temp->_next;++i;}n = temp;return true;}return false;}template<typename EleType>void ChainList<EleType>::ShowList() const{Node * temp=nullptr ;if (Empty()){cout << "The list is empty!\n";}for (int i=1;i<=Length;++i){Find(i, temp);cout << temp->_data << " ";}cout << endl;  }template<typename EleType>bool ChainList<EleType>::Clear(){if (Empty()){return true;}else{while (Length){EleType m;DeleteElem(m);}return true;}}template<typename EleType>bool ChainList<EleType>::DeleteElem(EleType& e,int index=1 ){if (CheckIndex(index)){Node* temp = nullptr;Node* pre_temp = nullptr;if (Find(index, temp)){if (index == 1){Find(index + 1, Head);}else{if (index == Length){Find(index - 1, Tail);}else{Find(index - 1, pre_temp);pre_temp->_next = temp->_next;}}e = temp->_data;delete temp;--Length;return true;}return false;}return false;}template<typename EleType>bool ChainList<EleType>::InsertElem(const EleType e,int index ){Node *insertNode=new Node(e);  if (Empty()) { if (index < 1) return false; Head = Tail = insertNode; insertNode->_next = nullptr; ++Length; return true; }   if (index==1) { insertNode->_next = Head; Head = insertNode; ++Length; return true; } if (index==Length+1) { Tail->_next = insertNode; insertNode->_next = nullptr; Tail = insertNode; ++Length; return true; }Node  *temp=nullptr; if (Find(index-1,temp)) {   insertNode->_next = temp->_next; temp->_next = insertNode; ++Length;  return true; }  return false;}template<typename EleType>bool ChainList<EleType>::GetElem(EleType& e,int index) const{if (CheckIndex(index)){Node* temp = nullptr;if (Find(index, temp))e = temp->_data;return true;}return false;}template<typename EleType>ChainList<EleType>::~ChainList(){Clear();}template<typename EleType>ChainList<EleType>::ChainList() :Length(0), Head(nullptr), Tail(nullptr){ } template<typename EleType>bool ChainList<EleType>::Empty() const{return(Length==0);}template<typename EleType>bool ChainList<EleType>::InsertTail(const EleType& e){return InsertElem(e, Length + 1);}template<typename EleType>bool ChainList<EleType>::InsertHead(const EleType& e){return InsertElem(e);}</span>

};



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

C++ 模版類的單向鏈式線性表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.