經典C++筆試題目--100(程式設計練習(比C要難)(91-100))
阿新 • • 發佈:2019-01-03
#include <iostream.h> //定義在標頭檔案"RecurveList.h"中 class List; class ListNode { //連結串列結點類 friend class List; private: int data; //結點資料 ListNode *link; //結點指標 ListNode ( const int item ) : data(item), link(NULL) { } //建構函式 }; class List { //連結串列類 private: ListNode *first, current; int Max ( ListNode *f ); int Num ( ListNode *f ); float Avg ( ListNode *f, int& n ); public: List ( ) : first(NULL), current (NULL) { } //建構函式 ~List ( ){ } //解構函式 ListNode* NewNode ( const int item ); //建立連結串列結點, 其值為item void NewList ( const int retvalue ); //建立連結串列, 以輸入retvalue結束 void PrintList ( ); //輸出連結串列所有結點資料 int GetMax ( ) { return Max ( first ); } //求連結串列所有資料的最大值 int GetNum ( ) { return Num ( first ); } //求連結串列中資料個數 float GetAvg ( ) { return Avg ( first ); } //求連結串列所有資料的平均值 }; ListNode* List :: NewNode ( const int item ) { //建立新連結串列結點 ListNode *newnode = new ListNode (item); return newnode; } void List :: NewList ( const int retvalue ) { //建立連結串列, 以輸入retvalue結束 first = NULL; int value; ListNode *q; cout << "Input your data:\n"; //提示 cin >> value; //輸入 while ( value != retvalue ) { //輸入有效 q = NewNode ( value ); //建立包含value的新結點 if ( first == NULL ) first = current = q;//空表時, 新結點成為連結串列第一個結點 else { current->link = q; current = q; } //非空表時, 新結點鏈入鏈尾 cin >> value; //再輸入 } current->link = NULL; //鏈尾封閉 } void List :: PrintList ( ) { //輸出連結串列 cout << "\nThe List is : \n"; ListNode *p = first; while ( p != NULL ) { cout << p->data << ' '; p = p->link; } cout << ‘\n’; } int List :: Max ( ListNode *f ) { //遞迴演算法 : 求連結串列中的最大值 if ( f ->link == NULL ) return f ->data; //遞迴結束條件 int temp = Max ( f ->link ); //在當前結點的後繼連結串列中求最大值 if ( f ->data > temp ) return f ->data; //如果當前結點的值還要大, 返回當前檢點值 else return temp; //否則返回後繼連結串列中的最大值 } int List :: Num ( ListNode *f ) { //遞迴演算法 : 求連結串列中結點個數 if ( f == NULL ) return 0; //空表, 返回0 return 1+ Num ( f ->link ); //否則, 返回後繼連結串列結點個數加1 } float List :: Avg ( ListNode *f , int& n ) { //遞迴演算法 : 求連結串列中所有元素的平均值 if ( f ->link == NULL ) //連結串列中只有一個結點, 遞迴結束條件 { n = 1; return ( float ) (f ->data ); } else { float Sum = Avg ( f ->link, n ) * n; n++; return ( f ->data + Sum ) / n; } } #include "RecurveList.h" //定義在主檔案中 int main ( int argc, char* argv[ ] ) { List test; int finished; cout << “輸入建表結束標誌資料 :”; cin >> finished; //輸入建表結束標誌資料 test.NewList ( finished ); //建立連結串列 test.PrintList ( ); //列印連結串列 cout << "\nThe Max is : " << test.GetMax ( ); cout << "\nThe Num is : " << test.GetNum ( ); cout << "\nThe Ave is : " << test.GetAve () << '\n'; printf ( "Hello World!\n" ); return 0; }