程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ 模板類 單鏈表

c++ 模板類 單鏈表

編輯:C++入門知識

c++ 模板類 單鏈表


#pragma once//函數文件
 
#include<iostream>
#include<string>
#include<assert.h>
 
using namespace std;
 
template<class DataType >
 
//  節點  
class ListNode
{
public:
    DataType _data;
    ListNode* _next;
    ListNode(const DataType& x);
    ~ListNode();
 
};
template<class DataType >
 
ListNode<DataType>::ListNode(const DataType& x)
    :_data(x)
    ,_next(NULL)
{}
 
template<class DataType >
 
ListNode<DataType>::~ListNode()
{
}
 
// 單鏈表操作
 
template<class DataType >
class LinkList 
{
private:
    ListNode<DataType>* _pHead;
    ListNode<DataType>* _pTail;
    size_t _size;
public:
    LinkList();
    LinkList(const LinkList& tmp);
    ~LinkList();
 
    void PushBack(const DataType& data);
    void PopBack();
    void operator=(const LinkList& tmp);
    void Display();
};
 
template<class DataType>
 
LinkList<DataType>::LinkList()
 
    : _size(0)
    , _pHead(NULL)
    , _pTail(NULL)
{}
 
template<class DataType>
 
LinkList<DataType>::LinkList(const LinkList& tmp)
    :_size(tmp._size)
    , _pHead(NULL)
    , _pTail(NULL)
{
    ListNode<DataType>* head = tmp._pHead;
 
    while (head)
    {
        PushBack(head->_data);
        head = head->_next;
    }
}
 
template<class DataType>
 
LinkList<DataType>::~LinkList()
{
}
 
template<class DataType>
 
void LinkList<DataType>::PushBack(const DataType& data)
{
    if (_pHead == NULL)
    {
        _pHead = new ListNode<DataType>(data);
        _pTail = _pHead;
    }
    else
    {
         
        _pTail->_next = new ListNode<DataType>(data);
        _pTail = _pTail->_next;
    }
    ++_size;
}
 
template<class DataType>
 
void LinkList<DataType>::PopBack()
{
    if (_pHead == _pTail)
    {
        if (_pHead != NULL)
        {
            delete _pHead;
            _pHead = NULL;
            _pTail = NULL;
        }
    }
    else
    {
        ListNode<DataType>* tmp = _pHead;
        while (tmp->_next!=_pTail)
        {
            tmp = tmp->_next;
        }
        delete _pTail;
        _pTail = tmp;
        tmp->_next = NULL;
    }
}
 
template<class DataType>
 
void LinkList<DataType>::operator=(const LinkList& tmp)
{
    ListNode<DataType>* head =tmp. _pHead;
    while (_pHead)
    {
        PopBack();
    }
    while (head)
    {
        PushBack(head->_data);
        head = head->_next;
    }
}
 
template<class DataType>
 
void LinkList<DataType>::Display()
{
    ListNode<DataType>* tmp = _pHead;
    while (tmp)
    {
        cout <<tmp->_data << "-->" ;
        tmp=tmp->_next;
    }
    cout << "NULL" << endl;
}
 
#include<iostream>//主函數
#include<string>
#include<assert.h>
#include"linklist.h"
 
using namespace std;
 
void test1()
{
    LinkList<string> l1;
    l1.PushBack("woshishuaige 0");
    l1.PushBack("woshishuaige 1");
    l1.PushBack("woshishuaige 2");
    l1.Display();
    /*l1.PopBack();
    l1.PopBack();
    l1.PopBack();
    l1.PopBack();
    l1.PopBack();
    l1.Display();*/
    LinkList<string> l2(l1);
    l2.Display();
    l2.PopBack();
    l2.PopBack();
    l2.Display();
    l2 = l1;
    l2.Display();
     
}
 
int main()
{
    test1();
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved