代碼如下
View Code
1 #include <iostream> 2 #include <fstream> 3 #include <sstream> 4 5 using namespace std; 6 class Student 7 { 8 public: 9 int sId; 10 char sName[10]; 11 }; 12 13 //申明模版類 14 template <typename T> 15 class Link 16 { 17 private: 18 Link * pHead; 19 Link * pCur; 20 Link * pPrev; 21 Link * pNext; 22 T node; 23 int iSize; 24 public: 25 Link() 26 { 27 pHead = NULL; 28 pCur = NULL; 29 pPrev = NULL; 30 iSize = 0; 31 } 32 void push(T& node); 33 int deleteNode(T& node); 34 T searchNode(T& node); 35 }; 36 37 //定義類模版函數 38 template<class T> 39 void Link<T>::push(T& node) 40 { 41 if(pHead == NULL) 42 { 43 pCur = new Link; 44 pCur->pNext = NULL; 45 pHead = pCur; 46 pPrev = pHead; 47 } 48 else 49 { 50 pCur = new Link; 51 pCur->pNext = NULL; 52 53 pPrev->pNext = pCur; 54 pPrev = pCur; 55 } 56 pCur->node = node; 57 iSize ++; 58 } 59 60 template<class T> 61 int Link<T>::deleteNode(T& node) 62 { 63 int flag = 0; 64 Link *pTemp = pHead; 65 Link *pPrev = pHead; 66 while(pTemp != NULL) 67 { 68 if(pTemp->node.sId == node.sId) 69 { 70 if(pTemp == pHead) 71 { 72 pHead = pHead->pNext; 73 } 74 else if(pTemp->pNext == NULL) 75 { 76 pPrev->pNext = pTemp->pNext; 77 } 78 else 79 { 80 pPrev->pNext = pTemp->pNext; 81 } 82 flag = 1; 83 } 84 if(pTemp == pHead) 85 { 86 pPrev = pHead; 87 } 88 else 89 { 90 pTemp = pTemp->pNext; 91 pPrev = pPrev->pNext; 92 } 93 } 94 iSize --; 95 return flag; 96 } 97 98 template<class T> 99 T Link<T>::searchNode(T& node)100 {101 Link *pTemp = pHead;102 Link *pPrev = pHead;103 while(pTemp != NULL)104 {105 if(pTemp->node.sId == node.sId)106 {107 return pTemp->node;108 }109 pTemp = pTemp->pNext;110 }111 }112 113 void operator <<(ostream&,Student s)114 {115 cout<<s.sId<<" "<<s.sName<<endl;116 }117 118 int main()119 {120 Student s1,s2,temp;121 s1.sId = 10;122 strcpy(s1.sName,"xxx");123 s2.sId=2;124 strcpy(s2.sName,"jack");125 Link<Student> link;126 link.push(s1);127 link.push(s2);128 temp = link.searchNode(s2);129 cout<<temp;130 cout<<temp.sName<<endl;131 return 0;132 }
s