20120918-LIST类定义《数据结构与算法分析》

LIST类结构

  1 template <typename Object>
  2 class List
  3 {
  4     private:
  5         struct Node//所有都是公有的
  6         {
  7             Object data;
  8             Node *prev;
  9             Node *next;
 10
 11             Node(const Object & d = Object(),Node *p = NUll,Node *n = Null):
 12             data(d) , prev(p) , next(n)
 13             {
 14             }
 15         };
 16     public:
 17         class const_iterator
 18         {
 19                 public:
 20                     const_iterator() : current(NULL){}
 21                     const Object & operator* () const
 22                     {
 23                         return retrieve();
 24                     }
 25                     const_iterator & operator++ ( ) const
 26                     {
 27                         current = current->next;
 28                         return *this;
 29                     }
 30                     const_iterator & operator++( int )
 31                     {
 32                         const_iterator old = *this;
 33                         ++(*this);
 34                         return old;
 35                     }
 36                     bool operator == (const const_iterator * rhs) const
 37                     {
 38                         return current == rhs.current;
 39                     }
 40                     bool operator != (const const_iterator & rhs) const
 41                     {
 42                         return !(*this == rhs);
 43                     }
 44
 45             protected:
 46                 Node *current;
 47
 48                 Object & retrieve() cosnt
 49                 {
 50                     return current->data;
 51                 }
 52                 const_iterator(Node *p) : current(p)
 53                 {
 54                 }
 55                 friend class List<Object>;
 56         };
 57         class iterator : public const_iterator
 58         {
 59             public:
 60                 iterator()
 61                 {
 62                 }
 63                 Object & operator* ()
 64                 {
 65                     return retrieve();
 66                 }
 67                 const Object & operator* () const
 68                 {
 69                     return const_iterator::operator*();
 70                 }
 71                 iterator & operator++()
 72                 {
 73                     iterator old = *this;
 74                     ++(*this);
 75                     return old;
 76                 }
 77
 78             protected:
 79                 iterator(Node *p) : const_iterator(p)
 80                 {
 81                 }
 82
 83                 friend class List<object>;
 84         };
 85     public:
 86         List()
 87         {
 88             init();
 89         }
 90         List(const List & rhs)
 91         {
 92             init();
 93             *this = rhs;
 94         }
 95         ~List()
 96         {
 97             clear();
 98             delete head;
 99             delete tail;
100         }
101         const List & operator =(const List & rhs)
102         {
103             if(this == &rhs)
104                 return *this;
105             clear();
106             for(const_iterator itr = rhs.begin();itr!=rhs.end();++itr)
107                 push_back(*itr);
108             return *this;
109         }
110         void init()
111         {
112             theSize = 0;
113             head = new Node;
114             tail = new Node;
115             head->next = tail;
116             tail->prev = head;
117         }
118
119         iterator begin()
120         {
121             return iterator(head->next);
122         }
123         const_iterator begin() const
124         {
125             return const_iterator(head->next);
126         }
127         iterator end()
128         {
129             return iterator(tail);
130         }
131         const_iterator end() const
132         {
133             return const_iterator(tail);
134         }
135
136         int size() const
137         {
138             return theSize;
139         }
140         bool empty() const
141         {
142             return size() == 0;
143         }
144         void clear()
145         {
146             while(!empty())
147                 pop_front();
148         }
149         Object & front()
150         {
151             return *begin();
152         }
153         const Object & front() const
154         {
155             return *begin();
156         }
157         Object & back()
158         {
159             return *--end();
160         }
161         const Object & back() const
162         {
163             return *--end();
164         }
165         void push_front(const Object & x)
166         {
167             insert(begin(),x);
168         }
169         void push_back(const Object & x)
170         {
171             insert(end(),x);
172         }
173         void pop_front()
174         {
175             erase(begin());
176         }
177         viod pop_back()
178         {
179             erase(end());
180         }
181
182         iterator insert(iterator itr,const Object & x)
183         {
184         }
185         iteratro erase(iterator itr )
186         {
187         }
188         iterator erase(iterator start,iterator end)
189         {
190         }
191
192 private:
193     int theSize;
194     Node *head;
195     Node *tail;
196
197     void init()
198     {
199     }
200 }

本文转自博客园xingoo的博客,原文链接:20120918-LIST类定义《数据结构与算法分析》,如需转载请自行联系原博主。

时间: 2024-09-17 06:45:13

20120918-LIST类定义《数据结构与算法分析》的相关文章

