建立源文件,命名为:Slist.cpp。
#include"Slist.h"int main(){ Test(); system("pause"); return 0;}
建立头文件,命名为:Slist.h。
#ifndef __SLISH_H__#define __SLIST_H__#includeusing namespace std;typedef int DataType;class SlistNode{ friend class Slist;public: SlistNode(DataType x) :_next(NULL) , _data(x) {}private: DataType _data; SlistNode* _next;};class Slist{public: Slist() :_head(NULL) , _tail(NULL) {} Slist(const Slist& s) :_head(NULL) , _tail(NULL) { SlistNode* cur = s._head; while (cur) { this->PushBack(cur->_data); cur = cur->_next; } } Slist& operator= (const Slist& s) { Slist tmp; SlistNode* pcur = _head; while (pcur) { SlistNode* del = pcur; pcur = pcur->_next; delete del; del = NULL; } tmp = s; SlistNode* cur = s._head; while (cur) { this->PushBack(cur->_data); cur = cur->_next; } } ~Slist() { SlistNode* cur = _head; while (cur) { SlistNode* del = cur; cur = cur->_next; delete del; del = NULL; } } void PushBack(DataType x) { //0 1多 if (_head == NULL) { _head = new SlistNode(x); _tail = _head; } else { /*_tail->_next = new SlistNode(x); _tail = _tail->_next; */ SlistNode* cur = new SlistNode(x); _tail->_next = cur; _tail = cur; } } void PopBack() { if (_head == _tail) { if (_head == NULL) { return; } else { delete _head; _head = NULL; _tail = NULL; } } else { SlistNode* cur = _head; while (cur) { SlistNode* _next = cur->_next; if (_next == _tail) { delete _tail; _tail = NULL; _tail = cur; _tail->_next = NULL; } cur = cur->_next; } } } void PrintSlist() { if (_head== NULL) { return; } else { SlistNode* cur = _head; while (cur) { cout << cur->_data << " "; cur = cur->_next; } cout << endl; } }private: SlistNode* _head; SlistNode* _tail;};void Test(){ Slist s; s.PushBack(1); s.PushBack(2); s.PushBack(3); s.PushBack(4); s.PushBack(5); s.PrintSlist(); s.PopBack(); s.PrintSlist();}#endif //__SLIST_H__