- 论坛徽章:
- 0
|
原帖由 wolf0403 于 2006-4-1 05:46 发表
mylist 的完整定义贴一下。
- #ifndef _MYLIST_H
- #define _MYLIST_H
- #include <iostream>
- #include "mynode.h"
- using namespace std;
- class mylist::iterator;
- class mylist {
- public:
- class iterator;
- friend class iterator;
- mylist();
- mylist(int n, const int & item = 0);
- mylist(int *first, int *last);
- mylist(const mylist &obj);
- mylist &operator=(const mylist &rhs);
- int &back() {return header->prev->nodeValue;};
- bool empty() const {return listSize==0;};
- int &front() {return header->next->nodeValue;};
- void push_back(const int &item);
- void pop_back();
- void push_front(const int &item);
- void pop_front();
- int size() {return listSize;};
- iterator begin() {return iterator(header->next);};
- iterator end() {return iterator(header);};
- virtual ~mylist();
- class iterator {
- public:
- iterator():nodePtr(header) {};
- iterator(mynode *p):nodePtr(p){};
- bool operator==(const iterator &rhs) const {
- return (nodePtr == rhs.nodePtr);
- }
- bool operator!=(const iterator &rhs) const {
- return (nodePtr != rhs.nodePtr);
- }
- int &operator * () {
- return nodePtr->nodeValue;
- }
- iterator operator++() {
- nodePtr = nodePtr->next;
- iterator itertmp = *this;
- return itertmp;
- }
- iterator operator++(int) {
- iterator itertmp = *this;
- nodePtr = nodePtr->next;
- return itertmp;
- }
- iterator operator--() {
- nodePtr = nodePtr->prev;
- iterator itertmp = *this;
- return itertmp;
- }
- iterator operator--(int) {
- iterator itertmp = *this;
- nodePtr = nodePtr->prev;
- return itertmp;
- }
- private:
- mynode *nodePtr;
- };
- private:
- mynode *header;
- int listSize;
- mynode *getnode(const int &item);
- mynode *dinsert(mynode *curr, const int &item);
- void derase(mynode *curr);
- };
- mylist::mylist():listSize(0) {
- header = new mynode;
- header->nodeValue = 0;
- header->next = header;
- header->prev = header;
- }
- mylist::mylist(int n, const int &item):listSize(n) {
- int i;
- header = new mynode;
- for (i=0; i<n; i++) {
- dinsert(header->next, item);
- }
- }
- mylist::mylist(const mylist &obj):listSize(obj.listSize) {
- mynode *curr=obj.header->next, *end=obj.header;
- header = new mynode;
- while (curr != end) {
- dinsert(header, curr->nodeValue);
- curr = curr->next;
- }
- }
- mylist &mylist::operator=(const mylist & rhs) {
- mynode *curr;
- if (header != rhs.header) {
- while (header->next != header) {
- curr = header->next;
- curr = curr->next;
- derase(curr->prev);
- }
- mynode *rptr;
- if (rhs.listSize != 0) {
- rptr = rhs.header;
- while (rptr->next != rhs.header) {
- push_back(rptr->next->nodeValue);
- rptr = rptr->next;
- }
- }
- }
- return *this;
- }
- void mylist::push_front(const int &item) {
- dinsert(header->next, item);
- listSize++;
- }
- void mylist::push_back(const int &item) {
- dinsert(header, item);
- listSize++;
- }
- void mylist::pop_front() {
- derase(header->next);
- listSize--;
- }
- void mylist::pop_back() {
- derase(header->prev);
- listSize--;
- }
- mylist::~mylist() {
- mynode *curr;
- while (header->next != header) {
- curr = header->next;
- curr = curr->next;
- derase(curr->prev);
- }
- }
- mynode* mylist::getnode(const int &item){
- mynode *curr;
- curr = new mynode;
- curr->nodeValue = item;
- return curr;
- }
- mynode* mylist::dinsert(mynode *curr, const int &item) {
- mynode *tmptr;
- tmptr = getnode(item);
- tmptr->prev = curr->prev;
- curr->prev->next = tmptr;
- tmptr->next = curr;
- curr->prev = tmptr;
- return tmptr;
- }
- void mylist::derase(mynode *curr) {
- curr->prev->next = curr->next;
- curr->next->prev = curr->prev;
- delete curr;
- }
- #endif
复制代码
[ 本帖最后由 catbert 于 2006-4-3 08:37 编辑 ] |
|