如何修改能够比较string类型的大小

ElemType的类型是指所有类型还是指基础类型比如int double char bool等
可以指代为string类吗?
以下是题目

    顺序表ADT模板简单应用算法设计:在给定的顺序表中找出最大和最小的元素

作者: 冯向阳时间限制: 1S章节: DS:线性表

问题描述 :

目的:使用C++模板设计顺序表的抽象数据类型(ADT)。并在此基础上,使用顺序表ADT的基本操作,设计并实现顺序表的简单算法设计。

内容:(1)请使用模板设计顺序表的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考网盘中的ADT原型文件。)

(2)ADT的简单应用:使用该ADT设计并实现顺序表应用场合的一些简单算法设计。

应用8:试设计一个算法,找出顺序表A中最大和最小的元素(输出在屏幕上),并保持原顺序表不变。

参考函数原型:

template
bool Search_Max_Min( SqList &A, ElemType &max, ElemType &min );

输入说明 :

第一行:顺序表A的数据元素的数据类型标记(0:int,1:double,2:char,3:string)

第二行:顺序表A的长度

第三行:顺序表A的数据元素(数据元素之间以空格分隔)

输出说明 :

如第一行输入值为0、1、2、3之外的值,直接输出“err”

否则:

第一行:顺序表A的遍历结果

第二行:最大值max

第三行:最小值min

代码
#include
#include
#include
#include
#include
using namespace std;
template
class SqList
{
private:
ElemType elem; // 存储空间基址
int length; // 当前长度
int listsize; // 允许的最大存储容量(以sizeof(ElemType)为单位
public:
//初始化顺序表
SqList(int ms = 20)
{
listsize=ms;
elem=(ElemType
)malloc(listsize*sizeof(ElemType));
//********************************
length=0;
}
//删除顺序表
~SqList(){delete [] elem;}
//将顺序表置为空表
void ListClear( ){length = 0;}
//返回顺序表的长度
int ListLength() const {return length;}
//设置顺序表的长度
void SetListLength(int len)
{
listsize=len;
}
//判断顺序表是否为空表
bool ListEmpty() const
{
if(length==0)
return true;
else return false;
}
//判断顺序表是否为满表
bool ListFull() const
{
if(length==listsize)
return true;
else return false;
}
//用e返回顺序表的第i个元素
ElemType GetElem(int i) const
{
return elem[i];
}
//用e设置顺序表的第i个元素
bool SetElem(int i, ElemType e)
{
if(ilength)
return false;
else elem[i-1]=e;
return true;
}

  //在顺序表的第pos个位置之前插入e元素
  bool ListInsert(int pos,ElemType e,int n)
  {
      if(pos<0||pos>length)
        return false ;
      if(length>=listsize)
        return false ;
        if(n!=3)
      {for(int i=length;i>pos;i--)
      {
          elem[i]=elem[i-1];
      }
      elem[pos]=e;}
      else{
        for(int i=length;i>pos;i--)
        {
            elem[i].assign(elem[i-1]);
        }
        elem[pos].assign(e);
      }
      length++;
      return true;
  }
  //删除顺序表的第pos个位置的元素
  bool ListDelete(int pos)
  {
      if(pos<0||pos>=length)
        return false ;
        for(int i=pos+1;i<length;i++)
        {
            elem[i-1]=elem[i];
        }
        length--;
        return true;
  }
  //compare函数,用来判断a和b是否相等
  bool compare(ElemType a, ElemType *b)
  {
      if(a==b)
        return true;
      else return false;
  }
  //按指定条件查找
  int LocateElem(ElemType e)
  {
      int i;
      for(i=0;i<length;i++)
      {
          if(elem[i]==e)
           break;
      }
      if (i==length)
        return -1;
      else return i;

  }
  //逆置顺序表
  void Invert(int a, int b)
  {
      ElemType w;
     for(int i=a-1;i<b;i++)
     {
        w=elem[i];
       elem[i]=elem[b+a-2-i];
       elem[b+a-2-i]=w;
     }
  }
  //返回线性表给定数据元素的前驱数据元素的值
  bool PriorElem(ElemType cur_e, ElemType &pri_e)
  {
      int i;
      for( i=0;i<length;i++)
      {
          if(elem[i]==cur_e)
            break;
      }
      if(i==length||i==0)
        return false ;
      else
      {
          pri_e=elem[i-1];
          return pri_e;
      }
  }
  //返回线性表给定数据元素的后继数据元素的值
  bool NextElem(ElemType cur_e, ElemType &nex_e)
  {
      int i;
      for( i=0;i<length;i++)
      {
          if(elem[i]==cur_e)
            break;
      }
      if(i==length)
        return false ;
      else
      {
          nex_e=elem[i+1];
          return nex_e;
      }
  }
  //销毁线性表
  void ListDestroy()
  {
      free(elem);
  }
  //遍历顺序表
 const void ListTraverse()
  {
      for(int i=0;i<length;i++)
      {
          cout<<elem[i]<<" ";
      }
      cout<<endl;
  }
  void change(int m)
  {
      ElemType w;
      int i;
      int n=length-m;
      for(i=0;i<length/2;i++)
      {
          w=elem[i];
          elem[i]=elem[length-i-1];
          elem[length-1-i]=w;
      }
      for(i=0;i<n/2;i++)
      {
          w=elem[i];
          elem[i]=elem[n-1-i];
          elem[n-1-i]=w;
      }
      for(i=n;i<n+m/2;i++)
      {
          w=elem[i];
          elem[i]=elem[length-1-i+n];
          elem[length-1-i+n]=w;
    }
  }
   void Purge_Sq()
 {
     int i,j;
     for(i=0;i<length;i++)
     {
         for(j=i+1;j<length;j++)
         {
             if(elem[i]==elem[j])
                ListDelete(j);
         }
     }
 }
 bool Search_Max_Min(ElemType &max, ElemType &min ,int n)
 {
     int i;

         ElemType temp1=elem[0],temp2=elem[0];
         if(n==0||n==1||n==2)
        {for(i=1;i<length;i++)
        {
            if(elem[i]>=temp1)
                temp1=elem[i];
            if(elem[i]<=temp2)
                temp2=elem[i];
        }}
        else
        {
            for(i=1;i<length;i++)
            {
                if(elem[i]>temp1)
                    temp1=elem[i];
                if(elem[i]<temp2)
                    temp2=elem[i];
            }
        }
        max=temp1;min=temp2;

     return true;
 }

};

int main()
{
int n;
cin>>n;
if(n!=0&&n!=1&&n!=2&&n!=3)
{
cout<<"err"< return 0;
}
else{
int ms,i;
cin>>ms;

       if(n==0)
            {SqList <int>d(ms);
            int md;
           for(i=0;i<ms;i++)
            {
              cin>>md;
              d.ListInsert(i,md,n);
            }
               int max,min;
            d.ListTraverse();
            d.Search_Max_Min(max,min,n);
            cout<<max<<endl<<min<<endl;
            }
        if(n==1)
            {SqList <double>d(ms);
           double md;
           for( i=0;i<ms;i++)
            {
              cin>>md;
              d.ListInsert(i,md,n);

            }
               double max,min;
d.ListTraverse();
d.Search_Max_Min(max,min,n);
cout<<max<<endl<<min<<endl;}
        if(n==2)
            {SqList <char>d(ms);
           char md;
            for( i=0;i<ms;i++)
            {
               cin>>md;
              d.ListInsert(i,md,n);
            }
              char max,min;
d.ListTraverse();
d.Search_Max_Min(max,min,n);cout<<max<<endl<<min<<endl;}
            if(n==3)
            {SqList <string>d(ms);
           string md;
         for( i=0;i<ms;i++)
          {
              cin>>md;
           d.ListInsert(i,md,n);
             }
               string max,min;
d.ListTraverse();
d.Search_Max_Min(max,min,n);}

return 0;

}
}

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