20120918-双向链表类定义《数据结构与算法分析》

将新的节点插入双向链表的时候: iterator insert(iterator itr,const Object & x)//向双向链表中插入一个x节点 { Node *p = itr.current; theSize++; return iterator(p->prev = p->prev->next = new Node(x,p->prev,p)); } LIST类的删除节点的过程: //删除双向链表中的一个节点 iterator erase(iterator itr

20120920-AVL树定义《数据结构与算法分析》

AVL树节点声明: 1 struct AvlNode 2 { 3 Comparable element; 4 AvlNode *left; 5 AvlNode *right; 6 int height; 7 8 AvlNode( const Comparable & theElement,AvlNode *lt,AvlNode *rt,int h=0):element ( theElement),left(lt),right(rt),height(t) 9 }; 计算节点高度: 1 int he

《数据结构与算法:Python语言描述》一2.5类定义实例:学校人事管理系统中的类

2.5类定义实例:学校人事管理系统中的类 作为本章内容的总结,现在考虑一个综合性的实例:为一个学校的人员管理系统定义所需的表示人员信息的类,它们都是数据抽象. 2.5.1问题分析和设计 学校里有两大类人员,即学生和教职工,他们都是需要在系统里表示的对象.分析这两类人员需要记录的信息,可以看到这里有一些值得注意的情况:与两类人员有关的信息中存在一些公共部分,又有各自的特殊情况: 首先,作为人员信息,无论学生或教职工都有姓名.性别.年龄等公共信息.另外,为了便于学校管理,学生应该有一个学号,教职工也

[WebKit]C++类的数据结构及在反汇编上的应用

在反汇编常常要在无法使用调试信息和源代码的情况下查看数据内容,数据结构比较好处理,如果是C++的类,就需要做些总结了. 基础 - POD? C++的成员变量的排列顺序关键在于区别是不是POD(Plain Old Data)类型,从而确定是否需要有VPTR.POD类型会保持和struct相同的数据排列顺序,但在类的定义中不能出现虚函数.析构函数及拷贝的赋值函数等,否则编译器会增加一个Virtual Table Pointer.下面两张图分别表示在继承关系下成员变量的排列顺序. 在反汇编过程中,在已

20120919-二叉树 数据结构《数据结构与算法分析》

又是一次的毕业季,羡慕嫉妒啊.... 二叉查找树类的框架: 1 template <typename Comparable> 2 class BinarySearchTree 3 { 4 public: 5 BinarySearchTree(); 6 BinarySearchTree(const BinarySearchTree & rhs) 7 ~BinarySearchTree(); 8 9 const Comparable & findMin() const; 10 co

数据结构与算法分析:计算两个有序表交集并集

<数据结构与算法分析,C语言描述> 表,栈与队列部分课后习题. Just a test,记录. outPut: Array No.1:2 4 5 7 10 23 Array No.2:3 4 7 13 22 30 Sum intersection:2 4 7 Sum union section:10 2 3 4 5 7 10 13 22 23 30 Code: //Code by Pnig0s1992 //Date:2012,3,22 #include <stdio.h> #inc

Python类定义和类继承详解

  这篇文章主要介绍了Python类定义和类继承详解,本文讲解了类的私有属性.类的方法.私有的类方法.类的专有方法.类的定义.类的单继承.类的多继承等内容,需要的朋友可以参考下 一.类定义: ? 1 2 class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象 类的私有属性: __private_attrs 两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访

name- 如何将dr[&amp;amp;quot;Name&amp;amp;quot;].toString();赋值给父实体类定义子实体类对象属性

问题描述 如何将dr["Name"].toString();赋值给父实体类定义子实体类对象属性 解决方案 根据一张不知所谓的图片和绕口令一样的问题描述想得到答案,只有靠你自己了. 解决方案二: 我解决了 自己太任性了仔细想想就应该明白的以后要自己多去思考才会得到收获的.@caozhy

web-仅在类定义上有 [ScriptService] 特性的 Web 服务才能从脚本中调用。

问题描述 仅在类定义上有 [ScriptService] 特性的 Web 服务才能从脚本中调用. 仅在类定义上有 [ScriptService] 特性的 Web 服务才能从脚本中调用. 解决方案 在.net3.5中,访问web服务,要对web服务添加修饰:[System.Web.Script.Services.ScriptService] 否则,当.ajax()请求服务时,会有异常:只能从脚本中调用在类定义上有[ScriptService]属性的 Web 服务 解决方案二: 在你的方法前面加上[