?? p79_81.cpp
字號:
#include <stdio.h>
enum Boolean { False, True };
template <class Type> class List; //鏈表類的前視定義
template <class Type> class ListIterator; //鏈表結(jié)點類的前視定義
template <class Type> class ListNode { //鏈表結(jié)點類的類聲明
friend class List <Type>; //友元
friend class ListIterator <Type>; //友元
public:
ListNode ( const Type value ) : data (value), link (NULL) { }
//………
private:
Type data;
ListNode<Type> *link;
};
template <class Type> class List { //鏈表類的類聲明
public:
friend class ListIterator<Type>;
List ( const Type value) { last =first = new ListNode<Type> (value) ; } //構(gòu)造函數(shù)
void Add ( const Type value ) ;
//………
private:
ListNode<Type> *first, *last;
};
template <class Type> class ListIterator { //鏈表游標類的類聲明
public:
ListIterator ( const List<Type> & l ) : list (l), current (l.first) { }
Boolean NotNull ( );
Boolean NextNotNull ( );
Type First ( );
Type Next ( );
private:
const List<Type> & list; //引用一個已存在的鏈表
ListNode<Type> *current; //指向鏈表中的一個結(jié)點
}
template <class Type> Boolean ListIterator<Type>::NotNull ( ) {
//檢查鏈表中當前元素是否非空
if ( current != NULL ) return True; //鏈表當前結(jié)點指針非空
else return False;
}
template <class Type> Boolean ListIterator<Type>::NextNotNull ( ) {
//檢查鏈表中下一元素是否非空
if ( current != NULL && current->link != NULL ) return True;
else return False;
}
template <class Type> Type ListIterator<Type>::First ( ) {
//返回指向鏈表中表頭結(jié)點的指針
Type temp;
if ( list.first->link != NULL ) {
current = list.first;
temp = current->data;
}
else { current = NULL; temp = 0;}
return temp;
}
template <class Type> Type ListIterator<Type>::Next ( ) {
//返回指向鏈表中下一個結(jié)點的指針
Type temp;
if ( current != NULL && current->link != NULL ) {
current = current->link;
temp = current->data;
}
else { current = NULL; temp = 0;}
return temp;
}
int sum ( const List<int> &l ) {
ListIterator<int> li (l); //定義對象li為操作鏈表對象l的游標對象
if ( ! li.NextNotNull ( ) ) return 0; //空鏈表, 返回0
int retvalue = li.First ( ); //取得第一個元素的值
while ( li.NextNotNull ( ) ) retvalue += li.Next ( ); //看是否下一個結(jié)點存在,若有, 累加
return retvalue;
}
template <class Type> void List<Type>::Add(const Type value) {
last->link = new ListNode<Type> (value);
last = last->link;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -