線性表操作

題目的鏈接地址爲:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1004 
題目爲: 
線性表操作 
描述 


線性表是n個元素的有序集合(n³0),n是線性表中元素的個數,稱爲線性表的長度。可以用一組地址連續的存儲單元依次存儲線性表中元素,採用這種存儲方式的線性表稱爲順序表。 

請在順序表上實現運算,實現順序表的逆置,刪除表中所有元素值等於x的元素。 


輸入 


三組數據,順序表元素類型分別爲整型、字符型和實型。 

每一組第一行給出元素數目n(0<n≤1000),第二行給出元素數值,第三行給出待刪除的元素。 


輸出 


三組數據,每一組第一行爲逆置後的順序表元素,第二行是在此基礎上刪除指定元素後的順序表元素 


樣例輸入 


1 2 3 7 5 6 7 8 


a c m 


1.2 3.4 5.6 7.8 
1.2 

樣例輸出 

8 7 6 5 7 3 2 1 
8 6 5 3 2 1 
m c a 
m c a 
7.8 5.6 3.4 1.2 
7.8 5.6 3.4 



提示 


該題屬於南京郵電大學《數據結構A》實驗一中的內容,驗證的是課本代碼,請慎重解答。 


題目來源 

CHENZ 

很明顯,輸入的三組數據的數據類型都不同,我們不可能爲此而開三個數組,因爲除了數據類型不同外,對於數據的轉置和移除數據的大量代碼是一樣的,大量重複的代碼會導致程序顯得非常糟糕。 
這就需要用到C++中的模板,通過定義模板來處理數據類型不同的問題。 
模板在需要用的類或者方法之前表明template<class T,int num>。這樣程序就可以根據傳入的數據的類型來進行不同的處理,而代碼只需一份即可。 
代碼非常簡單: 
C++代碼 複製代碼
  1. #include<iostream>   
  2. #define MAXNUM 1001   
  3. using namespace std;   
  4. int n,i,j;   
  5. template<class T,int num>   
  6. class myclass{   
  7.  public:   
  8.         T arr[num];         
  9.         void traverse(T arr[])   
  10.         {   
  11.            for(int i=n-1;i>=0;i--)   
  12.            {   
  13.                cout<<arr[i]<<" ";    
  14.            }    
  15.            cout<<endl;   
  16.         }   
  17.         void remove(T arr[],T a)   
  18.         {   
  19.             for(int i=n-1;i>=0;i--)   
  20.             {   
  21.                if(arr[i]!=a)   
  22.                {   
  23.                     cout<<arr[i]<<" ";   
  24.                }    
  25.             }   
  26.             cout<<endl;    
  27.         }   
  28. };   
  29. template<class T>   
  30. void f(myclass<T,MAXNUM> myClass)   
  31. {   
  32.   for(j=0;j<n;j++)   
  33.   {   
  34.         cin>>myClass.arr[j];   
  35.   }    
  36.   T removenum;   
  37.   cin>>removenum;   
  38.   myClass.traverse(myClass.arr);   
  39.   myClass.remove(myClass.arr,removenum);   
  40. }    
  41. int main(){   
  42.   
  43.    for(i=0;i<3;i++)   
  44.    {   
  45.         cin>>n;   
  46.         if(i==0)   
  47.         {   
  48.             myclass<int,MAXNUM> myClass;   
  49.             f(myClass);   
  50.         }   
  51.         else if(i==1)   
  52.         {   
  53.             myclass<char,MAXNUM> myClass;   
  54.             f(myClass);   
  55.         }   
  56.         else if(i==2)   
  57.         {   
  58.             myclass<float,MAXNUM> myClass;   
  59.             f(myClass);   
  60.         }   
  61.    }   
  62.    system("pause");   
  63.    return 0;    
  64. }  
發佈了21 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章