C ++ template-type single-chain table
# Pragma once // function file # include <iostream> # include <string> # include <assert. h> using namespace std; template <class DataType> // node 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 () {}// single-chain table operation 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) {Push Back (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> // main function # 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 ;}