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;
}
}