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