线性表操作

题目的链接地址为: 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. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值